【发布时间】:2016-07-09 08:17:56
【问题描述】:
我正在尝试访问位于 AWS S3 之上的 blob 存储服务。它支持 AWS SDK 及其签名版本 2。
我正在使用code here 访问此服务。
是否可以手动设置AWS SDK发出的请求的签名版本?
AWS 目前支持两个签名版本:签名版本 2 和签名版本 4,本节将介绍它们。大多数服务支持版本 4,如果服务支持版本 4,我们强烈建议您使用该版本。
我无法找到如何手动将签名版本设置为 2 或 4。
【问题讨论】:
我正在尝试访问位于 AWS S3 之上的 blob 存储服务。它支持 AWS SDK 及其签名版本 2。
我正在使用code here 访问此服务。
是否可以手动设置AWS SDK发出的请求的签名版本?
AWS 目前支持两个签名版本:签名版本 2 和签名版本 4,本节将介绍它们。大多数服务支持版本 4,如果服务支持版本 4,我们强烈建议您使用该版本。
我无法找到如何手动将签名版本设置为 2 或 4。
【问题讨论】:
来自 S3 开发人员指南 - Specifying Signature Version in Request Authentication:
Java SDK
在您的代码中添加以下内容。
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");或者,在命令行上,指定以下内容。
-Dcom.amazonaws.services.s3.enableV4
看起来 v2 之前是 AWS 开发工具包中的默认值,但现在 v4 是从 SDK v1.11.0 (May, 2016) 开始的默认值。
【讨论】:
截至
aws-java-sdk-core-1.11.163
SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY 已弃用。
我使用以下代码使用 signature_version='s3' 调用
private static ClientConfiguration config = new ClientConfiguration();
static {
config.setProtocol(Protocol.HTTP);
config.setSignerOverride("S3SignerType");
}
private static AmazonS3 s3client = AmazonS3ClientBuilder
.standard()
.withClientConfiguration(config)
.withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("endpoint", null))
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("access_key_id", "secret_Key")))
.build();
【讨论】: