将临时凭证用于 Amazon 资源 - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将临时凭证用于 Amazon 资源

借助 Amazon CLI 或 Amazon API(使用 Amazon SDK),您可以使用临时安全凭证提出对 Amazon 资源的编程请求。临时凭证提供的权限与长期安全凭证(例如 IAM 用户凭证)相同。但还是有几个区别:

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

  • 临时凭证在指定间隔后到期。临时凭证到期后,任何使用这些凭证进行的调用都将失败,因此您必须生成一组新的临时凭证。临时凭证的延期或刷新时间不得超过最初指定的时间间隔。

  • 当您使用临时凭证发出请求时,您的主体可能会包含一组标签。这些标签来自附加到您代入的角色的会话标签和标签。有关会话标签的更多信息,请参阅 在 Amazon STS 中传递会话标签

如果您使用的是 Amazon SDKAmazon Command Line Interface (Amazon CLI) 或 Tools for Windows PowerShell,则获取和使用临时安全凭证的方式随上下文而不同。如果您在 Amazon CLI 内部运行代码、 或 Tools for Windows PowerShell 命令,则可使用 Amazon EC2 的角色。否则,您可调用 Amazon STS API 来获取临时凭证,然后使用这些凭证显式地调用 Amazon 服务。

注意

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

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

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

之后,在该实例上运行的应用程序、Amazon CLI 和 Tools for Windows PowerShell 命令将能够从该实例的元数据获取自动临时安全凭证。您无需明确获取临时安全凭证。Amazon SDK、Amazon CLI 和 Tools for Windows PowerShell 自动从 EC2 实例元数据服务 (IMDS) 获取凭证并使用它们。临时凭证具有您为与该实例关联的角色定义的权限。

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

将临时安全凭证用于 Amazon SDK。

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

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

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

有关如何调用 AssumeRoleGetFederationToken 和其他 API 操作的详细信息,请参阅 Amazon Security Token Service API 参考。有关从结果中获取临时安全凭证和会话令牌的信息,请参阅所用开发工具包的文档。可以在主 Amazon 文档页上的 SDKs and Toolkits(开发工具包和工具箱)部分中找到所有 Amazon SDK 的文档。

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

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

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

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

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

当命令完成后,您可以从路由到的任意位置中提取访问密钥 ID、秘密访问密钥和会话令牌。您可以手动或使用脚本执行此操作。之后,您可以将这些值分配给环境变量。

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

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

Linux

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

Windows

C:\> SET AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE 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

将临时安全凭证用于 API 操作

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

更多信息

有关将 Amazon STS 与其他 Amazon 服务结合使用的更多信息,请参阅以下链接: