amazon-web-services - 私有托管实例的 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。这意味着流量正在通过公共网络。
想法:
- 不能将 Dockerhub 的 IP 地址列入白名单,因为它可以更改。
- 由于 AWS ECS 处理所有 docker pull 等任务,我无法控制自定义。
- 我不想使用 AWS 容器注册表。我更喜欢dockerhub。
- DynamoDB/S3 私有地址未知
问题:
- 如何确保只能通过 NAT 允许 docker hub 的流量?
- 如何确保仅通过端点访问 DynamoDB 和 S3?
谢谢你的帮助
解决方案
如果您只想将通过 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 端点之外进行交互的访问。但是,请注意不要阻止自己从控制台访问,只阻止您不希望允许的特定动词。
推荐阅读
- r - 如何将指示符列转换为连接列(列名)
- c++ - 防止客户端保留 C++ 类返回的指针
- nginx - Kubernetes 在哪里拉取图像,我如何浏览它们/更改它们的拉取源?
- c# - 如果在 WPF 触摸屏应用程序中与另一个形状发生碰撞,则停止 System.Windows.Shapes.Rectangle 惯性
- c - 在 C 中使用指针转置矩阵
- wordpress - 哈希不会保存在 user_meta
- angular - Angular Typescript 订阅嵌套对象订阅
- html - 将 (img) 元素高度缩小到 flex 容器中同级元素的高度
- ruby-on-rails - 设计不允许的强参数:avatar
- python - 如何在 Python 的 DataFrame 中显示午夜时间?