gpt4 book ai didi

java - 如何设置从当前日期起 1 年内的 Amazon S3 存储桶预签名 URL 过期时间

转载 作者:搜寻专家 更新时间:2023-10-30 21:24:46 25 4
gpt4 key购买 nike

图像被上传到 Amazon S3 存储桶。我需要从亚马逊服务器获取一个预签名 URL。我还想设置该 URL 的到期时间。这最多只需要 17 天。但我无法设置最长 1 年的到期时间。

      Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
Date nextYear = cal.getTime();

GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(
"bucketName", "accessname");
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest
.setExpiration(nextYear);
URL url = s3client
.generatePresignedUrl(generatePresignedUrlRequest);
bucketURL = url.toString();

最佳答案

您不会“从服务器”“获取”预签名 URL。签名计算在客户端完成。预签名 URL 实际上是在您的机器上计算的,而不是由服务计算的。

如果您使用的是当前 SDK,则它可能正在使用 Signature V4。如果签名的 URL 包含 X-Amz-Signature= 那么这就确认了 V4。较旧的 V2 算法仅在签名 URL 中使用 Signature=

如果您的签名确实是 V4,那么您会看到一个有意的限制:

A presigned URL can be valid for a maximum of seven days because the signing key you use in signature calculation is valid for up to seven days.

http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html

如果您已经在使用 V2,您应该能够签署有效期最迟到 2038 年的 URL。如果您使用的是 V4,您可以通过切换到使用 V2 来解决这个限制,但这是不可取的.法兰克福等较新的 S3 区域不支持 V2,如果您按照应有的方式轮换 AWS 访问 key ,最终的 key 失效也会使使用该 key 创建的任何签名失效。

在大多数情况下,更正确的做法是在需要时生成签名 URL。如前所述,该操作不需要与 S3 服务交互,通常可以实时完成。

如果您需要授予特定用户访问“直接链接”的权限,请考虑在您的应用程序中创建一个可以评估用户凭据的端点,此时您可以生成一个签名 URL 并使用 HTTP 重定向浏览器302 响应。

关于java - 如何设置从当前日期起 1 年内的 Amazon S3 存储桶预签名 URL 过期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33008265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com