M. *_*tki 15 routing amazon-s3 amazon-ec2 amazon-web-services amazon-vpc
我使用 CloudFormation 向我的 VPC 添加了一个 VPC 端点,并允许使用 s3。这些路由在 AWS 控制台中可见,但在 EC2 实例的本地路由表中不可见:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.29.4.129 0.0.0.0 UG 0 0 0 eth0
169.254.169.254 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
172.29.4.128 0.0.0.0 255.255.255.128 U 0 0 0 eth0
Run Code Online (Sandbox Code Playgroud)
如何验证 VPC 中的 EC2 实例实际上使用 S3 的 VPC 终端节点,而不是可用的互联网连接?
M. *_*tki 10
我找到了一种验证 VPC 端点使用情况的方法。
aws ec2 describe-prefix-lists; 对于Windows PowerShell,Get-EC2PrefixList结果应包含属性中的 VPC 终端节点前缀列表 ID PrefixListId。
如需额外验证,您可以将以下策略应用于 S3 存储桶:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::mybucket"
],
"Condition": {
"StringNotEquals": {
"aws:sourceVpc": [
"vpc-121212"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用您的 vpc ID 而不是 vpc-121212。然后,您应该只能从给定的 VPC 访问 S3 存储桶
Val*_*ler 10
我想直接的方法是实际探测这些路线。
您可以跟踪路由到 s3 并查看 NAT 网关的内部 IP 是否在输出中的任何位置(例如第一跳)。
首先,在控制台中检查 NAT 网关内部 IP 。
设置端点的示例输出 - 未显示网关 IP。这就是你想看到的。
$ traceroute -n -T -p 443 s3.amazonaws.com
traceroute to s3.amazonaws.com (52.216.204.93), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 52.216.204.93 0.662 ms 0.668 ms 0.637 ms
Run Code Online (Sandbox Code Playgroud)
不同目的地的示例输出,通过 NAT(见第一跳)
$ traceroute -n -T -p 443 serverfault.com
traceroute to serverfault.com (151.101.129.69), 30 hops max, 60 byte packets
1 172.20.10.188 0.206 ms 0.147 ms 0.145 ms
2 * * *
3 * * *
4 * * *
5 * * *
6 * * *
7 100.65.13.49 0.956 ms 100.65.13.113 1.253 ms *
8 52.93.28.209 1.083 ms 52.93.28.231 1.213 ms 52.93.28.235 1.151 ms
9 100.100.4.38 1.770 ms 100.100.4.46 2.089 ms 100.100.4.36 1.723 ms
10 103.244.50.242 1.136 ms 100.100.4.44 1.702 ms 2.738 ms
11 151.101.129.69 1.013 ms 103.244.50.244 1.745 ms 151.101.129.69 1.142 ms
Run Code Online (Sandbox Code Playgroud)
小智 6
我建议在没有互联网访问的子网中启动 ec2 实例(允许 IAM 角色列出 s3 存储桶)。
路由表中基本上只有 2 个活动规则(您的 VPC 子网范围和 s3 终端节点)。
连接到实例并运行命令:
aws s3 ls /**
Run Code Online (Sandbox Code Playgroud)
它应该会因超时而失败,因为 boto 默认情况下会创建对全局 s3 url (s3.amazonaws.com) 的请求。
export AWS_DEFAULT_REGION=us-east-1** ## your region here
aws s3 ls /**
Run Code Online (Sandbox Code Playgroud)
应列出 us-east-1 区域中的存储桶(vpc 路由器会将您的请求路由到 s3.us-east-1.amazonaws.com)。
| 归档时间: |
|
| 查看次数: |
22493 次 |
| 最近记录: |