如何用几个逻辑“OR”编写s3条件桶策略?

问题描述 投票:1回答:1

我正在设置一个基于S3的公共网站,我想拒绝为我的CloudFront分发之外的用户直接访问我的s3存储桶。同时我希望能够自己直接访问s3内容(管理员)。另外,我想允许CodeBuild服务访问同一个存储桶。

亚马逊建议“使用aws:referer密钥添加一个允许s3:GetObject权限的存储桶策略,使用aws:referer密钥,get请求必须来自特定网页。”:

https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html#example-bucket-policies-use-case-4

但是如果我添加一个Explicit Deny部分:

{
        "Sid": "Explicit deny to ensure requests are allowed only from specific referer.",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::examplebucket/*",
        "Condition": {
          "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]}
}

我失去了将自己的文件直接上传到s3存储桶的机会,CodeBuild Service也无法对我的存储桶执行任何操作。

如何在我的存储桶策略中实现条件以拒绝访问:

ONLY IF 

("StringNotLike": {"aws:Referer": "https://www.example.com"})
OR
("StringNotLike": {"aws:userid": "my root user id"})
OR
(my bucket is not requested by CodeBuild Service)
amazon-web-services amazon-s3 aws-codebuild
1个回答
1
投票

默认情况下,无法访问存储在Amazon S3中的对象。因此,您应该通过Allow权限授予访问权限。因此,任何不被允许的东西都被拒绝。

  • 添加允许通过CloudFront Origin Access Identity进行操作的Bucket Policy
  • CodeBuild似乎使用正在使用CodeBuild的IAM用户的权限,因此将权限分配给那些IAM用户(我查看了文档,但没有提到使用服务链接的角色,但我可能在这里错了)
  • 要允许您访问存储桶,请向IAM用户添加权限

以上都不需要使用Deny政策。

见:Restricting Access to Amazon S3 Content by Using an Origin Access Identity - Amazon CloudFront

© www.soinside.com 2019 - 2024. All rights reserved.