使用 AWS STS 获取临时凭证 - 适用于 Java 的 AWS 开发工具包
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS STS 获取临时凭证

您可以使用 AWS Security Token Service (AWS STS) 获得具有有限权限的临时凭证,用于访问 AWS 服务。

使用 AWS STS 包括三个步骤:

  1. 激活区域 (可选)。

  2. 从 AWS STS 请求临时安全凭证。

  3. 使用凭证访问 AWS 资源。

注意

激活区域是可选的;默认情况下,临时安全凭证在全局终端节点 sts.amazonaws.com 获取。但为了减少延迟,并在对第一个终端节点的 AWS STS 请求失败的情况下,通过使用其他终端节点来实现请求冗余,可以激活与使用凭证的各服务或应用程序距离更接近的区域。

(可选) 激活并使用 AWS STS 区域

要激活一个区域以用于 AWS STS,请使用 AWS 管理控制台来选择和激活区域。

要激活其他 STS 区域

  1. 对于您要在新区域中为其激活 AWS STS 的账户,作为有权执行 IAM 管理任务的 IAM 用户 "iam:*" 登录。

  2. 打开 IAM 控制台,然后在导航窗格中单击 Account Settings

  3. 展开 STS Regions (STS 区域) 列表,找到要使用的区域,然后单击 Activate (激活)

在此后,可直接调用与该区域关联的 STS 终端节点。

注意

有关激活 STS 区域的更多信息和可用 AWS STS 终端节点的列表,请参阅 IAM User Guide 中的在 AWS 区域中激活和停用 AWS STS

从 AWS STS 请求临时安全凭证

要使用适用于 Java 的 AWS 开发工具包请求临时安全凭证

  1. 创建 AWSSecurityTokenServiceClient 对象:

    AWSSecurityTokenService sts_client = new AWSSecurityTokenServiceClientBuilder().standard().withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("sts-endpoint.amazonaws.com", "signing-region")).build()

    在创建不带参数的客户端 (AWSSecurityTokenService sts_client = new AWSSecurityTokenServiceClientBuilder().standard().build();) 时,会使用默认的凭证提供程序链检索凭证。如果您需要,可以提供特定的凭证提供程序:有关更多信息,请参阅“在适用于 Java 的 AWS 开发工具包中提供 AWS 凭证”。

  2. 创建 GetSessionTokenRequest 对象,并选择性地设置临时凭证有效的持续时间 (以秒为单位):

    GetSessionTokenRequest session_token_request = new GetSessionTokenRequest(); session_token_request.setDurationSeconds(7200); // optional.

    对于 IAM 用户,临时凭证的有效期范围是 900 秒 (15 分钟) 到 129600 秒 (36 小时)。如果不指定有效期,则默认使用 43200 秒(12 小时)。

    对于根 AWS 账户,临时凭证的有效期范围是 900 到 3600 秒 (1 小时),如果不指定有效期,则使用默认值 3600 秒。

    重要

    从安全角度出发,强烈建议使用 IAM 用户 而非根账户来进行 AWS 访问。有关更多信息,请参阅 IAM User Guide 中的 IAM 最佳实践。

  3. 在 STS 客户端上调用 getSessionToken 以获取会话令牌,使用 GetSessionTokenRequest 对象:

    GetSessionTokenResult session_token_result = sts_client.getSessionToken(session_token_request);
  4. 使用调用 getSessionToken 的结果获取会话凭证:

    Credentials session_creds = session_token_result.getCredentials();

使用会话凭证只能在 GetSessionTokenRequest 对象指定的有效期内进行访问。在凭证过期后,需再次调用 getSessionToken 来获取新的会话令牌,才能继续访问 AWS。

使用临时凭证访问 AWS 资源

获得临时安全凭证后,可以按照明确指定凭证中说明的方法,使用它们对 AWS 服务客户端进行初始化。

例如,使用临时服务凭证创建 S3 客户端:

BasicSessionCredentials sessionCredentials = new BasicSessionCredentials( session_creds.getAccessKeyId(), session_creds.getSecretAccessKey(), session_creds.getSessionToken()); AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(sessionCredentials)) .build();

现在可以使用 AmazonS3 对象发出 Amazon S3 请求。

有关

有关如何使用临时安全凭证访问 AWS 资源的更多信息,请参阅 IAM User Guide 中以下几节的内容: