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

使用临时安全凭证以请求对 AWS 资源的访问权限

可使用临时安全凭证,通过使用 AWS 软件开发工具包或 API 调用以编程方式提出 AWS 资源请求,也可按同样方式使用 IAM 用户凭证等长期安全凭证。但还是有几个区别:

  • 使用临时安全凭证进行调用时,必须在调用中包含随这些临时凭证一同返回的会话令牌。AWS 使用该会话令牌来验证临时安全凭证的有效性。

  • 临时凭证在指定间隔后到期。凭证到期后,任何使用这些凭证进行的调用都将失败,因此必须获取新的一组凭证。

如果您使用的是 AWS 软件开发工具包AWS Command Line Interface (AWS CLI) 或 Windows PowerShell 工具,则获取和使用临时安全凭证的方式随上下文的不同而有所差异。如果您在 EC2 实例内部运行代码、AWS CLI 或 Windows PowerShell 工具 命令,则可使用 Amazon EC2 的角色。否则,您可调用 AWS STS API 来获取临时凭证,然后使用这些凭证显式地调用 AWS 服务。

注意

您可以使用 AWS Security Token Service (AWS STS) 创建可控制对您的 AWS 资源的访问的临时安全凭证,并将这些凭证提供给可信用户。有关 AWS STS 的更多信息,请参阅临时安全凭证。AWS STS 是一种全球服务,在 https://sts.amazonaws.com 上具有默认终端节点。此终端节点处于 区域中,不过,您从此终端节点和其他终端节点获取的凭证在全球范围都有效,可用于任何区域中的服务和资源。您也可以选择对任何受支持区域中的终端节点发出 AWS STS API 调用。这可以从地理位置比较接近您的区域中的服务器进行请求,从而减少延迟。无论您的证书来自哪个区域,它们都在全球范围起作用。有关更多信息,请参阅 在 AWS 区域中激活和停用 AWS STS

在 Amazon EC2 实例中使用临时凭证

如果要在 EC2 实例内部运行 AWS CLI 命令或代码,建议的获取凭证的方法是使用 Amazon EC2 的角色。您可创建一个 IAM 角色,通过该角色指定要授予在 EC2 实例中运行的应用程序的权限。启动实例时,将该角色关联至实例。

之后,在该实例上运行的应用程序、AWS CLI 和 Windows PowerShell 工具 命令将能够从该实例的元数据获取自动临时安全凭证。您无需显式地获取临时安全凭证 - AWS 软件开发工具包、AWS CLI 和 Windows PowerShell 工具 会从该 EC2 实例的元数据服务自动获取凭证并使用它们。临时凭证具有您为与该实例关联的角色定义的权限。

有关更多信息及示例,请参阅:

将临时安全凭证用于 AWS 开发工具包

要在代码中使用临时安全凭证,可以编程方式调用 AssumeRole 之类的 AWS STS API,提取生成的凭证和会话令牌,然后使用这些值作为 AWS 后续调用的凭证。以下示例说明了有关使用 AWS 软件开发工具包时如何使用临时安全凭证的伪代码:

assumeRoleResult = AssumeRole(role-arn); tempCredentials = new SessionAWSCredentials( assumeRoleResult.AccessKeyId, assumeRoleResult.SecretAccessKey, assumeRoleResult.SessionToken); s3Request = CreateAmazonS3Client(tempCredentials);

有关用 Python 编写的示例 (使用 AWS SDK for Python (Boto)),该示例说明如何调用 AssumeRole 以获取临时安全凭证,然后使用这些凭证调用 Amazon S3,请参阅切换到 IAM 角色 (API)

有关如何调用 AssumeRoleGetFederationToken 和其他 API 以及如何从结果中获取临时安全凭证和会话令牌的详细信息,请参阅所用开发工具包的文档。可在主 AWS 文档页上找到所有 AWS 软件开发工具包的文档。

您必须确保在旧证书到期之前,获得一组新的证书。在某些开发工具包中,可让提供商为您管理刷新证书的过程;并可检查所用开发工具包的文档。

将临时安全凭证用于 AWS CLI。

可将临时安全凭证用于 AWS CLI。这对于测试策略来说很有用。

借助 AWS CLI,您可以调用 AssumeRoleGetFederationToken 之类的 AWS STS API,然后捕获输出结果。下面的示例演示了一个将输出发送至文件的 AssumeRole 调用。在此示例中,假定 profile 参数为 AWS CLI 配置文件中的配置文件,并引用了有权代入该角色的 IAM 用户的凭证。

$ aws sts assume-role --role-arn arn:aws-cn:iam::123456789012:role/role-name --role-session-name "RoleSession1" --profile IAM-user-name > assume-role-output.txt

当命令完成后,您可以通过手动方式或使用脚本从您转发到的目的地处提取访问密钥 ID、秘密访问密钥和会话令牌。之后,您可以将这些值分配给环境变量。

在运行 AWS CLI 命令时,AWS CLI 依特定顺序查找凭证 - 首先查找环境变量,然后是配置文件。因此,在将临时凭证放入环境变量后,AWS CLI 会默认使用这些凭证。(如果在该命令中指定了 profile 参数,则 AWS CLI 将跳过环境变量而在配置文件中查找,这使您能够根据需要覆盖环境变量中的凭证。)

下面的示例演示如何为临时安全凭证设置环境变量然后调用 AWS CLI 命令。由于未在 AWS CLI 命令中包含 profile 参数,AWS CLI 首先在环境变量中查找凭证,因而将使用该临时凭证。

Linux

$ export AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY $ export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of security token> $ aws ec2 describe-instances --region us-west-1

Windows

C:\> SET AWS_ACCESS_KEY_ID=AKIAI44QH8DHBEXAMPLE C:\> SET AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY C:\> SET AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of token> C:\> aws ec2 describe-instances --region us-west-1

将临时安全凭证用于 Windows PowerShell 工具。

可将临时安全凭证用于 适用于 Windows PowerShell 的 AWS 工具。这对于测试策略来说很有用。

借助 Windows PowerShell 工具,您可以调用 AssumeRoleGetFederationToken 之类的 AWS STS API 操作,然后捕获输出结果。以下示例显示了调用 AssumeRole 和在变量 $role 中存储生成的角色对象的 PowerShell 命令。假定 StoredCredentials 参数为由 Set-AWSCredentialsInitialized-AWSDefaults 设置的 Windows PowerShell 工具 配置文件中的配置文件,并引用了有权代入该角色的 IAM 用户的凭证。

PS C:\> $role = Use-STSRole -RoleArn arn:aws-cn:iam::123456789012:role/MySampleRole -RoleSessionName RoleSession1 -StoredCredentials IAM-user-name

当命令完成后,您可以从变量中提取访问密钥 ID、秘密访问密钥和会话令牌。

PS C:\> $role.AssumedRoleUser Arn AssumedRoleId --- ------------- arn:aws-cn:sts::123456789012:assumed-role/clirole/RoleSession1 AROAJVIFQ5TJISRUTVTUE:RoleSession1 PS C:\> $role.Credentials.AccessKeyId AKIAIOSFODNN7EXAMPLE PS C:\> $role.Credentials.SecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY PS C:\> $role.Credentials.SessionToken AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqT flfKD8YUuwthAx7mSEI/qkPpKPi/kMcGdQrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU9 HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYv KTr4rvx3iSIlTJabIQwj2ICCR/oLxBA== PS C:\> $role.Credentials.Expiration Wednesday, July 08, 2015 3:22:32 PM

以下示例演示如何使用变量存储的凭证,然后使用这些凭证调用 AWS CLI 命令。

PS C:\> Get-EC2Instance -Region us-west-2 -Credential $role.Credentials

将临时安全凭证用于 API

如果是直接向 AWS 发出 HTTPS API 请求,则可以使用从 AWS Security Token Service (AWS STS) 获取的临时安全凭证对这些请求进行签名。要执行此操作,应使用您从 AWS STS 获得的访问密钥 ID 和秘密访问密钥,方式与用长期凭证对请求签名是一样的。此外,还要将您从 AWS STS 获得的会话令牌添加到 API 请求中。将会话令牌添加到 HTTP 标头或名为 X-Amz-Security-Token 的查询字符串参数中。将会话令牌添加到 HTTP 标头 查询字符串参数,但不是同时添加到这两者。有关签署 HTTPS API 请求的更多信息,请参阅 AWS General Reference 中的签署 AWS API 请求

更多信息

有关将 AWS STS 与其他 AWS 服务一起使用的更多信息,请访问以下链接: