首页 > 解决方案 > 私有托管实例的 docker hub 和 vpc 端点的路由表:AWS

问题描述

我有一个 docker 镜像,它只是一个 Java 应用程序。Java 应用程序从 DynamoDB 和 S3 存储桶读取数据并输出一些内容(它是一个测试应用程序)。我已将 docker 映像托管到公共 docker-hub 存储库中。

在 AWS 中,我创建了私有子网,它通过 AWS ECS 托管 EC2。现在有很高的安全性;我将 VPC 端点用于容器的 DynamoDB 和 S3 存储桶操作。

我已经使用 NAT 网关来允许 EC2 从 docker-hub 拉取 docker 镜像。

问题:

当我删除 VPC Endpoint 时,应用程序能够通过 NAT 读取 DynamoDB 和 S3。这意味着流量正在通过公共网络。

想法:

  1. 不能将 Dockerhub 的 IP 地址列入白名单,因为它可以更改。
  2. 由于 AWS ECS 处理所有 docker pull 等任务,我无法控制自定义。
  3. 我不想使用 AWS 容器注册表。我更喜欢dockerhub。
  4. DynamoDB/S3 私有地址未知

问题:

  1. 如何确保只能通过 NAT 允许 docker hub 的流量?
  2. 如何确保仅通过端点访问 DynamoDB 和 S3?

谢谢你的帮助

标签: amazon-web-servicesamazon-s3amazon-ec2amazon-dynamodbamazon-ecs

解决方案


如果您只想将通过 NAT(通过 DNS 主机名)的出站流量限制到 DockerHub,您将需要一个第三方解决方案,该解决方案可以在出站流量通过 Internet 之前允许或拒绝出站流量。

您可以将此设备安装在具有 NAT 网关访问权限的单独子网中。然后在您现有的 ECS 子网中,您将更新路由表以使0.0.0.0/0路由与此设备通信(通过指定其 ENI)。如果您查看AWS 市场,可能已经有解决方案来满足域过滤器。

或者,您可以自动化一个工具,该工具能够为 DockerHub 抓取列入白名单的 IP 地址,然后让它添加这些以允许所有带有 NACL 的流量规则。此 NACL 仅适用于 NAT 网关所在的子网。

关于您的第二个问题,从 VPC 的角度来看,通过将 S3 和 DynamoDB 端点的前缀列表添加到路由表中,它将通过私有路由转发到达这些 API 端点的任何请求。

目前 DynamoDB 无法阻止公共路由交互,但 S3 可以。通过将 VPCE 的条件添加到其存储桶策略中,您可以拒绝任何尝试在列出的 VPC 端点之外进行交互的访问。但是,请注意不要阻止自己从控制台访问,只阻止您不希望允许的特定动词。


推荐阅读