如何用几个逻辑“或”编写 s3 条件存储桶策略?
Posted
技术标签:
【中文标题】如何用几个逻辑“或”编写 s3 条件存储桶策略?【英文标题】:How to write s3 conditional bucket policy with several logical "OR"? 【发布时间】: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)
【问题讨论】:
【参考方案1】:默认情况下,无法访问存储在 Amazon S3 中的对象。因此,您应该通过Allow
权限授予访问权限。因此,不允许的任何内容都会被拒绝。
以上都不需要使用Deny
策略。
见:Restricting Access to Amazon S3 Content by Using an Origin Access Identity - Amazon CloudFront
【讨论】:
谢谢你,约翰。是的,我已向我的 IAM 用户和 CodeBuild 角色添加了相应的允许权限。问题是,当我试图拒绝其他用户(我的网站访问者)直接从 S3 存储桶访问内容时,我在存储桶策略中的拒绝语句取代了附加到用户/角色的任何允许权限。所以我仍然需要找到一种方法来编写拒绝子句但有例外以上是关于如何用几个逻辑“或”编写 s3 条件存储桶策略?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 IP 限制添加到已经有用户限制的 s3 存储桶(在存储桶策略中)