【问题标题】:AWS java SDK manually set signature versionAWS java SDK手动设置签名版本
【发布时间】:2016-07-09 08:17:56
【问题描述】:

我正在尝试访问位于 AWS S3 之上的 blob 存储服务。它支持 AWS SDK 及其签名版本 2。

我正在使用code here 访问此服务。

是否可以手动设置AWS SDK发出的请求的签名版本?

根据this page

AWS 目前支持两个签名版本:签名版本 2 和签名版本 4,本节将介绍它们。大多数服务支持版本 4,如果服务支持版本 4,我们强烈建议您使用该版本。

我无法找到如何手动将签名版本设置为 2 或 4。

【问题讨论】:

    标签: amazon-s3 aws-sdk


    【解决方案1】:

    来自 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) 开始的默认值。

    【讨论】:

    • 任何人使用 Spark 2.4.4 和 aws-java-sdk 1.7.4、hadoop-aws 2.7.5 并且即使在正确设置区域后也出现 400 错误,那么这就是对我有用的解决方案 谢谢^_^
    【解决方案2】:

    截至

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

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 2017-10-09
      • 2022-07-22
      • 2017-08-09
      • 2020-05-20
      • 1970-01-01
      • 2018-10-11
      • 2016-07-06
      • 1970-01-01
      相关资源
      最近更新 更多