3

我试图限制对几个不同子网中的 EC2 实例的 S3 存储桶访问:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Principal": {"AWS": "*"},
            "Resource": [
                "arn:aws:s3:::test.bucket",
                "arn:aws:s3:::test.bucket/*"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.168.129.64/27",
                        "192.168.129.96/27",
                        "192.168.128.64/26"
                    ]
                }
            }
        },
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Principal": {"AWS": "*"},
            "Resource": [
                "arn:aws:s3:::test.bucket",
                "arn:aws:s3:::test.bucket/*"
            ],
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "192.168.129.64/27",
                        "192.168.129.96/27",
                        "192.168.128.64/26"
                    ]
                }
            }
        }
    ]
}

我知道关于这项政策的特殊性还有其他问题,但除了条件之外,我已尝试使其尽可能简单。不幸的是,尝试aws s3 ls s3://test.bucket从 IP 地址为 的 ec2 实例执行简单操作192.168.129.100失败并拒绝访问。这项政策有效地将我拒之门外。

我不知道我错过了什么。我什至尝试在and条件之前添加ForAnyValue和。ForAllValuesIpAddressNotIpAddress

4

1 回答 1

5

S3 存储桶策略中指定的 IP 地址是指 S3 Web 端点接收请求的 IP 地址。有几件事会影响这一点。

在您的策略中,您指定了一个192.168.*.*CIDR 块,它是一个内部IP 地址。

  1. 如果您aws s3 ls从 AWS 网络外部(例如,在您的本地计算机上)执行命令,则 AWS 将看不到您的本地192.168.29.100IP 地址。相反,它会看到您面向公众的 IP 地址。检查工具,例如我的 IP 地址是什么?看看你的是什么。我认为 AWS 有一个类似的工具,但我现在找不到。

如果是这种情况,您需要使用面向公众的 IP 地址而不是您的私有 IP 地址来更新您的策略。

  1. 如果您aws s3 ls从 AWS 网络内部(例如,在 EC2 实例上)执行命令,并且您的 VPC 没有启用“S3 VPC 端点”,那么(再次),S3 Web 端点看到的是公共 IP 地址,不是你的私人的。原因是 S3 命令正在退出您的 VPC,成为公共连接,然后到达 S3 端点。

如果是这种情况,您有 2 个可能的解决方案:

决议 1:

更新您的策略以包含公共 IP 地址而不是您的私有 IP 地址。如果您的 EC2 实例位于私有子网中,这很可能是您的 NAT 的公共 IP 地址;如果您的实例位于公共子网中,则很可能是您的 EC2 实例的公共 IP 地址。

决议 2:

在您的 VPC 上启用“S3 VPC 终端节点”。这将在您的内部 VPC 和 S3 端点之间创建直接连接,从而绕过公共互联网。

于 2017-11-21T17:25:01.460 回答