AWS Identity and Access Management
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

切换到 IAM 角色 (API)

角色 指定可用于访问所需的 AWS 资源的一组权限。在这种意义上,它类似于 AWS Identity and Access Management (IAM) 中的用户。应用程序将代入角色以获得权限,从而执行所需任务并与 AWS 资源交互。角色可以在您自己的账户中或任何其他 AWS 账户中。有关角色、其权益以及如何创建和配置角色的更多信息,请参阅IAM 角色创建 IAM 角色

本部分介绍如何从使用 AWS API 的代码中切换角色。

请注意,所有访问密钥和令牌都只是示例,不能原样照用。请用您的实际环境的适当值替换。

要担任角色,应用程序需调用 AWS STS AssumeRole API 并传递角色的 ARN 以供使用。AssumeRole API 返回一组临时安全凭证,您可在后续的 AWS API 调用中使用这些凭证来访问拥有该角色的账户中的资源。临时凭证具有在角色的权限策略中定义的任何权限。可以选择在 AssumeRole 调用中传递一个补充策略,该策略可进一步限制 (筛选) AssumeRole API 所返回的临时安全凭证的权限。只能使用 IAM 用户或 IAM 角色凭证调用 AssumeRole。不能使用 AWS 账户根用户 凭证调用 AssumeRole

注意

出于安全原因,您可以使用 AWS CloudTrail 审核角色在账户中的使用。AssumeRole 调用必须包括一个长度为 2 到 64 个字符的角色会话名称,该名称可包含字母、数字和 =,.@- 字符。角色会话名称在 CloudTrail 日志中用于识别临时安全凭证所执行的操作。有关更多信息,请参阅AWS CloudTrail User Guide 中的 CloudTrail 事件引用

Python 中的以下示例使用连接到 AWS 的 Boto3 界面 (AWS SDK for Python (Boto) V3) 介绍如何调用 AssumeRole 以及如何使用 AssumeRole 返回的临时安全凭证列出拥有该角色的账户中的所有 Amazon S3 存储桶。

import boto3 # The calls to AWS STS AssumeRole must be signed with the access key ID # and secret access key of an existing IAM user or by using existing temporary # credentials such as those from antoher role. (You cannot call AssumeRole # with the access key for the root account.) The credentials can be in # environment variables or in a configuration file and will be discovered # automatically by the boto3.client() function. For more information, see the # Python SDK documentation: # http://boto3.readthedocs.io/en/latest/reference/services/sts.html#client # create an STS client object that represents a live connection to the # STS service sts_client = boto3.client('sts') # Call the assume_role method of the STSConnection object and pass the role # ARN and a role session name. assumedRoleObject = sts_client.assume_role( RoleArn="arn:aws-cn:iam::account-of-role-to-assume:role/name-of-role", RoleSessionName="AssumeRoleSession1" ) # From the response that contains the assumed role, get the temporary # credentials that can be used to make subsequent API calls credentials = assumedRoleObject['Credentials'] # Use the temporary credentials that AssumeRole returns to make a # connection to Amazon S3 s3_resource = boto3.resource( 's3', aws_access_key_id = credentials['AccessKeyId'], aws_secret_access_key = credentials['SecretAccessKey'], aws_session_token = credentials['SessionToken'], ) # Use the Amazon S3 resource object that is now configured with the # credentials to access your S3 buckets. for bucket in s3_resource.buckets.all(): print(bucket.name)