阅读上的 IAM 角色证书 Amazon EC2 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

阅读上的 IAM 角色证书 Amazon EC2

您可以使用 IAM 角色管理在 EC2 实例上运行并发出 Amazon CLI 或 Amazon API 请求的应用程序的临时证书。这优先于在 EC2 实例中存储访问密钥。要向 EC2 实例分配 Amazon 角色并使其可供其所有应用程序使用,您需要创建附加到该实例的实例配置文件。实例配置文件包含角色,并使 EC2 实例上运行的程序能够获得临时凭证。有关更多信息,请参阅《IAM 用户指南》中的使用 IAM 角色为 Amazon EC2 实例上运行的应用程序授予权限

本主题提供有关如何设置您的 Java 应用程序以在 EC2 实例上运行以及如何启用 Java SDK 获取 IAM 角色证书的信息。

从环境中获取 IAM 角色证书

如果您的应用程序使用create方法(或builder().build()方法)创建 Amazon 服务客户端,则 SDK for Java 将使用默认的凭证提供程序链。默认凭证提供程序链在执行环境中搜索配置元素,SDK 可以用这些元素换取临时证书。默认凭证提供程序链部分描述了完整的搜索流程。

只有当您的应用程序在 Amazon EC2 实例上运行时,默认提供程序链中的最后一步才可用。在此步骤中,SDK 使用 InstanceProfileCredentialsProvider 来读取 EC2 实例配置文件中定义的 IAM 角色。然后,SDK 会获取该 IAM 角色的临时凭证。

尽管这些凭证是临时凭证,而且最终会过期,但 InstanceProfileCredentialsProvider 会定期为您刷新它们,保证这些凭证可允许您继续访问 Amazon。

以编程方式获取 IAM 角色证书

作为最终使用 EC2 InstanceProfileCredentialsProvider 上的默认凭证提供商链的替代方案,您可以使用显式配置服务客户端InstanceProfileCredentialsProvider。以下代码段演示了这种方法。

S3Client s3 = S3Client.builder() .credentialsProvider(InstanceProfileCredentialsProvider.create()) .build();

安全获取 IAM 角色证书

默认情况下,EC2 实例运行 IMDS(实例元数据服务),允许软件开发工具包InstanceProfileCredentialsProvider访问诸如已配置的 IAM 角色之类的信息。默认情况下,EC2 实例运行两个版本的 IMDS:

  • 实例元数据服务版本 1 (IMDSv1) – 一种请求/响应方法

  • 实例元数据服务版本 2 (IMDSv2) – 一种面向会话的方法

imdsv2 是一种比 imdsv1 更安全的方法

默认情况下,Java SDK 首先尝试 imdsv2 来获取 IAM 角色,但如果失败,它将尝试 imdsv1。但是,由于 imdsv1 不太安全,因此 Amazon 建议仅使用 imdsv2,并禁用 SDK 试用 imdsv1。

要使用更安全的方法,请为以下设置之一提供值为,从而禁用 SDK 使用 imdsv1。true

  • 环境变量:AWS_EC2_METADATA_V1_DISABLED

  • JVM 系统属性:aws。 disableEc2MetadataV1

  • 共享配置文件设置:ec2_metadata_v1_disabled

将其中一个设置设置为后true,如果初始 imdsv2 调用失败,SDK 将不会使用 imdsv1 加载 IMDS 角色凭证。