亚马逊S3存储桶策略:仅允许访问特定的HTTP。

5
我正在尝试使用存储桶策略来限制Amazon S3存储桶中对象(媒体文件)的访问权限,仅允许特定引荐域名privatewebsite.com访问。但是无论引荐域名是什么,都会收到访问被拒绝的消息。
我已将“阻止公共访问”设置如下:
阻止通过新访问控制列表(ACL)授予的存储桶和对象的公共访问 - 开启
阻止通过任何访问控制列表(ACL)授予的存储桶和对象的公共访问 - 开启
阻止通过新公共存储桶策略授予的存储桶和对象的公共访问 - 关闭
阻止通过任何公共存储桶策略授予的存储桶和对象的公共访问和跨账户访问 - 关闭
我已添加了以下代码和URL,包括http://和https://,但仍然收到访问被拒绝的消息(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页面的任何请求,同时拒绝所有其他请求,但目前所有请求都被拒绝。


附注:Referer可以很容易地伪造,因此它不是一种良好的安全形式。请小心您公开的信息。 - John Rotenstein
2个回答

8

来自存储桶策略示例 - 限制访问特定 HTTP 引用者

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

此方法仅为给定的引用者授予“允许”访问权限。不需要与它一起使用“拒绝”策略,因为默认情况下会拒绝访问。因此,只授予“允许”权限。

1

尝试使用以下内容来处理类似字符串的部分(允许部分):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接