AWS Identity and Access Management
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

切换到 IAM 角色 (API)

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

重要

不会累积您的 IAM 用户和担任的任何角色的权限。一次只有一组权限处于活动状态。在担任某个角色时,您将临时放弃以前的用户或角色权限并使用为该角色分配的权限。退出该角色后,您的用户权限将自动恢复。

要担任某个角色,应用程序需要调用 AWS STS AssumeRole API 操作并传递角色的 ARN 以供使用。AssumeRole API 返回一组临时安全凭证,您可在后续的 AWS API 调用中使用这些凭证来访问拥有该角色的账户中的资源。临时凭证具有在角色的权限策略中定义的任何权限。可以选择在 AssumeRole 调用中传递一个补充策略,该策略可进一步限制 (筛选) AssumeRole API 所返回的临时安全凭证的权限。在以 IAM 用户或已使用角色的外部验证的用户 (SAMLOIDC) 身份登录后,您可以调用 AssumeRole。您还可以使用角色链,它使用一个角色担任另一个角色。在以 AWS 账户根用户身份登录时,您无法担任角色。

默认情况下,您的角色会话持续 1 小时。在使用 AWS STS AssumeRole* API 操作担任该角色时,您可以为 DurationSeconds 参数指定一个值。该值的范围在 900 秒 (15 分钟) 到角色的最大会话持续时间设置之间。要了解如何查看您的角色的最大值,请参阅查看角色的最大会话持续时间设置

如果使用角色链,您的会话限制为最多 1 小时。如果您随后使用 DurationSeconds 参数提供大于 1 小时的值,操作将失败。

注意

出于安全原因,您可以使用 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)