【问题标题】:Amazon S3 Bucket Policy - Filter by User AgentAmazon S3 存储桶策略 - 按用户代理过滤
【发布时间】: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


【解决方案1】:

问题是由于浏览器缓存造成的。所以对于每个新测试,我都需要添加一个时间戳,以确保它不会被浏览器缓存。

http://my-test-bucket.s3.amazonaws.com/test.html?t=123321

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 2023-02-26
    • 2013-01-08
    • 2023-03-29
    • 2023-03-31
    • 1970-01-01
    • 2013-12-21
    • 2021-01-19
    相关资源
    最近更新 更多