针对特定文件夹的referer条件的Amazon S3存储桶策略

时间:2018-05-22 11:51:05

标签: amazon-web-services amazon-s3 aws-sdk

我想对特定文件夹使用StringLike aws:Referer的条件,并将该文件夹的其余部分公开访问。

这是我的存储桶政策:

  {
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "AddPerm",
           "Effect": "Allow",
           "Principal": "*",
           "Action": "s3:GetObject",
           "Resource": [
               "arn:aws:s3:::bucketName/folderName/*"
           ]
       },
       {
           "Sid": "",
           "Effect": "Allow",
           "Principal": "*",
           "Action": "s3:GetObject",
           "Resource": "arn:aws:s3:::bucketName/folderName/users/*",
           "Condition": {
               "StringLike": {
                   "aws:Referer": [
                       "https://example.com/*"
                   ]
               }
           }
       }
   ]
}

当我使用上述政策时,它不适用于第一个。

2 个答案:

答案 0 :(得分:1)

尝试以下政策:

{
            "Sid": "",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::bucketName/folderName/users/*",
            "Condition": {
                "StringNotLike": {
                    "aws:Referer": [
                        "https://example.com/*"
                    ]
                }
            }
        }

答案 1 :(得分:1)

您的政策的第一部分是授予GetObject访问您广告资源的folderName路径中的任何内容。此包含 folderName/users/*

因此,您的策略的第二部分未被使用(因为第一个策略已授予对folderName/users/*路径的访问权限。

您可以使用不同的存储分区来解决它,或者您可以将第二个策略转换为Deny StringNotLike(如果引用者不是folderName/users/*,则有效地说example.com拒绝访问users

坦率地说,您的策略看起来很奇怪,因为它授予对整个referer路径层次结构的访问权限,这可能不是您希望它执行的操作。 (我假设您只想根据访问您的应用程序的人员授予对特定用户数据的访问权限。)

请注意jQuery(document).ready(function($) { var offsetHeight = $(test).height(); //Successfully Got height var txt = "Height with padding and border: " + offsetHeight + "px"; document.getElementsByClassName("logo_helper").style.top = txt; }); 不安全 - 很容易在浏览器和网络抓取软件中伪造此值。