如何在 EC2 VPC 的 NAT 实例上将从私有子网出站到 S3 的流量列入白名单?

如何在 EC2 VPC 的 NAT 实例上将从私有子网出站到 S3 的流量列入白名单?

我正在研究符合隐私要求的 AWS VPC 高安全性部署选项。

我正在寻找一种在 NAT 实例上收紧来自私有子网的出站流量的方法。例如,如何限制来自 NAT 后面的出站流量以仅允许调用 AWS S3?我计划使用由 Ansible 和 Packer 驱动的 Shorewall 创建自定义 NAT AMI。

似乎没有一个固定的 S3 IP 地址列表,因此按 IP 列入白名单是行不通的。按协议列入白名单对此来说还不够;端点至少应该限制在 AWS 的 API 空间内。按主机名列入白名单肯定不会在第一个 DNS 查询的第一个 IP 之外起作用。

选项似乎是:

  1. 尝试拼凑一个 IP 列表。
  2. 向 AWS 索取列表。
  3. 也许我可以使用 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 范围可能会随时更改。

相关内容