![](/img/trans.png)
[英]AWS S3 Bucket Accessible from my ElasticBeanStalk Instance only
[英]Items in my S3 bucket are publicly accessible. How do I restrict access so that the S3 Bucket link is only accessible from within my app?
我有一个包含物品的S3存储桶。 现在,任何人都可以通过链接访问这些文件。 该链接包含一个UUID,因此某人实际访问它的机会非常低。 尽管如此,由于GDPR即将来临,我急于将其束缚住。
我不太确定要用什么Google来找到答案,而且经过搜索后,我离答案还很近。 我想知道其他人是否可以解决这个问题? 我只想在我的应用程序内单击链接时才能访问资源。
根据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链接包装器服务并将其托管在您的应用程序的某个站点上。
这是使用Pre-signed URL的标准用例。
基本上,当您的应用程序生成包含链接的HTML页面时,它会生成一个包含到期时间的特殊URL。 然后,它将该URL插入HTML链接代码中(例如,对于图像,您将使用: <img src='[PRE-SIGNED URL]'/>
生成预签名URL的代码非常简单(大多数SDK中都提供了该代码)。
将您的Amazon S3存储桶保持私有状态,以便其他人无法访问内容。 然后,具有有效预签名URL的任何人都将获得内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.