首页 > 解决方案 > 如何使用 AWS Java 开发工具包设置 AWS 容器凭证

问题描述

我想使用ContainerCredentialsProvider(CredentialsEndpointProvider) 而不是ContainerCredentialsProvider(),因为后者已被弃用。

目前我正在使用不推荐使用的构造函数ContainerCredentialsProvider(),如下所示:

AWSSimpleSystemsManagement ssm = 
    AWSSimpleSystemsManagementClientBuilder
        .standard()
        .withRegion(region)
        .withCredentials(new ContainerCredentialsProvider())
        .build();

CredentialsEndpointProvider是一个抽象类。我需要ECSCredentialsEndPointProvider在我的 docker 中使用类似的东西,但我不知道该怎么做。任何帮助表示赞赏。

标签: javaamazon-web-servicesamazon-ecsaws-java-sdk

解决方案


我知道这有点晚了,但希望这能帮助像我这样在 2020 年提出这个问题的人:)

使用您的代码示例,您应该尝试一下

AWSSimpleSystemsManagement ssm = 
    AWSSimpleSystemsManagementClientBuilder
        .standard()
        .withRegion(region)
        .withCredentials(new EC2ContainerCredentialsProviderWrapper())
        .build();

EC2ContainerCredentialsProviderWrapper实现AWSCredentialsProvider,并从 Amazon Container(例如 EC2)Credentials 加载凭证,按以下顺序解决它们:

  1. 如果设置了环境变量“AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”(通常在 EC2 上),它将用于访问以下端点的元数据服务:http: //169.254.170.2
  2. 如果设置了环境变量“AWS_CONTAINER_CREDENTIALS_FULL_URI”,则它用于访问该 URI 处的元数据服务。通过设置“AWS_CONTAINER_AUTHORIZATION_TOKEN”环境变量,可以选择在请求的“授权”标头中包含授权令牌。
  3. 如果上述环境变量均未指定,则尝试使用 InstanceProfileCredentialsProvider 从 Amazon EC2 实例元数据服务加载凭证。

这类似于已弃用的 ContainerCredentialsProvider()

默认情况下,URI 路径是从容器环境中的环境变量“AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”中检索的。


更新:如果您不确定将使用哪种机制或希望与环境变量、系统属性、配置文件凭据和容器凭据兼容,您可以使用DefaultAWSCredentialsProviderChainwhich 将确保尝试所有选项(正如 @Imran 在一条评论):

AWSSimpleSystemsManagement ssm = 
    AWSSimpleSystemsManagementClientBuilder
        .standard()
        .withRegion(region)
        .withCredentials(new DefaultAWSCredentialsProviderChain())
        .build();

例如,1.11 SDK 的实现如下所示(它基本上会尝试所有选项,直到找到一个可行的选项):

public DefaultAWSCredentialsProviderChain() {
    super(new EnvironmentVariableCredentialsProvider(),
          new SystemPropertiesCredentialsProvider(),
          new ProfileCredentialsProvider(),
          new EC2ContainerCredentialsProviderWrapper());
}

这样,您就可以与可能引入另一种类型的身份验证或一个选项被弃用的新版本兼容。


推荐阅读