在亚马逊s3桶政策中加入两个条件

时间:2015-11-19 10:37:29

标签: amazon-web-services amazon-s3 ip referrer http-referer

如果请求不是来自这些ips ["192.0.2.0/24","203.0.113.0/24"],并且请求在以下[example1.com, example2.com ]中没有引荐来源,那么我的条件就像我想要的那样。然后拒绝它。我个人知道我可以这样做:

{
    "Sid": "6",
    "Effect": "Allow",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::my_bucket/*",
    "Condition": {    
        "IpAddress":{
            "aws:SourceIp": ["192.0.2.0/24","203.0.113.0/24"]
        }           
    }
}

{
    "Sid": "7",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::indeev5-dev-media/*/video/*",
    "Condition": {
        "StringNotLike": {
            "aws:Referer": [
                "http://example1.com/*",
                "http://example2.com/*",
            ]
        }
    }
}

但我怎样才能做一个" "在这里。我们同时检查这两个条件。我发布了一个有同样最终目标的问题,所以任何指针都会受到高度赞赏here简而言之,我想要做的是拒绝所有不是来自推荐者列表的请求,除了来自ip列表的请求。感谢

1 个答案:

答案 0 :(得分:1)

您的逻辑要求似乎是:

  • 允许任何IP位于["192.0.2.0/24","203.0.113.0/24"]
  • 的请求
  • 允许任何引荐来源["http://example1.com/*", "http://example2.com/*"]
  • 的请求

因此,您可以将其配置为 OR 而不是 AND NOT ,并且仅使用ALLOW而不是DENY。这样做的好处是允许用户策略工作(可以通过使用DENY来覆盖)。

该政策分为两部分:

  • 允许"Condition": {"IpAddress":{"aws:SourceIp": ["192.0.2.0/24","203.0.113.0/24"]}}
  • 允许"Condition": {"StringLike": {"aws:Referer": ["http://example1.com/*","http://example2.com/*",]}}

(我没有测试过这个。)