【发布时间】:2019-02-04 04:37:53
【问题描述】:
我有一个桶my_super_bucket,里面有以下语句:
"Statement": [
{
"Sid": "Stmt4214214",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_super_bucket/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"my_super_ip_1",
"my_super_ip_2"
]
}
}
}
]
以前,存储桶对 List Objects 具有公共权限,因此我只想允许这两个 IP,因此我删除了该权限。但是,我仍然可以从不同的 IP 访问此存储桶中的任何文件。进一步排查问题,我采取了以下三个步骤:
- 我认为可能是CloudFront缓存的问题,所以尝试直接使用S3 URL访问文件,仍然可以下载。
- 在条件中也添加了
"NotIpAddress": { "aws:SourceIp": "*"},仍然可以访问文件。 - 删除了每个文件的读取对象权限。现在,无论 SourceIP 是什么,我都无法访问该文件。
那么,我怎样才能实现仅允许某些 IP 访问特定存储桶的任何文件的目标?在 IRC 上,一个人告诉我这些策略只适用于 AWS CLI,但也必须有一种方法来限制通过 URL 的访问,对吧?
【问题讨论】:
-
您是否对 IP 地址使用 CIDR 块表示法?查看stackoverflow.com/questions/11457635/… 和stackoverflow.com/questions/52072277/… 的答案
-
@KushVyas 将逻辑更改为
deny和NotIpAddress成功了 -
不用担心,您可以为答案投票,因为它对您有帮助 :)
-
这里有点不对劲。如果您将源 IP 正确指定为 CIDR,则该策略将不允许来自未列出的 IP 的未经身份验证的访问。然而你说你可以从一个未列出的 IP 访问存储桶,所以要么你弄错了(那些用户已经过身份验证,例如通过 IAM),要么策略没有正确编写。此外,实施 Deny/NotIpAddress 的建议可能会阻止其他有效的 IAM 用户,这可能不是您想要的。最后,一般来说,允许对存储桶的完全未经身份验证的访问(具有所有权限)几乎不是一个好主意。
标签: amazon-web-services amazon-s3