【问题标题】:Bucket policy to allow based on provided ip address but allow a snowflake role inspite of ip address桶策略允许基于提供的 IP 地址,但允许雪花角色,尽管 IP 地址
【发布时间】:2021-06-17 16:30:36
【问题描述】:

我有一种情况,我需要限制 s3 存储桶以拒绝除提供的 ips 列表之外的所有其他 ips,但也允许雪花访问。由于雪花在一个区域中使用的可能 IP 地址列表很多 - https://ip-ranges.amazonaws.com/ip-ranges.json,我试图查看是否可以根据为雪花 s3 阶段创建的雪花角色提供“允许”。我尝试的策略如下所示。

{
    "Version": "2012-10-17",
    "Id": "SourceIP",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::11111111111:role/snowflake-role"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::s3-bucket"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:role/snowflake-role"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::s3-bucket/*"
        },
        {
            "Sid": "SourceIP",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::s3-bucket",
                "arn:aws:s3:::s3-bucket/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "10.10.100.10",
                        "10.10.100.11",
                        "10.10.100.12",
                        "10.10.100.13"
                    ]
                }
            }
        }
    ]
}

这在阻止其他 IP 地址但 Snowflake 无法访问时非常有效。 由于“拒绝”可能会拒绝所有 IP 地址,而不管上面的“允许”雪花声明如何,我尝试了如下允许 IP 地址。

{
    "Version": "2012-10-17",
    "Id": "SourceIP",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::11111111111:role/snowflake-role"
            },
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::s3-bucket"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:role/snowflake-role"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::s3-bucket/*"
        },
        {
            "Sid": "SourceIP",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::s3-bucket",
                "arn:aws:s3:::s3-bucket/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "10.10.100.10",
                        "10.10.100.11",
                        "10.10.100.12",
                        "10.10.100.13"
                    ]
                }
            }
        }
    ]
}

现在雪花可以访问但ip限制不起作用。所有 ip 都可以访问存储桶。有人可以帮我解决我的情况吗?

【问题讨论】:

  • 为什么不允许 Snowflake IP 范围访问 S3 存储桶,然后按角色限制对 Snowflake Stage 的访问?大多数公司都是这样做的。
  • @MikeWalton,这种方法的问题在于 EC2 机器的特定区域有大量 ips。这甚至可能会改变。因为雪花不推荐ip白名单。community.snowflake.com/s/article/…

标签: json amazon-web-services amazon-s3 snowflake-cloud-data-platform aws-policies


【解决方案1】:

我认为确实最优雅的解决方案是创建一个 IAM 角色并将其分配给您希望允许访问 S3 存储桶的相应雪花。之后,使用明确的Deny"Principal" : "*" 阻止对存储桶的所有访问。最后,您可以使用aws:userIdaws:PrincipalArn 条件键只允许具有该角色的用户访问存储桶。

查看这篇文章了解更多详情https://levelup.gitconnected.com/how-i-locked-the-whole-company-out-of-an-amazon-s3-bucket-1781de51e4be

最好的,斯特凡

【讨论】:

  • 这个解决方案不会也阻止 Snowflake 访问 S3 存储桶吗?
  • @MikeWalton 否。任何担任特定角色的人都将通过"aws:userId":["UNIQUE_ROLE_ID:*"] 条件被允许,即,他们将被排除在Deny 之外。这当然假设该角色可以访问存储桶,因为 OP 的问题是如何限制访问权限...如果您想了解有关其工作原理的更多信息,请查看答案中链接的我的文章。我也很乐意回答您可能有的任何其他问题。
  • 我理解这个概念,但我读到这篇文章的主题是希望基于雪花角色进行控制的 OP,这与 IAM 角色不同。所以,这就是我的困惑。
猜你喜欢
  • 2018-01-03
  • 2019-01-23
  • 1970-01-01
  • 2018-05-20
  • 2012-09-18
  • 2011-04-08
  • 2012-08-03
  • 1970-01-01
  • 2020-07-29
相关资源
最近更新 更多