繁体   English   中英

如何创建仅在 6 天后过期的 s3 下载链接

[英]How to create an s3 download link which will expire only after 6 days

我想生成一个 s3 链接来下载文件,该链接应该至少存在 6 天。 我曾尝试使用选项 InstanceProfileCredentialsProvider(false)(仅工作 24 小时)、ProfileCredentialsProvider(甚至不创建链接)、访问密钥

IAM 用户的访问密钥有效,但此用户密钥将在几天后过期,因此每次我必须在代码中更改相同的内容时,我认为在代码中公开密钥不是一个好习惯。

有没有其他方法可以生成 s3 下载链接,该链接只会在 6 天后过期。

以下是代码片段:-

AmazonS3 s3Client  = AmazonS3ClientBuilder.standard().withCredentials(new InstanceProfileCredentialsProvider(false))
                    .build();
java.util.Date expiration = new java.util.Date();
long milliSeconds = expiration.getTime();
milliSeconds += 1000 * 60 * 60 * 24 * 7; // Add 7 days.
expiration.setTime(milliSeconds);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest("s3bucket",
                    "fileLocationpath");
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);
link =  s3Client.generatePresignedUrl(generatePresignedUrlRequest);

您实施解决方案的方式的总体思路是 AWS 建议的正确方式。

关于在 80 天后过期的用户密钥,因为用户密钥不会自动过期,并且在您停用它们之前它们是有效的,我想这是您出于安全原因设置的一个轮换凭据的过程。 这确实是一个非常好的做法。 为了避免在代码中硬编码这些凭证,这是一种不好的做法,您可以将凭证设置为环境变量或将它们存储在实例的AWS 凭证文件中。 通过这样做,您可以轻松地在部署管道中轮换它们。

当您启动 ec2 实例时,您可以通过用户数据进行 ./aws/credentials 配置。 您将运行“aws configure”,然后传递您的 aws 凭证以在您的 ec2 实例中设置它们。 理想情况下,您将拥有一个 CI/CD 管道,它将自动化整个过程,而不是手动执行此操作。

请参阅以下 AWS 推荐的最佳实践:

s3 存储桶的预签名 URL - 推荐方法

https://aws.amazon.com/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/

AWS 访问密钥最佳实践

https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html

配置和凭证文件设置

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM