【问题标题】:What am I doing wrong to restrict access to S3 via IP?通过 IP 限制对 S3 的访问我做错了什么?
【发布时间】: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 访问此存储桶中的任何文件。进一步排查问题,我采取了以下三个步骤:

  1. 我认为可能是CloudFront缓存的问题,所以尝试直接使用S3 URL访问文件,仍然可以下载。
  2. 在条件中也添加了"NotIpAddress": { "aws:SourceIp": "*"},仍然可以访问文件。
  3. 删除了每个文件的读取对象权限。现在,无论 SourceIP 是什么,我都无法访问该文件。

那么,我怎样才能实现仅允许某些 IP 访问特定存储桶的任何文件的目标?在 IRC 上,一个人告诉我这些策略只适用于 AWS CLI,但也必须有一种方法来限制通过 URL 的访问,对吧?

【问题讨论】:

  • 您是否对 IP 地址使用 CIDR 块表示法?查看stackoverflow.com/questions/11457635/…stackoverflow.com/questions/52072277/… 的答案
  • @KushVyas 将逻辑更改为 denyNotIpAddress 成功了
  • 不用担心,您可以为答案投票,因为它对您有帮助 :)
  • 这里有点不对劲。如果您将源 IP 正确指定为 CIDR,则该策略将不允许来自未列出的 IP 的未经身份验证的访问。然而你说你可以从一个未列出的 IP 访问存储桶,所以要么你弄错了(那些用户已经过身份验证,例如通过 IAM),要么策略没有正确编写。此外,实施 Deny/NotIpAddress 的建议可能会阻止其他有效的 IAM 用户,这可能不是您想要的。最后,一般来说,允许对存储桶的完全未经身份验证的访问(具有所有权限)几乎不是一个好主意。

标签: amazon-web-services amazon-s3


【解决方案1】:

正如 Kush Vyas 在评论中提到的那样,更改策略以便不再允许某个 IP,而是拒绝所有其他 IP 做的伎俩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2011-05-13
    • 2017-05-08
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多