如何使用AWS Java SDK设置AWS容器凭证

时间:2018-11-21 20:58:28

标签: java amazon-web-services amazon-ecs aws-java-sdk

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

目前,我正在使用以下弃用的构造函数ContainerCredentialsProvider()

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

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

2 个答案:

答案 0 :(得分:3)

我知道这有点晚了,但是希望这会对像我一样在2020年提出这个问题的其他人有所帮助:)

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

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

EC2ContainerCredentialsProviderWrapper实现AWSCredentialsProvider,并从Amazon Container(例如EC2)凭证中加载凭证,并按以下顺序对其进行求解:

  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()

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


更新:如果不确定使用哪种机制或希望与环境变量,系统属性,配置文件凭证和容器凭证兼容,则可以使用DefaultAWSCredentialsProviderChain来确保尝试全部使用选项(如@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());
}

通过这种方式,您可以与可能引入另一种身份验证或不赞成使用某个选项的新版本兼容。

答案 1 :(得分:0)

在我看来,您注定要使用EC2ContainerCredentialsProviderWrapper

val ecsCredProvider = new EC2ContainerCredentialsProviderWrapper()