Amazon web services 特定文件夹上引用者条件的Amazon S3 bucket策略

Amazon web services 特定文件夹上引用者条件的Amazon S3 bucket策略,amazon-web-services,amazon-s3,aws-sdk,Amazon Web Services,Amazon S3,Aws Sdk,我想对特定文件夹使用StringLike aws:Referer的条件,并使文件夹的其余部分可以公开访问 这是我的政策: { "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject",

我想对特定文件夹使用
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/*"
                   ]
               }
           }
       }
   ]
}
当我使用上述策略时,第一个策略不起作用。

请尝试使用以下策略:

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

策略的第一部分是为bucket的
folderName
路径中的任何内容授予
GetObject
访问权限。这包括
folderName/users/*

因此,没有使用策略的第二部分(因为第一个策略已经授予对
folderName/users/*
路径的访问权限)

您可以通过使用不同的bucket来解决这个问题,或者您可以使用
StringNotLike
将第二个策略转换为
Deny
(有效地说,如果referer不是
example.com
,则拒绝
folderName/users/*

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


请注意,
referer
不安全的-在浏览器和网页抓取软件中很容易伪造此值。

你说的“第一个不起作用”是什么意思?两个条件不同时起作用。@JohnRotenstein明白了,我们不能使用多个“允许”bucket策略中的效果。不,您可以使用多个允许。例如,您可以在
folder1
上执行一个允许,在
folder2
上执行另一个允许。但是,您希望授予对
folder1/*
的访问权限,但限制
folder1
内的子路径,这与第一个策略相矛盾。谢谢,我得到了答案。你好@John Rotenstein现在我想在我的bucket策略上添加aws vpc条件。它不起作用。请参考我的策略:我的策略是:{“Sid”:“Allow hh”,“Effect”:“Deny”,“Principal”:“Action”:“s3:GetObject”,“Resource”:“arn:aws:s3:::bucket/folderName/users/”,“condition”:{“StringNotLike”:{“aws:Referer”:[“*”,“*”]},“StringNotEquals”:{“aws:sourceVpc”:“vpc-1a2b3c4d”}}您想实现什么?我想允许从特定的aws VPC和给定的域进行访问。请参阅本文