AWS VPC Endpoint SecurityGroupEgress 规则

AWS VPC Endpoint SecurityGroupEgress 规则

我正在尝试使用 AWS VPC Endpoint 访问 S3 资源,但没有成功。您能帮忙吗?

细节:

我在安全组内有一个 EC2 实例。它位于 VPC 和子网内,具有互联网端点和 0.0.0.0/0 的路由表条目。但是,我不希望这个特定的 EC2 实例能够与互联网通信,但我希望它能够与位于https://s3-eu-west-1.amazonaws.com/XXXXX/YYYYYY.sh

作为回应,我已重载 securityGroup 上的默认允许出口规则,因此通过向端口 22 添加出口规则来拒绝出站连接。亚马逊文档告诉我,本地(私有)AWS 地址仍将被允许。考虑到这一点,我在我的 VPC 中添加了一个 VPC 端点,并使用 pl-6da54004 (com.amazonaws.eu-west-1.s3) :: vpce-9f47a1f6 更新了我的路由表。

完成此操作后,我无法从我的 EC2 实例中访问我的 S3 资源。我尝试使用 wgethttps://s3-eu-west-1.amazonaws.com/XXXXX/YYYYYY.sh没有运气。

你知道哪里出了问题吗?我的想法是:

  • 我的 ec2 实例似乎将 S3 域解析为 54.231.130.244,但每个实例的情况并不相同。我是否需要为 S3 IP 范围添加 securityGroupEgress 规则或路由?如果需要,范围是多少?
  • 也许我应该通过其他域名来访问我的 S3 资源,而不是解析为内部 IP 地址?

谢谢你,托比

答案1

首先,介绍一下背景。VPC 实例的 DNS 解析器是内置于基础架构的虚拟组件。它不受出站安全组规则的影响……但当您为 VPC 配置 S3 端点时,S3 端点的主机名解析不会改变。

S3 的 VPC 端点可以做几件不同的事情。了解这些事情是了解它是否能满足您的需求的关键。简而言之:在本例中,它可以。

首先,您会注意到它们在路由表中配置为“前缀列表”。 VPC 端点采用一组预定义的 IPv4 网络前缀,并劫持包含相应前缀列表的每个路由表到这些前缀的路由,以便您到任何这些网络的流量都将遍历 VPC 端点,而不是 Internet 网关和任何中间 NAT 实例。

本质上,这会从您的 VPC 到 AWS 服务的 IP 地址范围开辟一条新路径……但这些 IP 地址最初将带您去的地方与没有 VPC 端点时将带您去的地方并不相同。

你击中的第一个地方看起来就像 S3但它与面向 Internet 的 S3 并不完全相同,因为它了解您的 VPC 端点的策略,因此您可以控制哪些存储桶和操作是可访问的。这些不会覆盖其他策略,而是对它们进行增强。

终端节点策略不会覆盖或替换 IAM 用户策略或 S3 存储桶策略。它是用于控制从终端节点访问指定服务的单独策略。但是,所有类型的策略(IAM 用户策略、终端节点策略、S3 策略和 Amazon S3 ACL 策略(如果有))都必须授予成功访问 Amazon S3 所需的权限。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html#vpc-endpoints-access

请注意,如果您不使用适当的策略限制存储桶访问,而是启用完全访问,则实例将能够访问 S3 区域中的任何存储桶(如果存储桶策略允许),包括公共存储桶。

现在到了棘手的部分。如果您的实例的安全组由于默认的“允许”规则已被删除而不允许出站访问 S3,则您可以使用特制的安全组规则允许实例通过 VPC 端点访问 S3:

向安全组添加新的出站规则。对于“类型”,选择“HTTPS”。对于目标,选择“自定义 IP”。

文档与我在控制台中看到的不一致:

目标列表显示可用 AWS 服务的前缀列表 ID 和名称。

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-endpoints.html#vpc-endpoints-security

嗯... 不,不是。至少就我而言,截至撰写本文时,不是。

解决方案是选择“自定义 IP”,然后在pl-xxxxxxxxIP 地址框中以 的形式输入 VPC 终端节点的前缀列表 ID(而不是 IP 地址块或安全组 ID)。您可以在 VPC 控制台中通过查看与 VPC 终端节点关联的子网之一中的目标来找到它。

相关内容