【问题标题】:How to write s3 conditional bucket policy with several logical "OR"?如何用几个逻辑“或”编写 s3 条件存储桶策略?
【发布时间】:2019-05-01 11:47:26
【问题描述】:

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

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

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】:

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

    • 添加允许通过 CloudFront 源访问身份执行操作的存储桶策略
    • CodeBuild 似乎使用了正在使用 CodeBuild 的 IAM 用户的权限,因此将权限分配给那些 IAM 用户(我查看了文档并没有提及使用与服务相关的角色,但我在这里可能错了)
    • 要允许进入存储桶,请将权限添加到您的 IAM 用户

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

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

    【讨论】:

    • 谢谢你,约翰。是的,我已向我的 IAM 用户和 CodeBuild 角色添加了相应的允许权限。问题是,当我试图拒绝其他用户(我的网站访问者)直接从 S3 存储桶访问内容时,我在存储桶策略中的拒绝语句取代了附加到用户/角色的任何允许权限。所以我仍然需要找到一种方法来编写拒绝子句但有例外
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-26
    • 2020-12-05
    相关资源
    最近更新 更多