我正在研究符合隐私要求的 AWS VPC 高安全性部署选项。
我正在寻找一种在 NAT 实例上收紧来自私有子网的出站流量的方法。例如,如何限制来自 NAT 后面的出站流量以仅允许调用 AWS S3?我计划使用由 Ansible 和 Packer 驱动的 Shorewall 创建自定义 NAT AMI。
似乎没有一个固定的 S3 IP 地址列表,因此按 IP 列入白名单是行不通的。按协议列入白名单对此来说还不够;端点至少应该限制在 AWS 的 API 空间内。按主机名列入白名单肯定不会在第一个 DNS 查询的第一个 IP 之外起作用。
选项似乎是:
- 尝试拼凑一个 IP 列表。
- 向 AWS 索取列表。
- 也许我可以使用 HAProxy 或类似工具对 S3 进行反向代理,完全跳过传统的 NAT。假设私有子网内部所需的唯一出站流量是基于 HTTP(S) 的,也许这会起作用,并且可以对 S3 主机名进行限制?我想,可以使用位于公共子网中的暂存点(实例)来完成软件包更新和 NTP 之类的操作。
如果您想进一步了解我的需求,请告诉我。
您知道如何仅允许从 EC2 VPC 的私有子网内部到 S3(和依赖项)的流量吗?
谢谢,约书亚
PS 哦,是的。如果它可以高度可用,那也很好。我计划在单个区域的三个区域中各部署一个“NAT”或“类似 NAT”的实例。我计划使用 Autoscaling 组来保持这三个实例处于活动状态,但也许你有其他想法。最初,我打算使用三个 ENI,每个 AZ 一个,它们通过 Corosync 和 Pacemaker 浮动用于 NAT。我希望通过路由到 ENI 来避免在区域中发生 NAT 故障时更新路由表的需要。
/结束blabbing
相关链接:
http://www.shorewall.net/4.2/FAQ.htm#faq39 没有 NAT 的 EC2 VPC?
答案1
我建议您为 S3 配置 VPC 端点,而不是在 NAT 实例上将 S3 流量列入白名单:
这样,您的 EC2 节点就可以直接在 VPC 私有网络上访问 S3,而不必通过 NAT。
如果您仍需要 S3 使用的 IP 列表,可以使用 AWS CLI 命令描述前缀列表:
aws ec2 describe-prefix-lists
这将给出如下输出
{
"PrefixLists": [
{
"PrefixListName": "com.amazonaws.eu-west-1.s3",
"Cidrs": [
"54.231.128.0/19"
],
"PrefixListId": "pl-6da54004"
}
]
}
该列表针对的是 AWS CLI 使用的区域。我的示例显示了 的当前输出eu-west-1
,您可以通过传递参数来指定不同的区域--region
,例如aws --region us-east-1 ec2 describe-prefix-lists
。
但请注意,服务的 IP 范围可能会随时更改。