我的 Amazon S3 存储桶中的项目可公开访问.如何限制访问,以便只能从我的应用程序内访问存储桶链接?



>我有一个包含项目的 Amazon S3 存储桶。目前任何人都可以通过链接访问这些。该链接包含一个UUID,因此有人实际访问它的机会非常低。尽管如此,随着GDPR的临近,我急于把它束缚起来。

我真的不确定用谷歌搜索什么来找到答案,而且搜索了一下,我并没有更接近我的答案。我想知道其他人是否有解决这个问题的方法?我只想在应用程序中单击链接时才能访问资源。

根据 S3 文档,您应该能够将对 S3 对象的访问限制为某些 HTTP 引用,并明确deny阻止应用程序外部的任何人的访问:

{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Allow get requests referred by www.example.com and example.com.",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}
},
{
"Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::examplebucket/*",
"Condition": {
"StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}
}
]
}

使用此设置的先决条件是构建 S3 链接包装器服务并将其托管在应用程序的某个站点上。

这是使用预签名 URL 的标准用例。

基本上,当您的应用程序生成包含链接的 HTML 页面时,它会生成一个包含到期时间的特殊 URL。然后,它将该URL插入HTML链接代码中(例如,对于图像,您将使用:<img src='[PRE-SIGNED URL]'/>

生成预签名 URL 的代码非常简单(大多数 SDK 中都提供了(。

将您的 Amazon S3 存储桶保持私有状态,以便其他人无法访问内容。然后,具有有效预签名 URL 的任何人都可以获得内容。

最新更新