java - 如何使用 AWS Java 开发工具包设置 AWS 容器凭证
问题描述
我想使用ContainerCredentialsProvider(CredentialsEndpointProvider)
而不是ContainerCredentialsProvider()
,因为后者已被弃用。
目前我正在使用不推荐使用的构造函数ContainerCredentialsProvider()
,如下所示:
AWSSimpleSystemsManagement ssm =
AWSSimpleSystemsManagementClientBuilder
.standard()
.withRegion(region)
.withCredentials(new ContainerCredentialsProvider())
.build();
CredentialsEndpointProvider
是一个抽象类。我需要ECSCredentialsEndPointProvider
在我的 docker 中使用类似的东西,但我不知道该怎么做。任何帮助表示赞赏。
解决方案
我知道这有点晚了,但希望这能帮助像我这样在 2020 年提出这个问题的人:)
使用您的代码示例,您应该尝试一下
AWSSimpleSystemsManagement ssm =
AWSSimpleSystemsManagementClientBuilder
.standard()
.withRegion(region)
.withCredentials(new EC2ContainerCredentialsProviderWrapper())
.build();
EC2ContainerCredentialsProviderWrapper实现AWSCredentialsProvider,并从 Amazon Container(例如 EC2)Credentials 加载凭证,按以下顺序解决它们:
- 如果设置了环境变量“AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”(通常在 EC2 上),它将用于访问以下端点的元数据服务:http: //169.254.170.2
- 如果设置了环境变量“AWS_CONTAINER_CREDENTIALS_FULL_URI”,则它用于访问该 URI 处的元数据服务。通过设置“AWS_CONTAINER_AUTHORIZATION_TOKEN”环境变量,可以选择在请求的“授权”标头中包含授权令牌。
- 如果上述环境变量均未指定,则尝试使用 InstanceProfileCredentialsProvider 从 Amazon EC2 实例元数据服务加载凭证。
这类似于已弃用的 ContainerCredentialsProvider():
默认情况下,URI 路径是从容器环境中的环境变量“AWS_CONTAINER_CREDENTIALS_RELATIVE_URI”中检索的。
更新:如果您不确定将使用哪种机制或希望与环境变量、系统属性、配置文件凭据和容器凭据兼容,您可以使用DefaultAWSCredentialsProviderChain
which 将确保尝试所有选项(正如 @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());
}
这样,您就可以与可能引入另一种类型的身份验证或一个选项被弃用的新版本兼容。
推荐阅读
- php - JSON 使用 File_get_contents 获取 PHP 数组
- docusignapi - 尝试使用 Microsoft Flow 创建信封时出错 - 可能是超时
- python - Python:如何确保函数在第一次被调用时被加载?
- javascript - Javascript代码不执行?
- scala - flatMap 与 scala 中的地图
- python - python字典中的共同值
- amazon-web-services - “基本健康检查不得指定指标区域。”
- winapi - CWnd::KillTimer 失败,当我在主线程中启动两个具有相同时间间隔的计时器时
- sql - 用googlebigquery(标准sql)中变量2 sql的非缺失值替换变量1的缺失值
- mysql - 在 SQL 中删除 SQL JOIN 和 UNION 运算符中的 NULL 值