S3存储桶策略限制为IP CIDR范围

Eri*_*ric 3 amazon-s3 amazon-ec2 amazon-web-services amazon-policy

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

{
    "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"
                    ]
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我知道这个政策的特殊性存在其他问题,但除了条件之外,我试图尽可能地让它成为可能.不幸的是,尝试aws s3 ls s3://test.bucket使用IP地址的ec2实例中的简单操作192.168.129.100失败并拒绝访问.这项政策有效地锁定了我.

我不知道我错过了什么.我甚至试过前面加上ForAnyValueForAllValuesIpAddressNotIpAddress条件.

Mat*_*ser 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端点.

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

决议1:

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

决议2:

在您的VPC上启用"S3 VPC Endpoints".这将在您的内部VPC和S3端点之间建立直接连接,从而绕过公共互联网.