由于授权无法访问 S3 预签名 URL
Can't access S3 Pre-Signed URL due to authorization
使用 Java8 和 aws-java-sdk 1.10.43 我正在尝试获取 S3 文件的预签名 URL。我确实找回了 link,但浏览它会导致此错误:
authorization mechanism you have provided is not supported. Please use
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 个缺失部分的组合(评论中提到了其中一个):
需要这样设置:
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
必须设置 "endPoint"(上传或下载不需要):
s3Client.setEndpoint(endpoint);
可选地,添加以下内容可能会有用:
s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
使用 Java8 和 aws-java-sdk 1.10.43 我正在尝试获取 S3 文件的预签名 URL。我确实找回了 link,但浏览它会导致此错误:
authorization mechanism you have provided is not supported. Please use 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 个缺失部分的组合(评论中提到了其中一个):
需要这样设置:
System.setProperty(SDKGlobalConfiguration.ENABLE_S3_SIGV4_SYSTEM_PROPERTY, "true");
必须设置 "endPoint"(上传或下载不需要):
s3Client.setEndpoint(endpoint);
可选地,添加以下内容可能会有用:
s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));