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

切换至 IAM 角色 (AWS API)

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

重要

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

要担任角色,应用程序需调用 AWS STS AssumeRole API 操作并传递角色的 ARN 以供使用。在调用 AssumeRole 时,您可以选择传递 JSON 策略。这样,您可以限制角色的临时凭证的权限。当您需要向其他人提供临时凭证时,这非常有用。他们可以在后续的 AWS API 调用中使用角色的临时凭证来访问拥有该角色的账户中的资源。您无法使用传递的策略授予所代入的角色的权限策略不允许的权限。要了解有关 AWS 如何确定角色的有效权限的更多信息,请参阅策略评估逻辑


      PermissionsWhenPassingRoles_Diagram

在以 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)