首页 > 解决方案 > 如何在不使用签名 URL 的情况下安全地提供 S3 文件?

问题描述

我不是 AWS 专家,所以我希望有人能指出我正确的方向。

我有文件(特别是图像)存储在 S3 存储桶中,我需要将这些图像显示在要交付给客户端的 KML 文件中。图像 URL 将进入 HTML 标记。(KML 允许将 HTML 代码作为其内容的一部分嵌入,仅供参考。)但是,这些图像不能公开访问(因为它是机密项目的一部分),只能使用特殊的 URL 访问。

我已经稍微探索了 Cloudfront 选项,据我了解,使用 Cloudfront 签名的 URL 将不起作用,因为它上面有一个过期日期,它不适用于客户端,因为我听说的最长过期日期是 7 天。此外,甚至可以使用签名的 URL 作为 src 吗?

并且签名的 cookie 也不起作用,因为 Google 地球(它打开 KML 文件)在呈现 HTML 代码时实际上并没有使用集成的网络浏览器。

我确实运行了一个 Python 脚本来生成这个 KML 文件,因此我可以创建签名 URL,但不幸的是,我认为签名 URL 不会帮助解决上述问题。

关于如何解决这个问题的任何想法或建议?有没有办法让 S3 或 Cloudfront 文件 URL 包含一个不会过期的密钥?

谢谢!

标签: amazon-s3amazon-cloudfront

解决方案


CloudFront 可用于生成签名的 url,它允许您设置自己的到期日期,该日期可以延长至数年。

您还可以使用有效期更长(可能长达数年)的签名 URL 分发私人内容。

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-signed-urls.html#private-content-overview-choosing-duration

根据 AWS,允许通过 CloudFront 访问 S3 中的资源而不是直接公开 S3 url 是一种很好的做法。您可以通读本文档以获取更多信息。https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/PrivateContent.html

最后是你问题的答案

甚至可以使用签名的 URL 作为 a 的 src 吗?

是的,毕竟它只是一个带有一些额外字符的网址。


推荐阅读