Amazon Virtual Private Cloud
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

网关 VPC 终端节点

要创建和设置网关终端节点,请执行以下常规步骤:

  1. 指定要在其中创建终端节点的 VPC 以及要连接到的服务。服务由前缀列表 (某个区域的服务的名称和 ID) 标识。前缀列表 ID 使用 pl-xxxxxxx 格式,前缀列表名称使用 com.amazonaws.<region>.<service> 格式。使用前缀列表名称 (服务名称) 创建终端节点。

  2. 向终端节点附加终端节点策略,该策略允许您对要连接的部分或所有服务进行访问。有关更多信息,请参阅 使用 VPC 终端节点策略

  3. 指定一个或多个路由表来控制 VPC 与其他服务之间的流量的路由。使用这些路由表的子网可以访问终端节点,随后通过终端节点将来自这些子网中的实例的流量路由到服务。

在下图中,子网 2 中的实例可通过网关终端节点访问 Amazon S3。

 使用网关终端节点访问 Amazon S3

您可以在单个 VPC 中创建多个终端节点 (例如,针对多项服务)。您还可以为单项服务创建多个终端节点,并使用不同的路由表通过同一服务的多个子网强制执行不同的访问策略。

创建终端节点后,您可以修改已附加到终端节点的终端节点策略,并添加或删除终端节点使用的路由表。

使用网关终端节点不会发生任何额外费用。采用标准的数据传输和资源使用计费方式。有关定价的更多信息,请参阅 Amazon EC2 定价

网关终端节点路由

在创建或修改终端节点时,您将指定用于通过终端节点访问服务的 VPC 路由表。路由会自动添加到每个路由表中,同时会添加一个指定服务的前缀列表 ID 的目的地 (pl-xxxxxxxx) 以及一个具有终端节点 ID 的目标 (vpce-xxxxxxxx);例如:

目的地 目标
10.0.0.0/16 本地
pl-1a2b3c4d vpce-11bb22cc

前缀列表 ID 从逻辑上代表服务使用的公有 IP 地址的范围。与指定路由表关联的子网中的所有实例都会自动使用终端节点访问服务;未与指定路由表关联的子网不使用终端节点。这使您能够将其他子网中的资源与您的终端节点分离。

要查看服务的当前公有 IP 地址范围,您可以使用 describe-prefix-lists 命令 中的 AWS IP 地址范围

注意

服务的公有 IP 地址的范围可能会不时更改。在根据服务的当前 IP 地址范围决定路由目标或做其他决策之前,请考虑产生的影响。

以下规则适用:

  • 您可以在一个路由表中拥有针对不同服务的多个终端节点路由,并且可以在不同的路由表中拥有针对同一服务的多个终端节点路由,但不能在一个路由表中拥有针对同一服务的多个终端节点路由。例如,如果您的 VPC 中有两个针对 Amazon S3 的终端节点,则您不能同时对这两个终端节点使用相同的路由表。

  • 您无法通过使用路由表 API 或 Amazon VPC 控制台中的“路由表”页面来在您的路由表中显式添加、修改或删除终端节点路由。您只能通过将路由表与终端节点关联来添加终端节点路由。要更改与终端节点关联的路由表,您可以修改终端节点

  • 在您从终端节点删除路由表关联 (通过修改终端节点) 或删除终端节点时,将自动删除终端节点路由。

我们使用与流量匹配的最明确路由以判断数据流的路由方式 (最长前缀匹配)。如果您的路由表中有针对指向 Internet 网关的所有 Internet 流量 (0.0.0.0/0) 的现有路由,则终端节点路由将优先于目标设定为服务的所有流量,因为服务的 IP 地址范围比 0.0.0.0/0 更具体。所有其他 Internet 流量 (包括目标设定为其他区域内的服务的流量) 将流向 Internet 网关。

但是,如果您有针对指向 Internet 网关或 NAT 设备的 IP 地址范围的现有、更具体的路由,则这些路由将优先。如果您有目标设定为与服务所使用的 IP 地址范围相同的 IP 地址范围的现有路由,则您的路由将优先。

示例:路由表中的终端节点路由

在此方案中,您的路由表中有一个针对指向 Internet 网关的所有 Internet 流量 (0.0.0.0/0) 的现有路由。来自子网的目标设定为其他 AWS 服务的任何流量将使用 Internet 网关。

目的地 目标
10.0.0.0/16 本地
0.0.0.0/0 igw-1a2b3c4d

创建指向支持的 AWS 服务的终端节点,并将您的路由表与该终端节点关联。将为路由表自动添加一个终端节点路由,其目的地为 pl-1a2b3c4d (假设这表示您已为其创建终端节点的服务)。现在,来自子网的目标设定为同一区域内的 AWS 服务的任何流量将流向该终端节点,而不是流向 Internet 网关。所有其他 Internet 流量 (包括目标设定为其他服务的流量和目标设定为其他区域内的 AWS 服务的流量) 将流向 Internet 网关。

目的地 目标
10.0.0.0/16 本地
0.0.0.0/0 igw-1a2b3c4d
pl-1a2b3c4d vpce-11bb22cc

示例:针对终端节点调整路由表

在此方案中,您已将路由表配置为允许子网中的实例通过 Internet 网关与 Amazon S3 存储桶进行通信。您已添加一个目的地为 54.123.165.0/24 (假设这是 Amazon S3 中的当前 IP 地址范围) 且目标为 Internet 网关的路由。然后创建一个终端节点,并将此路由表与该终端节点关联。这会自动将一个终端节点路由添加到路由表。然后使用 describe-prefix-lists 命令查看 Amazon S3 的 IP 地址范围。该范围为 54.123.160.0/19 (它没有指向 Internet 网关的范围那么具体)。这意味着,目标设定为 54.123.165.0/24 IP 地址范围的任何流量将继续使用 Internet 网关,而不使用终端节点 (前提是这仍是 Amazon S3 的公有 IP 地址范围)。

目的地 目标
10.0.0.0/16 本地
54.123.165.0/24 igw-1a2b3c4d
pl-1a2b3c4d vpce-11bb22cc

要确保通过终端节点来路由目标设定为相同区域内的 Amazon S3 的所有流量,您必须调整路由表中的路由。为此,您可以删除针对 Internet 网关的路由。现在,针对相同区域内的 Amazon S3 的所有流量将使用终端节点,并且与您的路由表关联的子网为私有子网。

目标 目标
10.0.0.0/16 本地
pl-1a2b3c4d vpce-11bb22cc

网关终端节点限制

要使用网关终端节点,您需要了解当前限制:

  • 您无法在网络 ACL 的出站规则中使用前缀列表 ID 来允许或拒绝至终端节点中所指定服务的出站流量。如果您的网络 ACL 规则限制流量,则必须为服务指定 CIDR 块 (IP 地址范围)。但是,您可在出站安全组规则中使用前缀列表 ID。有关更多信息,请参阅 安全组

  • 仅在同一地区内支持终端节点。无法在 VPC 和其他区域内的服务之间创建终端节点。

  • 无法标记终端节点。

  • 终端节点仅支持 IPv4 流量。

  • 无法将终端节点从一个 VPC 转移到另一个 VPC,也无法将终端节点从一项服务转移到另一项服务。

  • 您可以为每个 VPC 创建的终端节点的数量有限制。有关更多信息,请参阅 VPC 终端节点

  • 无法将终端节点连接扩展到 VPC 之外。VPC 中的 VPN 连接、VPC 对等连接、AWS Direct Connect 连接或 ClassicLink 连接的另一端的资源不能使用终端节点来与终端节点服务中的资源通信。

  • 您必须在您的 VPC 中启用 DNS 解析,或者,如果您使用自己的 DNS 服务器,请确保将针对所需服务 (如 Amazon S3) 的 DNS 请求正确解析为 AWS 维护的 IP 地址。有关更多信息,请参阅 Amazon Web Services 一般参考中的 在您的 VPC 中使用 DNSAWS IP 地址范围

有关特定于 Amazon S3 的规则和限制的更多信息,请参阅 Amazon S3 的终端节点

有关特定于 DynamoDB 的规则和限制的更多信息,请参阅 Amazon DynamoDB 的终端节点

创建网关终端节点

要创建终端节点,您必须指定要在其中创建终端节点的 VPC 和要连接到的服务。

使用控制台创建网关终端节点

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 EndpointsCreate Endpoint

  3. 对于 Service Name,请选择要连接到的服务。要创建连接到 DynamoDB 或 Amazon S3 的网关终端节点,请确保 Type 列指示 Gateway

  4. 填写以下信息,然后选择 Create endpoint

    • 对于 VPC,选择要在其中创建终端节点的 VPC。

    • 对于 Configure route tables,选择终端节点要使用的路由表。我们将自动向选定的路由表添加一个路由,以将目标设定为服务的流量指向终端节点。

    • 对于 Policy,选择策略的类型。您可以保留默认选项 Full Access 来允许对服务进行完全访问。或者,您可以选择 Custom,然后使用 AWS 策略生成器创建自定义策略,或在策略窗口中键入您自己的策略。

在创建终端节点之后,您可以查看有关它的信息。

使用控制台查看有关网关终端节点的信息

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Endpoints 并选择您的终端节点。

  3. 要查看有关终端节点的信息,请选择 Summary。您可以获取 Service 框中的服务的前缀列表名称。

  4. 要查看有关终端节点所使用的路由表的信息,请选择 Route Tables

  5. 要查看附加到终端节点的 IAM 策略,请选择 Policy

    注意

    Policy 选项卡仅显示终端节点策略。它不会为有权使用终端节点的 IAM 用户显示有关 IAM 策略的任何信息,也不会显示服务特定的策略;例如,S3 存储桶策略。

使用 AWS CLI 创建和查看终端节点

  1. 使用 describe-vpc-endpoint-services 命令获取可用服务的列表。在返回的输出中,记录要连接到的服务的名称。serviceType 字段指示是通过接口终端节点还是网关终端节点连接到服务。

    aws ec2 describe-vpc-endpoint-services
    { "serviceDetailSet": [ { "serviceType": [ { "serviceType": "Gateway" } ...
  2. 要创建网关终端节点 (例如,连接到 Amazon S3 的网关终端节点),请使用 create-vpc-endpoint 命令并指定 VPC ID、服务名称和将使用终端节点的路由表。(可选) 您可以使用 --policy-document 参数指定自定义策略来控制对服务的访问。如果未使用参数,我们将附加一个允许完全访问服务的默认策略。

    aws ec2 create-vpc-endpoint --vpc-id vpc-1a2b3c4d --service-name com.amazonaws.us-east-1.s3 --route-table-ids rtb-11aa22bb
  3. 使用 describe-vpc-endpoints 命令描述您的终端节点。

    aws ec2 describe-vpc-endpoints

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 描述可用服务

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 创建 VPC 终端节点

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 描述您的 VPC 终端节点

修改您的安全组

如果与您的实例关联的 VPC 安全组限制出站流量,则您必须添加一条规则来允许目标设定为 AWS 服务的流量离开您的实例。

为网关终端节点添加出站规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups

  3. 选择您的 VPC 安全组,选择 Outbound Rules 选项卡,然后选择 Edit

  4. Type 列表中选择流量类型,并输入端口范围 (如果需要)。例如,如果您使用实例从 Amazon S3 中检索对象,请从 Type 列表中选择 HTTPS

  5. Destination 列表显示可用的 AWS 服务的前缀列表 ID 和名称。选择 AWS 服务的前缀列表 ID,或键入此 ID。

  6. 选择 Save

有关安全组的更多信息,请参阅 您的 VPC 的安全组

使用命令行或 API 获取 AWS 服务的前缀列表名称、ID 和 IP 地址范围

修改网关终端节点

您可以通过更改或删除网关终端节点的策略并添加或删除终端节点所使用的路由表来修改网关终端节点。

更改与网关终端节点关联的策略

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Endpoints 并选择您的终端节点。

  3. 选择 ActionsEdit policy

  4. 您可以选择 Full Access 来允许完全访问。或者,选择 Custom,然后使用 AWS 策略生成器创建自定义策略,或在策略窗口中键入您自己的策略。完成此操作后,选择 Save

    注意

    策略更改可能需要几分钟才能生效。

添加或删除网关终端节点所使用的路由表

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Endpoints 并选择您的终端节点。

  3. 选择 ActionsManage route tables

  4. 选择或取消选择所需的路由表,然后选择 Save

使用 AWS CLI 修改网关终端节点

  1. 使用 describe-vpc-endpoints 命令获取您的网关终端节点的 ID。

    aws ec2 describe-vpc-endpoints
  2. 以下示例使用 modify-vpc-endpoint 命令将路由表 rtb-aaa222bb 与网关终端节点关联,然后重置策略文档。

    aws ec2 modify-vpc-endpoint --vpc-endpoint-id vpce-1a2b3c4d --add-route-table-ids rtb-aaa222bb --reset-policy

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 修改 VPC 终端节点