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失败并拒绝访问.这项政策有效地锁定了我.
我不知道我错过了什么.我甚至试过前面加上ForAnyValue和ForAllValues到IpAddress和NotIpAddress条件.
S3存储桶策略中指定的IP地址是指S3 Web端点从其接收请求的IP地址.有一些事情会影响这一点.
在您的策略中,您指定了一个192.168.*.*CIDR块,它是一个内部 IP地址.
aws s3 ls从AWS网络外部(例如,在本地计算机上)执行命令,则AWS将不会看到您的本地192.168.29.100IP地址.相反,它会看到您公开的IP地址.检查工具,例如什么是我的IP地址?看你的是什么.我认为AWS有类似的工具,但我现在找不到它.如果是这种情况,您需要使用面向公众的IP地址而不是私人IP地址更新您的政策.
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端点之间建立直接连接,从而绕过公共互联网.
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |