拒绝访问用户代理在AWS S3访问桶

问题描述:

在我的S3日志,我看到NSPlayer,所有的请求的多个请求是象下面这样:拒绝访问用户代理在AWS S3访问桶

[29 /二月/ 2016:23:07: 27 0000] 188.71.221.62 - 07231C9924A44C67 REST.GET.OBJECT 16639 /音轨/ 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" -

我想拒绝访问该用户代理和我写的水桶政策,以及用户政策,拒绝访问。但是,访问仍然没有被拒绝。你能帮我弄清楚为什么会发生?

这里是斗政策:

{ 
    "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" 
       } 
      } 
     } 
    ] 
} 

请让我知道如何解决这个问题!

这是我从亚马逊得到的回答是:

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

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

上述策略将阻止从任何地方在铲斗的任何访问,如果NSPlayer是在用户代理字符串。

此外,作为供参考,桶策略优先于用户策略。