【问题标题】:Grant Access to AWS S3 bucket from specific IP without credentials无需凭据即可从特定 IP 授予对 AWS S3 存储桶的访问权限
【发布时间】:2018-08-29 07:52:18
【问题描述】:

我不想让我的 S3 存储桶公开访问。但我希望无需 AWS CLI 或任何凭证即可从我的本地组织网络访问它。我怎样才能实现它?。

我尝试了将主体作为 * 并将源 IP 作为组织网络的公共 IP 的存储桶策略。

【问题讨论】:

    标签: amazon-web-services amazon-s3


    【解决方案1】:

    是的,这是正确的做法。

    来自Bucket Policy Examples - Amazon Simple Storage Service

    {
      "Version": "2012-10-17",
      "Id": "S3PolicyId1",
      "Statement": [
        {
          "Sid": "IPAllow",
          "Effect": "Allow",
          "Principal": "*",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::examplebucket/*",
          "Condition": {
             "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
          } 
        } 
      ]
    }
    

    【讨论】:

    • 我认为这不会起作用,因为我曾经遇到过类似的问题,因为 S3 默认设计为允许任何 IP 地址访问。因此,要阻止 IP,您必须在策略中明确指定拒绝而不是允许。
    • 默认情况下,Amazon S3 中的内容是私有的。以上将授予从该 IP 地址访问该存储桶的 GetObject 的权限。如果没有其他存储桶策略,并且对象具有私有 ACL,则内容将保持私有。
    • 我刚刚做了一个测试,可以确认上面的bucket策略是足够的,假设对象有私有ACL,并且对象是匿名访问的。
    • 是的,我很久以前尝试过相同的解决方案,但失败了,我当时是从 aws 支持团队更新的(我们试图在私有端点存在之前从 VPC 内部进行)
    • 这完全取决于您的要求。如果 everybody 不在 CIDR 范围内,Deny 将从存储桶中阻止它们。如果这是意图,那很好。但是,如果目的是授予对特定 CIDR 范围的匿名访问权限,同时还允许 IAM 策略向特定人员(例如管理员)授予额外访问权限,则不合适。
    【解决方案2】:

    如果打算授予对特定 CIDR 范围的匿名访问权限,同时还允许 IAM 策略授予特定人员(例如管理员)额外的访问权限,那么这将是不合适的。

    如果您遵循 AWS documentation 列出的初始示例 - 您最终会得到一个可能与此类似的策略。

    {
        "Id": "S3PolicyId1",
        "Statement": [
            {
                "Sid": "IPAllow",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "*"
                },
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::examplebucket/*",
                "Condition": {
                    "IpAddress": {
                        "aws:SourceIp": "x.x.x.x/xx"
                    }
                }
            }
        ]
    }
    

    在将头敲在桌子上几次之后,您会发现这项政策不起作用。 S3 存储桶似乎没有隐含的拒绝规则(类似于 IAM 访问策略的设置方式)。

    默认情况下,帐户被限制访问 S3,除非他们已通过策略获得访问权限。 但是,S3 默认设计为允许任何 IP 地址访问。因此,要阻止 IP,您必须在策略中明确指定拒绝而不是允许。

    一旦您了解了这一点,政策就很容易调整。您只需将政策从只允许从我的 IP 地址访问到拒绝访问不是我的 IP 地址的任何地方翻转即可。

    {
        "Id": "S3PolicyId1",
        "Statement": [
            {
                "Sid": "IPDeny",
                "Effect": "Deny",
                "Principal": {
                    "AWS": "*"
                },
                "Action": "s3:*",
                "Resource": "arn:aws:s3:::examplebucket/*",
                "Condition": {
                    "NotIpAddress": {
                        "aws:SourceIp": "xxx.x.x/xx"
                    }
                }
            }
        ] }
    

    希望这会有所帮助!

    【讨论】:

    • 小心——如果任何用户不在该 CIDR 范围内(包括管理员),第二个策略将阻止他们与存储桶进行交互。
    猜你喜欢
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    相关资源
    最近更新 更多