由于授权,无法访问 S3 预签名 URL [重复]

Posted

技术标签:

【中文标题】由于授权,无法访问 S3 预签名 URL [重复]【英文标题】:Can't access S3 Pre-Signed URL due to authorization [duplicate] 【发布时间】:2016-04-01 17:29:22 【问题描述】:

使用 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

谢谢

【问题讨论】:

那里提出的解决方案没有帮助 - 将属性设置为仍然生成相同的结果。澄清:我能够生成一个看起来像预签名 URL 的 URL,但是将该 URL 粘贴到浏览器中会导致错误消息。我没有尝试使用我的 Java 代码阅读内容,但我希望生成一个 URL 以粘贴到浏览器中(例如通过电子邮件发送) 生成预签名 URL 是在不与实际 S3 服务交互的情况下完成的,因此您的代码“工作”到那一点是有意义的,并且在使用 URL 时会发生错误。您生成的签名 URL 是否包含 Signature=?... 还是 x-amz-signature= 签名=。这是我收到的 URL 示例:https://?AWSAccessKeyId=&Expires=1451297351&Signature=1kD1IQfn2gfmJ%2Fa2Wp2ZORVte0Y%3D 这绝对是 Signature Version 2 URL,因此您的代码未启用 V4 签名,如链接问题中所示,一种可能的解释是您的 SDK 版本太旧而无法支持它。 设置 SDK 属性和端点对我有帮助。我通过在 s3client 中添加配置属性来解决它。例如:新 AmazonS3Client(new ClientConfiguration().withSignerOverride("AWSS3V4SignerType")) 【参考方案1】:

借助一些帮助,我找到了答案,它是 2 个缺失部分的组合(其中一个在 cmets 中被提及):

    需要设置这个:

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

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

    s3Client.setEndpoint(endpoint);
    

也可以选择添加以下内容:

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

【讨论】:

这行得通...我只执行了2 点。 endpoint 的值是多少? @Tirath

以上是关于由于授权,无法访问 S3 预签名 URL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

AWS S3 存储桶预签名 URL

使用预签名 URL 将文件上传到 Amazon S3 时出现 CORS 错误

AWS S3 PHP SDK 预签名 url 限制内容类型

AWS S3 PHP SDK 预签名 url 限制内容类型

S3 预签名上传 url 错误

Amazon s3 预签名 URL 受 IP 地址限制