Amazon S3存储桶策略允许访问仅特定的http

时间:2019-05-20 20:26:50

标签: json amazon-web-services amazon-s3

我正在尝试使用存储桶策略将对Amazon S3存储桶中的对象(媒体文件)的访问限制为特定的引用域privatewebsite.com,但无论访问哪个域,都应拒绝访问。

我对“阻止公共访问”具有以下设置

  

阻止对通过新访问控制列表(ACL)授予的存储桶和对象的公共访问-

     

阻止对通过任何访问控制列表(ACL)授予的存储桶和对象的公共访问-开启

     

阻止对通过新的公共存储桶策略授予的存储桶和对象的公共访问-关闭

     

通过任何公共存储桶策略阻止对存储桶和对象的公共和跨帐户访问-关闭

我添加了以下代码,带有和不带有http://和https://的URL,但仍然拒绝访问。 (privatewebsite.com,https://privatewebsite.comhttp://privatewebsite.com

{
    "Version": "2012-10-17",
    "Id": "Policy8675309",
    "Statement": [
        {
            "Sid": "Stmt8675309",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-media-bucket/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": "https://privatewebsite.com"
                }
            }
        },
        {
            "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-media-bucket/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [
                        "https://privatewebsite.com/*",
                        "http://privatewebsite.com/*"
                    ]
                }
            }
        }
    ]
}

有人可以在我的存储桶策略中看到任何明显的错误吗?

我希望这项政策允许来自privatewebsite.com网页上的任何请求,同时拒绝所有其他请求,但目前所有请求都被拒绝。

2 个答案:

答案 0 :(得分:0)

为您尝试一下类似字符串的部分(允许部分):

        "StringLike": {
            "aws:Referer": [
                "https://privatewebsite.com/*",
                "http://privatewebsite.com/*"
            ]
        }

答案 1 :(得分:0)

来自Bucket Policy Examples - Restricting Access to a Specific HTTP Referrer

{
    "Version": "2012-10-17",
    "Id": "http referer policy example",
    "Statement": [
        {
            "Sid": "Allow get requests originating from www.example.com and example.com.",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::examplebucket/*",
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "http://www.example.com/*",
                        "http://example.com/*"
                    ]
                }
            }
        }
    ]
}

此方法仅授予Allow访问权给定的Referer。不需要使用Deny策略,因为默认情况下拒绝访问。因此,仅授予Allow权限。