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

Posted

技术标签:

【中文标题】Amazon S3 存储桶策略只允许访问特定的 http【英文标题】:Amazon S3 bucket policy allow access to ONLY specific http 【发布时间】:2019-10-07 05:23:15 【问题描述】:

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

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

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

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

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

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

我已经添加了以下代码、带有和不带有 http:// 和 https:// 的 URL,但仍然被拒绝访问。 (privatewebsite.com, https://privatewebsite.com, http://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 很容易被伪造,因此它不是一种好的安全形式。请注意您提供的信息。 【参考方案1】:

为你尝试这个类似字符串的部分(允许部分):

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

【讨论】:

【参考方案2】:

来自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/*"
                    ]
                
            
        
    ]

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

【讨论】:

以上是关于Amazon S3 存储桶策略只允许访问特定的 http的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 存储桶:拒绝列表、读取、写入特定文件夹

允许用户访问特定 S3 存储桶进行备份的 AWS IAM 策略

Amazon S3 存储桶策略,我做错了啥?

从 Azure 数据块读取 Amazon S3 特定文件夹,无需公开访问存储桶

Amazon S3 存储桶策略:如何锁定仅访问您的 EC2 实例

AWS S3 存储桶策略允许从特定 URL 的访问