【发布时间】:2017-09-03 15:42:38
【问题描述】:
在 VPC 中,我有两个子网,一个是带有 EC2 实例的公共子网,另一个是带有 2 个 EC2 实例的私有子网。所有 3 个 EC2 实例都具有相同的 IAM 角色来访问 S3。
如果我登录并运行aws s3 ls,公共子网中的EC2实例可以直接访问S3。但是,私有子网中的两个 EC2 实例都不能。可能是什么原因?
私有子网中的 EC2 使用接受来自整个 VPC 的流量的安全组。
公共子网中的 EC2 使用接受来自Anywhere的流量的安全组。
所有 3 个 EC2 实例使用相同的路由表、相同的 NACL、使用相同的 IAM 角色,并使用以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
}
]
}
如果我在私有子网的 EC2 中手动创建凭据配置文件,则它可以登录并访问“aws s3 ls”。
更新: 私有子网的路由表确实有一个 VPC 终端节点。路由表是:
- dest=10.1.0.0/16 (myVPC)->target=local
- dest=0.0.0.0/0, target=iGW
- dest=pl-68a54001 (com.amazonaws.us-west-2.s3)->target=vpce-26cf344f
其中,#3 表示 EC2 可以通过 VPC 端点访问 S3。添加 #2 是因为 ELB 在 EC2 实例前面并且必须访问互联网。
另一个观察:如果我在私有子网中启用分配公共 IP,然后启动一个新的 EC2 实例,这个 EC2 实例可以访问 S3。如果我在私有子网中禁用分配公共 IP,然后启动新的 EC2 实例,则新的 EC2 实例无法访问 S3。
顺便说一句,在运行 terraform 之前,我已经将区域设置为 us-west-2:
[ec2-user@ip-XXXXX]$ echo $AWS_DEFAULT_PROFILE
abcdefg
[ec2-user@XXXXX]$ aws configure --profile abcdefg
AWS Access Key ID [****************TRM]:
AWS Secret Access Key [****************nt+]:
Default region name [us-west-2]:
Default output format [None]:
【问题讨论】:
标签: amazon-s3 amazon-ec2 amazon-iam