拒绝访问用户代理以访问AWS S3中的存储桶

时间:2016-03-02 05:40:03

标签: amazon-s3 policy amazon-iam bucket

在我的S3日志中,我看到来自NSPlayer的多个请求,所有请求如下所示:

  

[2016年2月29日:23:07:27 +0000] 188.71.221.62 - 07231C9924A44C67   REST.GET.OBJECT 16639 / tracks / 7ed00e05502aeb383d8a1abde2.mp3

     

" GET /bucket/16639/tracks/7ed00e05502aeb383d8a1abde2.mp3 HTTP / 1.1" 200    - 4122705 5639543 6305 58

     

" http://m.xxxxxxw.com /" " NSPlayer / 12.00.9651.0000   WMFSDK / 12.00.9651.0000" -

我想拒绝访问此useragent,我已编写了存储桶策略以及拒绝访问的用户策略。但是,访问仍然没有被拒绝。你能帮我弄清楚它为什么会发生吗?

以下是存储桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmtxxxxxxxxx0",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::xxxxxxxx3:user/bucket"
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition": {
                "StringNotLike": {
                    "aws:UserAgent": "NSPlayer"
                }
            }
        }
    ]
}

请告诉我如何解决这个问题!

1 个答案:

答案 0 :(得分:3)

这是我从亚马逊获得的回复:

您在存储桶上几乎拥有正确的策略来阻止来自该用户代理的访问。棘手的部分是您允许通过公共读取ACL访问单个对象,因此您不能在存储桶上使用限制性“允许”语句。您需要明确拒绝该用户代理执行GET请求。

实施例: { "Version": "2012-10-17", "Statement": [{ "Effect": "Deny", "Principal": "*", "Action": "s3:*",
"Resource": "arn:aws:s3:::bucket/*", "Condition": { "StringLike": { "aws:UserAgent": "*NSPlayer*" } } }] }

如果NSPlayer位于UserAgent字符串中,则上述策略将阻止从任何位置对存储桶的任何访问。

同样作为FYI,Bucket Policy优先于用户策略。