123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326 |
- // Code generated by smithy-go-codegen DO NOT EDIT.
- package sts
- import (
- "context"
- awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
- "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
- "github.com/aws/aws-sdk-go-v2/service/sts/types"
- "github.com/aws/smithy-go/middleware"
- smithyhttp "github.com/aws/smithy-go/transport/http"
- )
- // Returns a set of temporary security credentials (consisting of an access key ID,
- // a secret access key, and a security token) for a federated user. A typical use
- // is in a proxy application that gets temporary security credentials on behalf of
- // distributed applications inside a corporate network. You must call the
- // GetFederationToken operation using the long-term security credentials of an IAM
- // user. As a result, this call is appropriate in contexts where those credentials
- // can be safely stored, usually in a server-based application. For a comparison of
- // GetFederationToken with the other API operations that produce temporary
- // credentials, see Requesting Temporary Security Credentials
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html)
- // and Comparing the Amazon Web Services STS API operations
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison)
- // in the IAM User Guide. You can create a mobile-based or browser-based app that
- // can authenticate users using a web identity provider like Login with Amazon,
- // Facebook, Google, or an OpenID Connect-compatible identity provider. In this
- // case, we recommend that you use Amazon Cognito (http://aws.amazon.com/cognito/)
- // or AssumeRoleWithWebIdentity. For more information, see Federation Through a
- // Web-based Identity Provider
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity)
- // in the IAM User Guide. You can also call GetFederationToken using the security
- // credentials of an Amazon Web Services account root user, but we do not recommend
- // it. Instead, we recommend that you create an IAM user for the purpose of the
- // proxy application. Then attach a policy to the IAM user that limits federated
- // users to only the actions and resources that they need to access. For more
- // information, see IAM Best Practices
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) in the
- // IAM User Guide. Session duration The temporary credentials are valid for the
- // specified duration, from 900 seconds (15 minutes) up to a maximum of 129,600
- // seconds (36 hours). The default session duration is 43,200 seconds (12 hours).
- // Temporary credentials obtained by using the Amazon Web Services account root
- // user credentials have a maximum duration of 3,600 seconds (1 hour). Permissions
- // You can use the temporary credentials created by GetFederationToken in any
- // Amazon Web Services service with the following exceptions:
- //
- // * You cannot call
- // any IAM operations using the CLI or the Amazon Web Services API. This limitation
- // does not apply to console sessions.
- //
- // * You cannot call any STS operations except
- // GetCallerIdentity.
- //
- // You can use temporary credentials for single sign-on (SSO)
- // to the console. You must pass an inline or managed session policy
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
- // to this operation. You can pass a single JSON policy document to use as an
- // inline session policy. You can also specify up to 10 managed policy Amazon
- // Resource Names (ARNs) to use as managed session policies. The plaintext that you
- // use for both inline and managed session policies can't exceed 2,048 characters.
- // Though the session policy parameters are optional, if you do not pass a policy,
- // then the resulting federated user session has no permissions. When you pass
- // session policies, the session permissions are the intersection of the IAM user
- // policies and the session policies that you pass. This gives you a way to further
- // restrict the permissions for a federated user. You cannot use session policies
- // to grant more permissions than those that are defined in the permissions policy
- // of the IAM user. For more information, see Session Policies
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
- // in the IAM User Guide. For information about using GetFederationToken to create
- // temporary security credentials, see GetFederationToken—Federation Through a
- // Custom Identity Broker
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_getfederationtoken).
- // You can use the credentials to access a resource that has a resource-based
- // policy. If that policy specifically references the federated user session in the
- // Principal element of the policy, the session has the permissions allowed by the
- // policy. These permissions are granted in addition to the permissions granted by
- // the session policies. Tags (Optional) You can pass tag key-value pairs to your
- // session. These are called session tags. For more information about session tags,
- // see Passing Session Tags in STS
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) in the
- // IAM User Guide. You can create a mobile-based or browser-based app that can
- // authenticate users using a web identity provider like Login with Amazon,
- // Facebook, Google, or an OpenID Connect-compatible identity provider. In this
- // case, we recommend that you use Amazon Cognito (http://aws.amazon.com/cognito/)
- // or AssumeRoleWithWebIdentity. For more information, see Federation Through a
- // Web-based Identity Provider
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#api_assumerolewithwebidentity)
- // in the IAM User Guide. An administrator must grant you the permissions necessary
- // to pass session tags. The administrator can also create granular permissions to
- // allow you to pass only specific session tags. For more information, see
- // Tutorial: Using Tags for Attribute-Based Access Control
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)
- // in the IAM User Guide. Tag key–value pairs are not case sensitive, but case is
- // preserved. This means that you cannot have separate Department and department
- // tag keys. Assume that the user that you are federating has the
- // Department=Marketing tag and you pass the department=engineering session tag.
- // Department and department are not saved as separate tags, and the session tag
- // passed in the request takes precedence over the user tag.
- func (c *Client) GetFederationToken(ctx context.Context, params *GetFederationTokenInput, optFns ...func(*Options)) (*GetFederationTokenOutput, error) {
- if params == nil {
- params = &GetFederationTokenInput{}
- }
- result, metadata, err := c.invokeOperation(ctx, "GetFederationToken", params, optFns, c.addOperationGetFederationTokenMiddlewares)
- if err != nil {
- return nil, err
- }
- out := result.(*GetFederationTokenOutput)
- out.ResultMetadata = metadata
- return out, nil
- }
- type GetFederationTokenInput struct {
- // The name of the federated user. The name is used as an identifier for the
- // temporary security credentials (such as Bob). For example, you can reference the
- // federated user name in a resource-based policy, such as in an Amazon S3 bucket
- // policy. The regex used to validate this parameter is a string of characters
- // consisting of upper- and lower-case alphanumeric characters with no spaces. You
- // can also include underscores or any of the following characters: =,.@-
- //
- // This member is required.
- Name *string
- // The duration, in seconds, that the session should last. Acceptable durations for
- // federation sessions range from 900 seconds (15 minutes) to 129,600 seconds (36
- // hours), with 43,200 seconds (12 hours) as the default. Sessions obtained using
- // Amazon Web Services account root user credentials are restricted to a maximum of
- // 3,600 seconds (one hour). If the specified duration is longer than one hour, the
- // session obtained by using root user credentials defaults to one hour.
- DurationSeconds *int32
- // An IAM policy in JSON format that you want to use as an inline session policy.
- // You must pass an inline or managed session policy
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
- // to this operation. You can pass a single JSON policy document to use as an
- // inline session policy. You can also specify up to 10 managed policy Amazon
- // Resource Names (ARNs) to use as managed session policies. This parameter is
- // optional. However, if you do not pass any session policies, then the resulting
- // federated user session has no permissions. When you pass session policies, the
- // session permissions are the intersection of the IAM user policies and the
- // session policies that you pass. This gives you a way to further restrict the
- // permissions for a federated user. You cannot use session policies to grant more
- // permissions than those that are defined in the permissions policy of the IAM
- // user. For more information, see Session Policies
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
- // in the IAM User Guide. The resulting credentials can be used to access a
- // resource that has a resource-based policy. If that policy specifically
- // references the federated user session in the Principal element of the policy,
- // the session has the permissions allowed by the policy. These permissions are
- // granted in addition to the permissions that are granted by the session policies.
- // The plaintext that you use for both inline and managed session policies can't
- // exceed 2,048 characters. The JSON policy characters can be any ASCII character
- // from the space character to the end of the valid character list (\u0020 through
- // \u00FF). It can also include the tab (\u0009), linefeed (\u000A), and carriage
- // return (\u000D) characters. An Amazon Web Services conversion compresses the
- // passed inline session policy, managed policy ARNs, and session tags into a
- // packed binary format that has a separate limit. Your request can fail for this
- // limit even if your plaintext meets the other requirements. The PackedPolicySize
- // response element indicates by percentage how close the policies and tags for
- // your request are to the upper size limit.
- Policy *string
- // The Amazon Resource Names (ARNs) of the IAM managed policies that you want to
- // use as a managed session policy. The policies must exist in the same account as
- // the IAM user that is requesting federated access. You must pass an inline or
- // managed session policy
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
- // to this operation. You can pass a single JSON policy document to use as an
- // inline session policy. You can also specify up to 10 managed policy Amazon
- // Resource Names (ARNs) to use as managed session policies. The plaintext that you
- // use for both inline and managed session policies can't exceed 2,048 characters.
- // You can provide up to 10 managed policy ARNs. For more information about ARNs,
- // see Amazon Resource Names (ARNs) and Amazon Web Services Service Namespaces
- // (https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) in
- // the Amazon Web Services General Reference. This parameter is optional. However,
- // if you do not pass any session policies, then the resulting federated user
- // session has no permissions. When you pass session policies, the session
- // permissions are the intersection of the IAM user policies and the session
- // policies that you pass. This gives you a way to further restrict the permissions
- // for a federated user. You cannot use session policies to grant more permissions
- // than those that are defined in the permissions policy of the IAM user. For more
- // information, see Session Policies
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
- // in the IAM User Guide. The resulting credentials can be used to access a
- // resource that has a resource-based policy. If that policy specifically
- // references the federated user session in the Principal element of the policy,
- // the session has the permissions allowed by the policy. These permissions are
- // granted in addition to the permissions that are granted by the session policies.
- // An Amazon Web Services conversion compresses the passed inline session policy,
- // managed policy ARNs, and session tags into a packed binary format that has a
- // separate limit. Your request can fail for this limit even if your plaintext
- // meets the other requirements. The PackedPolicySize response element indicates by
- // percentage how close the policies and tags for your request are to the upper
- // size limit.
- PolicyArns []types.PolicyDescriptorType
- // A list of session tags. Each session tag consists of a key name and an
- // associated value. For more information about session tags, see Passing Session
- // Tags in STS
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) in the
- // IAM User Guide. This parameter is optional. You can pass up to 50 session tags.
- // The plaintext session tag keys can’t exceed 128 characters and the values can’t
- // exceed 256 characters. For these and additional limits, see IAM and STS
- // Character Limits
- // (https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-limits.html#reference_iam-limits-entity-length)
- // in the IAM User Guide. An Amazon Web Services conversion compresses the passed
- // inline session policy, managed policy ARNs, and session tags into a packed
- // binary format that has a separate limit. Your request can fail for this limit
- // even if your plaintext meets the other requirements. The PackedPolicySize
- // response element indicates by percentage how close the policies and tags for
- // your request are to the upper size limit. You can pass a session tag with the
- // same key as a tag that is already attached to the user you are federating. When
- // you do, session tags override a user tag with the same key. Tag key–value pairs
- // are not case sensitive, but case is preserved. This means that you cannot have
- // separate Department and department tag keys. Assume that the role has the
- // Department=Marketing tag and you pass the department=engineering session tag.
- // Department and department are not saved as separate tags, and the session tag
- // passed in the request takes precedence over the role tag.
- Tags []types.Tag
- noSmithyDocumentSerde
- }
- // Contains the response to a successful GetFederationToken request, including
- // temporary Amazon Web Services credentials that can be used to make Amazon Web
- // Services requests.
- type GetFederationTokenOutput struct {
- // The temporary security credentials, which include an access key ID, a secret
- // access key, and a security (or session) token. The size of the security token
- // that STS API operations return is not fixed. We strongly recommend that you make
- // no assumptions about the maximum size.
- Credentials *types.Credentials
- // Identifiers for the federated user associated with the credentials (such as
- // arn:aws:sts::123456789012:federated-user/Bob or 123456789012:Bob). You can use
- // the federated user's ARN in your resource-based policies, such as an Amazon S3
- // bucket policy.
- FederatedUser *types.FederatedUser
- // A percentage value that indicates the packed size of the session policies and
- // session tags combined passed in the request. The request fails if the packed
- // size is greater than 100 percent, which means the policies and tags exceeded the
- // allowed space.
- PackedPolicySize *int32
- // Metadata pertaining to the operation's result.
- ResultMetadata middleware.Metadata
- noSmithyDocumentSerde
- }
- func (c *Client) addOperationGetFederationTokenMiddlewares(stack *middleware.Stack, options Options) (err error) {
- err = stack.Serialize.Add(&awsAwsquery_serializeOpGetFederationToken{}, middleware.After)
- if err != nil {
- return err
- }
- err = stack.Deserialize.Add(&awsAwsquery_deserializeOpGetFederationToken{}, middleware.After)
- if err != nil {
- return err
- }
- if err = addSetLoggerMiddleware(stack, options); err != nil {
- return err
- }
- if err = awsmiddleware.AddClientRequestIDMiddleware(stack); err != nil {
- return err
- }
- if err = smithyhttp.AddComputeContentLengthMiddleware(stack); err != nil {
- return err
- }
- if err = addResolveEndpointMiddleware(stack, options); err != nil {
- return err
- }
- if err = v4.AddComputePayloadSHA256Middleware(stack); err != nil {
- return err
- }
- if err = addRetryMiddlewares(stack, options); err != nil {
- return err
- }
- if err = addHTTPSignerV4Middleware(stack, options); err != nil {
- return err
- }
- if err = awsmiddleware.AddRawResponseToMetadata(stack); err != nil {
- return err
- }
- if err = awsmiddleware.AddRecordResponseTiming(stack); err != nil {
- return err
- }
- if err = addClientUserAgent(stack); err != nil {
- return err
- }
- if err = smithyhttp.AddErrorCloseResponseBodyMiddleware(stack); err != nil {
- return err
- }
- if err = smithyhttp.AddCloseResponseBodyMiddleware(stack); err != nil {
- return err
- }
- if err = addOpGetFederationTokenValidationMiddleware(stack); err != nil {
- return err
- }
- if err = stack.Initialize.Add(newServiceMetadataMiddleware_opGetFederationToken(options.Region), middleware.Before); err != nil {
- return err
- }
- if err = addRequestIDRetrieverMiddleware(stack); err != nil {
- return err
- }
- if err = addResponseErrorMiddleware(stack); err != nil {
- return err
- }
- if err = addRequestResponseLogging(stack, options); err != nil {
- return err
- }
- return nil
- }
- func newServiceMetadataMiddleware_opGetFederationToken(region string) *awsmiddleware.RegisterServiceMetadata {
- return &awsmiddleware.RegisterServiceMetadata{
- Region: region,
- ServiceID: ServiceID,
- SigningName: "sts",
- OperationName: "GetFederationToken",
- }
- }
|