我有一个包含项目的S3存储桶。任何人都可以通过链接访问这些内容。该链接包含一个UUID,因此实际访问它的可能性非常低。尽管如此,随着GDPR即将来临,我急于将其束缚住。
我不确定谷歌要找到什么答案,而且我一直在搜索我的答案。我想知道是否其他人有解决这个问题的方法?如果我点击应用内的链接,我只能访问资源。
答案 0 :(得分:1)
According to the S3 documentation,您应该能够限制对某些HTTP引荐的S3对象的访问,并使用明确的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链接包装服务并将其托管在您应用的某个站点。
答案 1 :(得分:1)
这是使用Pre-signed URL的标准用例。
基本上,当您的应用程序生成包含链接的HTML页面时,它会生成一个包含到期时间的特殊URL。然后它将该URL插入HTML链接代码中(例如,对于图像,您将使用:<img src='[PRE-SIGNED URL]'/>
生成预签名URL的代码非常简单(并且在大多数SDK中提供)。
将您的Amazon S3存储桶保密为私有,以便其他人无法访问该内容。然后,任何拥有有效预签名网址的人都会获得内容。