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

我正在使用Java8和aws-java-sdk1.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

谢谢

回答:

通过一些帮助,我找到了答案,它是2个缺失部分的组合(其中一个在注释中提到):

  1. 需要设置以下内容:

    System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");

  2. 必须设置“ endPoint”(上传或下载不需要):

    s3Client.setEndpoint(endpoint);

(可选)也可以添加以下内容:

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

以上是 由于授权,无法访问S3预签名URL 的全部内容, 来源链接: utcz.com/qa/401238.html

回到顶部