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

nad*_*ish 5 java amazon-web-services amazon-ecs aws-java-sdk

我要使用ContainerCredentialsProvider(CredentialsEndpointProvider) 代替ContainerCredentialsProvider(),因为后者已弃用。

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

AWSSimpleSystemsManagement ssm = 
    AWSSimpleSystemsManagementClientBuilder
        .standard()
        .withRegion(region)
        .withCredentials(new ContainerCredentialsProvider())
        .build();
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*Lee 6

我知道这有点晚了,但希望这能帮助像我这样即使在 2020 年也遇到这个问题的人:)

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

AWSSimpleSystemsManagement ssm = 
    AWSSimpleSystemsManagementClientBuilder
        .standard()
        .withRegion(region)
        .withCredentials(new EC2ContainerCredentialsProviderWrapper())
        .build();
Run Code Online (Sandbox Code Playgroud)

EC2ContainerCredentialsProviderWrapper从亚马逊容器(例如EC2)证书,实施AWSCredentialsProvider,并加载证书解决它们按以下顺序:

  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”中检索的。


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

AWSSimpleSystemsManagement ssm = 
    AWSSimpleSystemsManagementClientBuilder
        .standard()
        .withRegion(region)
        .withCredentials(new DefaultAWSCredentialsProviderChain())
        .build();
Run Code Online (Sandbox Code Playgroud)

例如,1.11 SDK 的实现看起来像这样(它基本上会尝试所有选项,直到找到一个可行的选项):

public DefaultAWSCredentialsProviderChain() {
    super(new EnvironmentVariableCredentialsProvider(),
          new SystemPropertiesCredentialsProvider(),
          new ProfileCredentialsProvider(),
          new EC2ContainerCredentialsProviderWrapper());
}
Run Code Online (Sandbox Code Playgroud)

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


tru*_*olf 1

在我看来你应该使用EC2ContainerCredentialsProviderWrapper

val ecsCredProvider = new EC2ContainerCredentialsProviderWrapper()
Run Code Online (Sandbox Code Playgroud)