我正在设置一个基于S3的公共网站,我想拒绝为我的CloudFront分发之外的用户直接访问我的s3存储桶。同时我希望能够自己直接访问s3内容(管理员)。另外,我想允许CodeBuild服务访问同一个存储桶。
亚马逊建议“使用aws:referer密钥添加一个允许s3:GetObject权限的存储桶策略,使用aws:referer密钥,get请求必须来自特定网页。”:
但是如果我添加一个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 S3中的对象。因此,您应该通过Allow
权限授予访问权限。因此,任何不被允许的东西都被拒绝。
以上都不需要使用Deny
政策。
见:Restricting Access to Amazon S3 Content by Using an Origin Access Identity - Amazon CloudFront