为什么我无法使用网关 VPC 终端节点连接到 S3 存储桶?

上次更新日期:2020 年 11 月 23 日

我正在使用网关终端节点从 Amazon Virtual Private Cloud (Amazon VPC) 中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例连接到 Amazon Simple Storage Service (Amazon S3) 存储桶。但它无法正常工作。如何解决此问题?

解决方法

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

网关 VPC 终端节点连接问题可能是由于网络访问或允许从 Amazon VPC 连接到 Amazon S3 的安全规则造成的。检查以下资源和配置以诊断和解决连接问题。

区域配置

您只能调用与 Amazon S3 网关 VPC 终端节点位于同一区域的 Amazon S3 对象。确认您的对象和终端节点位于同一区域。

VPC 中的 DNS 设置

重要提示:必须在您的 VPC 中启用 DNS 解析(请参阅网关终端节点限制)。如果您正在使用自己的 DNS 服务器,请确保对 AWS 服务的 DNS 请求解析为 AWS 维护的 IP 地址

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Virtual Private Cloud 下,选择 Your VPCs(您的 VPC)。
  3. 在资源列表中,选择存在 S3 连接问题的 Amazon VPC。
  4. Summary(摘要)视图中,将 DNS resolution(DNS 解析)设置为 yes(是)。

Amazon S3 的路由表设置

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Virtual Private Cloud 下,选择 Route Tables(路由表)。
  3. 选择与存在 S3 连接问题的 VPC 子网关联的路由表。
  4. 选择 Routes(路由)视图。
  5. 确认存在使用网关 VPC 终端节点连接到 Amazon S3 的路由

安全组出站规则

  1. 打开 Amazon EC2 控制台
  2. 在导航窗格中的 Network & Security(网络和安全)下,选择 Security Groups(安全组)。
  3. 在资源列表中,选择与您用于连接到 Amazon S3 的实例关联的安全组。
  4. Outbound(出站)视图中,确认可用出站规则允许到 Amazon S3 的流量。

默认出站规则允许所有出站流量。如果安全组的规则比默认出站规则更严格,请添加以下内容之一:

有关详细信息,请参阅修改安全组

网络 ACL 规则

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Security(安全性)下,选择 Network ACLs(网络 ACL)。
  3. 在资源列表中,选择与存在 S3 连接问题的 VPC 子网关联的网络访问控制列表(网络 ACL)。
  4. Inbound Rules(入站规则)视图中,确认规则允许在临时 TCP 端口 1024-65535 上允许来自 Amazon S3 的入站返回流量。
  5. Outbound Rules(出站规则)视图中,确认规则允许到 Amazon S3 的流量。
注意:默认情况下,网络 ACL 允许所有的入站和出站 IPv4 流量。网络 ACL 还允许所有入站和出站 IPv6 流量(如果适用)。如果您的网络 ACL 规则限制流量,则必须 为 Amazon S3 指定 CIDR 块(IP 地址范围)

网关 VPC 终端节点策略

重要提示:终端节点目前不支持跨区域请求。确保您的终端节点与存储桶位于同一个区域中。您可以使用 get-bucket-location 命令查找您的存储桶位置。

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中的 Virtual Private Cloud 下,选择 Endpoints(终端节点)。
  3. 在资源列表中,选择与存在 S3 连接问题的 VPC 子网关联的终端节点。
  4. 选择 Policy(策略)视图。
  5. 查看终端节点策略。检查策略是否阻止访问 S3 存储桶或阻止受连接问题影响的 AWS Identity and Access Management (IAM) 用户访问。如有必要,编辑策略以启用 S3 存储桶或 IAM 用户的访问权限。有关更多信息,请参阅对 Amazon S3 使用终端节点策略

S3 存储桶策略

  1. 打开 Amazon S3 控制台
  2. 选择存在连接问题的 S3 存储桶。
  3. 选择 Permissions(权限)视图。
  4. 选择 Bucket Policy(存储桶策略)。
  5. 确保存储桶策略允许从网关 VPC 终端节点以及要连接的 VPC 进行访问。编辑策略以允许从网关 VPC 终端节点和 VPC 进行访问。有关更多信息,请参阅使用 Amazon S3 存储桶策略

注意:您的存储桶策略可以限制只能从与 VPC 中的实例关联的特定公有或弹性 IP 地址进行访问。您无法根据与实例关联的私有 IP 地址限制访问。有关更多信息,请参阅限制对特定 IP 地址的访问

如果您使用的是代理服务器,请确保允许通过该代理服务器建立您的 VPC 连接。如果您不为 S3 使用代理服务器,请在访问您的 S3 存储桶时使用以下命令绕过代理服务器:

export no_proxy = mybucket.s3.us-west-2.amazonaws.com

注意:请确保将“us-west-2”替换为您的区域。

IAM 策略

  1. 打开 AWS IAM 控制台
  2. 选择用于从实例访问 S3 存储桶的 IAM 用户或角色。
  3. 选择 Permissions(权限)视图。
  4. 确保与 IAM 用户或角色关联的用户具有访问 Amazon S3 的正确权限。有关更多信息,请参阅如何限制 Amazon S3 存储桶对特定 IAM 角色的访问使用用户策略控制对存储桶的访问

AWS CLI 配置

配置 AWS CLI并设置默认的 AWS 区域。使用 aws configure 命令指定默认的区域名称。或者,如果出现以下情况,您可以在每个 AWS CLI 命令中设置 --region 选项:

  • 您不想指定默认区域
    -或者-
  • 您想覆盖默认区域

这篇文章对您有帮助吗?


您是否需要账单或技术支持?