由于授权,无法访问S3预签名URL

时间:2015-12-27 19:05:07

标签: java amazon-s3 authorization aws-java-sdk

使用Java8和aws-java-sdk 1.10.43我试图获得一个S3文件的预签名URL。我确实找回了一个链接,但浏览它会导致此错误:

  不支持您提供的

授权机制。请用   AWS4-HMAC-SHA256

为了强调,我希望生成一个可以通过电子邮件发送并在浏览器中打开的URL,而不是使用Java代码从该URL读取。

我使用下面的代码,我相信我发现我需要以某种方式设置setSSEAlgorithm来使用" v4"但是我没能使它工作。我错过了什么?我应该配置什么(注意:我故意避免使用配置文件,我希望代码能够从环境变量中设置所有属性)

Date expiration = <some date>;
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, targetPath);
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);

AmazonS3 s3client = new AmazonS3Client(s3Credentials);
URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest);

桶位于eu-central-1

谢谢

1 个答案:

答案 0 :(得分:7)

使用一些帮助我找到了答案,这是两个缺失部分的组合(其中一个在评论中提到):

  1. 需要设置:

    System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
    
  2. 必须设置“endPoint”(上传或下载不需要):

    s3Client.setEndpoint(endpoint);
    
  3. 可选地,添加它可能是有用的:

    s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));