我试图限制对aws s3存储桶中文件的直接访问,只能从该文件应该可见的网站,我尝试使用不同的策略。但没有什么对我有用。
{
"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:::ex-bucket/*",
"Condition": {
"StringLike": {"aws:Referer": ["https://www.example.com/*","https://example.com/*"]}
}
},
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::ex-bucket/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "00.00.000.00"
},
"IpAddress": {
"aws:SourceIp": "00.00.000.00"
}
}
}
]
}
对此有任何建议。
答案 0 :(得分:0)
如果您想允许访问具有特定域的存储桶,请尝试使用
以下是如何将www.example.com和example.com设置为有效参考的示例。 在“添加存储桶策略”字段中添加以下策略:
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Allow get requests originating from www.example.com and example.com.",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::s3-foo-bar/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"http://www.example.com/*",
"http://example.com/*"
]
}
}
}
默认情况下,除非通过策略授予帐户访问权限,否则会限制帐户访问S3。但是,S3默认设计为允许任何IP地址访问。因此,要阻止IP,您必须在策略中明确指定拒绝而不是允许。
{
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPDeny",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::s3-foo-bar/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "Your IP Address CIDR Notation"
}
}
}
]
}
如果要禁用对存储桶的直接访问:
您可以将文件设为私有并生成已签名的网址,以允许某人临时访问这些文件:Share an Object with Others
另一种方法可以是Serve Private Content via Cloudfront
或者您可以设置限制人们直接访问上述文件的策略,只允许他们访问从您的网站链接的文件
或者您可以通过某些脚本发送文件来提供这些文件,即将文件下载到服务器并从那里返回文件内容。在这种情况下,您可以在S3中将这些文件设为私有,甚至可以将它们移动到完全私有的单独存储桶中。我不推荐这种方法,因为它会给你的服务器带来更多的负担。
希望这会有所帮助