2022-03-02 10:30:48 +00:00
// Code generated by smithy-go-codegen DO NOT EDIT.
package sts
import (
"context"
2023-08-01 12:43:19 +00:00
"fmt"
2022-03-02 10:30:48 +00:00
awsmiddleware "github.com/aws/aws-sdk-go-v2/aws/middleware"
"github.com/aws/aws-sdk-go-v2/service/sts/types"
"github.com/aws/smithy-go/middleware"
smithyhttp "github.com/aws/smithy-go/transport/http"
)
2023-05-01 20:59:21 +00:00
// Returns a set of temporary security credentials (consisting of an access key
2023-05-09 13:09:18 +00:00
// ID, a secret access key, and a security token) for a 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
2022-03-02 10:30:48 +00:00
// GetFederationToken operation using the long-term security credentials of an IAM
// user. As a result, this call is appropriate in contexts where those credentials
2023-05-09 13:09:18 +00:00
// can be safeguarded, usually in a server-based application. For a comparison of
2022-03-02 10:30:48 +00:00
// GetFederationToken with the other API operations that produce temporary
2023-05-01 20:59:21 +00:00
// 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)
2023-05-09 13:09:18 +00:00
// in the IAM User Guide. Although it is possible to call GetFederationToken using
// the security credentials of an Amazon Web Services account root user rather than
// an IAM user that you create for the purpose of a proxy application, we do not
// recommend it. For more information, see Safeguard your root user credentials
// and don't use them for everyday tasks (https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#lock-away-credentials)
2022-03-02 10:30:48 +00:00
// 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/)
2023-05-01 20:59:21 +00:00
// 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. Session duration The temporary credentials are valid for
// the specified duration, from 900 seconds (15 minutes) up to a maximum of 129,600
2022-03-02 10:30:48 +00:00
// seconds (36 hours). The default session duration is 43,200 seconds (12 hours).
2023-05-09 13:09:18 +00:00
// Temporary credentials obtained by using the 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:
2023-05-01 20:59:21 +00:00
// - 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 .
2022-03-02 10:30:48 +00:00
//
2023-05-01 20:59:21 +00:00
// 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)
2022-03-02 10:30:48 +00:00
// to this operation. You can pass a single JSON policy document to use as an
2022-11-23 13:53:39 +00:00
// 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
2023-05-01 20:59:21 +00:00
// of the IAM user. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
2022-03-02 10:30:48 +00:00
// in the IAM User Guide. For information about using GetFederationToken to create
// temporary security credentials, see GetFederationToken—Federation Through a
2023-05-01 20:59:21 +00:00
// 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
2022-03-02 10:30:48 +00:00
// 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,
2023-05-01 20:59:21 +00:00
// 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,
2022-03-02 10:30:48 +00:00
// Facebook, Google, or an OpenID Connect-compatible identity provider. In this
// case, we recommend that you use Amazon Cognito (http://aws.amazon.com/cognito/)
2023-05-01 20:59:21 +00:00
// 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)
2022-03-02 10:30:48 +00:00
// 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
2023-05-01 20:59:21 +00:00
// Tutorial: Using Tags for Attribute-Based Access Control (https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)
2022-03-02 10:30:48 +00:00
// 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
2023-05-01 20:59:21 +00:00
// 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.
2022-03-02 10:30:48 +00:00
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
2023-05-01 20:59:21 +00:00
// 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:
// =,.@-
2022-03-02 10:30:48 +00:00
//
// This member is required.
Name * string
2023-05-01 20:59:21 +00:00
// 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
2023-05-09 13:09:18 +00:00
// using 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.
2022-03-02 10:30:48 +00:00
DurationSeconds * int32
// An IAM policy in JSON format that you want to use as an inline session policy.
2023-05-01 20:59:21 +00:00
// You must pass an inline or managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
2022-03-02 10:30:48 +00:00
// to this operation. You can pass a single JSON policy document to use as an
2022-11-23 13:53:39 +00:00
// 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
2023-05-01 20:59:21 +00:00
// user. For more information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
2022-03-02 10:30:48 +00:00
// 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
2022-11-23 13:53:39 +00:00
// 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.
2022-03-02 10:30:48 +00:00
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
2023-05-01 20:59:21 +00:00
// managed session policy (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
2022-03-02 10:30:48 +00:00
// to this operation. You can pass a single JSON policy document to use as an
2022-11-23 13:53:39 +00:00
// 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,
2023-05-01 20:59:21 +00:00
// 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
2022-03-02 10:30:48 +00:00
// 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
2023-05-01 20:59:21 +00:00
// information, see Session Policies (https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session)
2022-03-02 10:30:48 +00:00
// 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.
2022-11-23 13:53:39 +00:00
// 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
2023-05-01 20:59:21 +00:00
// meets the other requirements. The PackedPolicySize response element indicates
// by percentage how close the policies and tags for your request are to the upper
2022-11-23 13:53:39 +00:00
// size limit.
2022-03-02 10:30:48 +00:00
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
2023-05-01 20:59:21 +00:00
// 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)
2022-03-02 10:30:48 +00:00
// in the IAM User Guide. An Amazon Web Services conversion compresses the passed
2022-11-23 13:53:39 +00:00
// 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
2023-05-01 20:59:21 +00:00
// 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.
2022-03-02 10:30:48 +00:00
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
2023-05-01 20:59:21 +00:00
// arn:aws:sts::123456789012:federated-user/Bob or 123456789012:Bob ). You can use
2022-03-02 10:30:48 +00:00
// 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 ) {
2023-11-20 20:28:57 +00:00
if err := stack . Serialize . Add ( & setOperationInputMiddleware { } , middleware . After ) ; err != nil {
return err
}
2022-03-02 10:30:48 +00:00
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
}
2023-11-20 20:28:57 +00:00
if err := addProtocolFinalizerMiddlewares ( stack , options , "GetFederationToken" ) ; err != nil {
return fmt . Errorf ( "add protocol finalizers: %v" , err )
}
2023-08-01 12:43:19 +00:00
if err = addlegacyEndpointContextSetter ( stack , options ) ; err != nil {
return err
}
2022-03-02 10:30:48 +00:00
if err = addSetLoggerMiddleware ( stack , options ) ; err != nil {
return err
}
2024-02-26 20:50:16 +00:00
if err = addClientRequestID ( stack ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
2024-02-26 20:50:16 +00:00
if err = addComputeContentLength ( stack ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
if err = addResolveEndpointMiddleware ( stack , options ) ; err != nil {
return err
}
2024-02-26 20:50:16 +00:00
if err = addComputePayloadSHA256 ( stack ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
2024-02-26 20:50:16 +00:00
if err = addRetry ( stack , options ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
2024-02-26 20:50:16 +00:00
if err = addRawResponseToMetadata ( stack ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
2024-02-26 20:50:16 +00:00
if err = addRecordResponseTiming ( stack ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
2023-07-18 07:48:48 +00:00
if err = addClientUserAgent ( stack , options ) ; err != nil {
2022-03-02 10:30:48 +00:00
return err
}
if err = smithyhttp . AddErrorCloseResponseBodyMiddleware ( stack ) ; err != nil {
return err
}
if err = smithyhttp . AddCloseResponseBodyMiddleware ( stack ) ; err != nil {
return err
}
2023-11-20 20:28:57 +00:00
if err = addSetLegacyContextSigningOptionsMiddleware ( stack ) ; err != nil {
2023-08-01 12:43:19 +00:00
return err
}
2022-03-02 10:30:48 +00:00
if err = addOpGetFederationTokenValidationMiddleware ( stack ) ; err != nil {
return err
}
if err = stack . Initialize . Add ( newServiceMetadataMiddleware_opGetFederationToken ( options . Region ) , middleware . Before ) ; err != nil {
return err
}
2024-02-26 20:50:16 +00:00
if err = addRecursionDetection ( stack ) ; err != nil {
2023-05-01 20:59:21 +00:00
return err
}
2022-03-02 10:30:48 +00:00
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
}
2023-11-20 20:28:57 +00:00
if err = addDisableHTTPSMiddleware ( stack , options ) ; err != nil {
2023-08-01 12:43:19 +00:00
return err
}
2022-03-02 10:30:48 +00:00
return nil
}
func newServiceMetadataMiddleware_opGetFederationToken ( region string ) * awsmiddleware . RegisterServiceMetadata {
return & awsmiddleware . RegisterServiceMetadata {
Region : region ,
ServiceID : ServiceID ,
OperationName : "GetFederationToken" ,
}
}