阅读上的 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 角色向在 A mazon EC2 实例上运行的应用程序授予权限

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

从环境中获取 IAM 角色证书

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

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

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

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

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

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

安全获取 IAM 角色证书

默认情况下, EC2 实例运行 IMDS(实例元数据服务),允许软件开发工具包访问已配置的 IAM 角色等信息。InstanceProfileCredentialsProvider 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

IMDSv1 如果其中一个设置设置为true,则在初始 IMDSv2 调用失败时,SDK 不会通过使用来加载 IMDS 角色凭证。