【问题标题】:How to set AWS Container Credentials using AWS Java SDK如何使用 AWS Java 开发工具包设置 AWS 容器凭证
【发布时间】:2019-04-24 12:19:31
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

我知道这有点晚了,但希望这会帮助像我这样在 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”中检索的。


更新:如果您不确定将使用哪种机制或希望与环境变量、系统属性、配置文件凭据和容器凭据兼容,您可以使用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());
}

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

【讨论】:

  • 帮了很多朋友!
【解决方案2】:

在我看来,您应该使用EC2ContainerCredentialsProviderWrapper

val ecsCredProvider = new EC2ContainerCredentialsProviderWrapper()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2017-08-20
    • 2015-08-18
    • 2020-06-25
    • 2018-01-19
    相关资源
    最近更新 更多