【发布时间】:2018-05-15 13:52:50
【问题描述】:
所以.. 我有一个 Amazon S3 存储桶,我想通过 http 将一些文件提供给应用程序服务器。为了确保这一点,需要设置特定的用户代理集以及 IP 限制。
这就是我所做的
a) 创建了一个名为“my-test-bucket”的新存储桶
b) 将存储桶设置为“启用网站托管”
c) 向桶中添加了一个简单的 index.html
d) 设置以下存储桶策略以测试连接性(对 zee 互联网开放)
{
"Version": "2008-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "Public",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-test-bucket/*"
}
]
}
d) 经过测试,它可以工作!
e) 设置存储桶策略以限制用户代理
{
"Version": "2008-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "Public",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-test-bucket/*",
"Condition": {
"StringEquals": {
"aws:UserAgent": "test"
}
}
}
]
}
f) 使用 Postman 测试在 header 中设置 User-Agent 并且没有 go
现在奇怪的是..我在另一个存储桶上使用了类似的存储桶策略,效果很好!关于我在这里做错了什么有什么想法吗?
PS .. 还没有添加到 IP 地址检查中,一旦这个工作正常,接下来会出现
【问题讨论】:
-
基于 UserAgent 限制访问并不是特别安全——它是默默无闻的安全,但不能保证。您是否考虑过使用签名 URL,或者直接调用 S3 API 而不是使用未经身份验证的访问?
-
我希望通过 NGINX 代理存储在 S3 上的 Web 内容以进行缓存,这样就不用使用 API。至于签名的 UR,据我所知,它们通常用于上传内容而不是读取权限。
标签: amazon-web-services amazon-s3