Amazon Virtual Private Cloud
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

VPC 终端节点服务 (AWS PrivateLink)

您可以在 VPC 中创建自己的应用程序并将其配置为 AWS PrivateLink 支持的服务 (也称作终端节点服务)。其他 AWS 委托人可以使用 接口 VPC 终端节点,在他们的 VPC 和您的终端节点服务之间创建连接。您是服务提供商,而创建与您的服务之间的连接的 AWS 委托人是服务用户

以下是创建终端节点服务的一般步骤。

  1. 在您的 VPC 中为应用程序创建一个 网络负载均衡器,并针对提供服务的每个子网 (可用区) 对它进行配置。负载均衡器接收来自服务使用者的请求并将请求路由到您的服务。有关更多信息,请参阅 网络负载均衡器 用户指南 中的网络负载均衡器入门。我们建议您在区域内的所有可用区中配置您的服务。

  2. 创建 VPC 终端节点服务配置并指定 网络负载均衡器。

以下是一些常规步骤,通过这些步骤,服务使用者能够连接到您的服务。

  1. 向特定服务用户 (AWS 账户、IAM 用户和 IAM 角色) 授予权限,允许他们创建与您的终端节点服务之间的连接。

  2. 已被授予权限的服务用户可创建与您的服务连接的接口终端节点 (可选择在您已配置服务的每个可用区中创建)。

  3. 要激活连接,请接受接口终端节点连接请求。默认情况下将自动接受连接请求。不过,您可以配置终端节点服务的接受设置,以便手动接受所有连接请求。

权限和接受设置的组合可帮助您控制哪些服务用户 (AWS 委托人) 可以访问您的服务。例如,可以为您信任的选定委托人授予权限,并自动接受其连接请求;您还可以为范围更广的委托人组授予权限,并手动接受您信任的连接请求。

在下图中,VPC B 的账户所有者是一个服务提供商并且有一项服务正在子网 B 的实例上运行。VPC B 的所有者具有一个服务终端节点 (vpce-svc-1234),该节点已关联指向子网 B 中作为目标的实例的 网络负载均衡器。VPC A 的子网 A 中的实例使用接口终端节点访问子网 B 中的服务。

 使用接口终端节点访问终端节点服务

终端节点服务限制

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

  • 无法标记终端节点服务。

  • 终端节点服务仅支持通过 TCP 的 IPv4 流量。

  • 服务使用者必须使用特定于终端节点的 DNS 主机名才能访问终端节点服务。不支持私有 DNS。有关更多信息,请参阅 通过接口终端节点访问服务

  • 终端节点服务仅在创建它们的 AWS 区域中可用。

创建 VPC 终端节点服务配置

您可使用 Amazon VPC 控制台或命令行创建终端节点服务配置。在开始前,请确保您已在 VPC 中为您的服务创建一个或多个 网络负载均衡器。有关更多信息,请参阅 网络负载均衡器 用户指南 中的网络负载均衡器入门

您可以在配置中选择指定,必须由您手动接受所有希望与您的服务连接的接口终端节点连接请求。您可以创建通知,在有连接请求时接收提醒。如果您不接受连接,服务使用者将无法访问您的服务。

注意

无论接受设置如何,服务用户还必须具有与您的服务建立连接的权限

使用控制台创建终端节点服务

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

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

  3. 对于 Associate Network Load Balancers,选择要与终端节点服务关联的 网络负载均衡器。

  4. 对于 Require acceptance for endpoint,选中此复选框以手动接受针对您的服务的连接请求。如果未选中此选项,终端节点连接会被自动接受。

  5. 选择 Create service

在创建终端节点服务配置后,您必须添加权限以使服务使用者能够创建到您服务的接口终端节点。

使用 AWS CLI 创建终端节点服务

  • 使用 create-vpc-endpoint-service-configuration 命令并为您的 网络负载均衡器 指定一个或多个 ARN。您可以选择指定是否需要接受针对您的服务的连接。

    aws ec2 create-vpc-endpoint-service-configuration --network-load-balancer-arns arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/nlb-vpce/e94221227f1ba532 --acceptance-required
    { "ServiceConfiguration": { "ServiceType": [ { "ServiceType": "Interface" } ], "NetworkLoadBalancerArns": [ "arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/nlb-vpce/e94221227f1ba532" ], "ServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-03d5ebb7d9579a2b3", "ServiceState": "Available", "ServiceId": "vpce-svc-03d5ebb7d9579a2b3", "AcceptanceRequired": true, "AvailabilityZones": [ "us-east-1d" ], "BaseEndpointDnsNames": [ "vpce-svc-03d5ebb7d9579a2b3.us-east-1.vpce.amazonaws.com" ] } }

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

为您的终端节点服务添加和删除权限

在创建终端节点服务配置后,您可以控制哪些服务使用者能够创建连接您服务的接口终端节点。服务使用者是 IAM 委托人—IAM 用户、IAM 角色和 AWS 账户。要为委托人添加或删除权限,您需要其 Amazon 资源名称 (ARN)。

  • 对于 AWS 账户 (以及该账户中的所有委托人),ARN 的格式为 arn:aws:iam::aws-account-id:root

  • 对于特定的 IAM 用户,ARN 的格式为 arn:aws:iam::aws-account-id:user/user-name

  • 对于特定的 IAM 角色,ARN 的格式为 arn:aws:iam::aws-account-id:role/role-name

使用控制台添加或删除权限

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. 选择 ActionsAdd principals to whitelist

  4. 指定要为其添加权限的委托人的 ARN。要添加更多委托人,请选择 Add principal。要删除委托人,请选择相应条目旁边的交叉图标。

    注意

    指定 * 可为所有委托人添加权限。这将使所有 AWS 账户中的所有委托人都能够创建到您终端节点服务的接口终端节点。

  5. 选择 Add to Whitelisted principals

  6. 要删除委托人,请在列表中选择该委托人,然后选择 Delete

使用 AWS CLI 添加和删除权限

  1. 要为您的终端节点服务添加权限,请使用 modify-vpc-endpoint-service-permissions 命令并使用 --add-allowed-principals 参数为委托人添加一个或多个 ARN。

    aws ec2 modify-vpc-endpoint-service-permissions --service-id vpce-svc-03d5ebb7d9579a2b3 --add-allowed-principals '["arn:aws:iam::123456789012:root"]'
  2. 要查看您已为终端节点服务添加的权限,请使用 describe-vpc-endpoint-service-permissions 命令。

    aws ec2 describe-vpc-endpoint-service-permissions --service-id vpce-svc-03d5ebb7d9579a2b3
    { "AllowedPrincipals": [ { "PrincipalType": "Account", "Principal": "arn:aws:iam::123456789012:root" } ] }
  3. 要为您的终端节点服务删除权限,请使用 modify-vpc-endpoint-service-permissions 命令并使用 --remove-allowed-principals 参数为委托人删除一个或多个 ARN。

    aws ec2 modify-vpc-endpoint-service-permissions --service-id vpce-svc-03d5ebb7d9579a2b3 --remove-allowed-principals '["arn:aws:iam::123456789012:root"]'

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 修改终端节点服务权限

更改 网络负载均衡器 和接受设置

您可以通过更改与终端节点服务关联的 网络负载均衡器 以及更改是否需要接受连接到您的终端节点服务的请求来修改终端节点服务配置。

如果已有接口终端节点附加到您的终端节点服务,则您无法取消关联负载均衡器。

使用控制台更改终端节点服务的网络负载均衡器

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. 选择 ActionsAssociate/Disassociate Network Load Balancers

  4. 根据需要选择或取消选择负载均衡器,然后选择 Save

使用控制台修改接受设置

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. 选择 ActionsModify endpoint acceptance setting

  4. 选择或取消选择 Require acceptance for endpoint,然后选择 Modify

使用 AWS CLI 修改负载均衡器和接受设置

  1. 要更改终端节点服务的负载均衡器,请使用 modify-vpc-endpoint-service-configuration 命令并使用 --add-network-load-balancer-arn--remove-network-load-balancer-arn 参数;例如:

    aws ec2 modify-vpc-endpoint-service-configuration --service-id vpce-svc-09222513e6e77dc86 --remove-network-load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/net/nlb-vpce/e94221227f1ba532
  2. 要更改是否需要接受,请使用 modify-vpc-endpoint-service-configuration 命令并指定 --acceptance-required--no-acceptance-required;例如:

    aws ec2 modify-vpc-endpoint-service-configuration --service-id vpce-svc-09222513e6e77dc86 --no-acceptance-required

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 修改终端节点服务配置

接受和拒绝接口终端节点连接请求

在您创建终端节点服务后,您为其添加了权限的服务使用者能够创建连接您服务的接口终端节点。有关创建接口终端节点的更多信息,请参阅接口 VPC 终端节点 (AWS PrivateLink)

如果您已指定需要接受连接请求,则必须手动接受或拒绝对您的终端节点服务的接口终端节点连接请求。在接受接口终端节点后,它将变为 available 状态。

您可以在接口终端节点连接处于 available 状态之后拒绝该连接。

使用控制台接受或拒绝连接请求

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. Endpoint Connections 选项卡列出了目前有待您批准的终端节点连接。选择终端节点,选择 Actions,然后选择 Accept endpoint connection request 以接受连接或选择 Reject endpoint connection request 以拒绝连接。

使用 AWS CLI 接受或拒绝连接请求

  1. 要查看待接受的终端节点连接,请使用 describe-vpc-endpoint-connections 命令并按 pendingAcceptance 状态筛选。

    aws ec2 describe-vpc-endpoint-connections --filters Name=vpc-endpoint-state,Values=pendingAcceptance
    { "VpcEndpointConnections": [ { "VpcEndpointId": "vpce-0c1308d7312217abc", "ServiceId": "vpce-svc-03d5ebb7d9579a2b3", "CreationTimestamp": "2017-11-30T10:00:24.350Z", "VpcEndpointState": "pendingAcceptance", "VpcEndpointOwner": "123456789012" } ] }
  2. 要接受终端节点连接请求,请使用 accept-vpc-endpoint-connections 命令并指定终端节点 ID 和终端节点服务 ID。

    aws ec2 accept-vpc-endpoint-connections --service-id vpce-svc-03d5ebb7d9579a2b3 --vpc-endpoint-ids vpce-0c1308d7312217abc
  3. 要拒绝终端节点连接请求,请使用 reject-vpc-endpoint-connections 命令。

    aws ec2 reject-vpc-endpoint-connections --service-id vpce-svc-03d5ebb7d9579a2b3 --vpc-endpoint-ids vpce-0c1308d7312217abc

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 接受和拒绝终端节点连接

为终端节点服务创建和管理通知

您可以创建通知以针对在附加到您的终端节点服务的终端节点上发生的特定事件接收提醒。例如,您可以在接受或拒绝针对您的终端节点服务的终端节点请求时收到电子邮件。要创建通知,您必须将 Amazon SNS 主题与通知关联。您可以订阅 SNS 主题以在终端节点事件发生时收到电子邮件通知。有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南

用于通知的 Amazon SNS 主题必须具有允许 Amazon VPC 终端节点服务代表您发布通知的主题策略。确保在您的主题策略中包含以下语句。有关更多信息,请参阅 Amazon Simple Notification Service 开发人员指南 中的管理对您的 Amazon SNS 主题的访问

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "vpce.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:region:account:topic-name" } ] }

为终端节点服务创建通知

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. 选择 NotificationsCreate Notification

  4. 选择要与通知关联的 SNS 主题的 ARN。

  5. 对于 Events,选择要接收其通知的终端节点事件。

  6. 选择 Create Notification

在创建通知后,您可以更改与通知关联的 SNS 主题,也可以为通知指定不同的终端节点事件。

为终端节点服务修改通知

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. 选择 NotificationsActionsModify Notification

  4. 指定 SNS 主题的 ARN 并根据需要选择或取消选择终端节点事件。

  5. 选择 Modify Notification

如果您不再需要某通知,则可删除它。

删除通知

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择您的终端节点服务。

  3. 依次选择 NotificationsActionsDelete Notification

  4. 选择 Yes, Delete

使用 AWS CLI 创建和管理通知

  1. 要为终端节点服务创建通知,请使用 create-vpc-endpoint-connection-notification 命令并指定 SNS 主题的 ARN、要通知的事件以及终端节点服务的 ID;例如:

    aws ec2 create-vpc-endpoint-connection-notification --connection-notification-arn arn:aws:sns:us-east-2:123456789012:VpceNotification --connection-events Connect Accept Delete Reject --service-id vpce-svc-1237881c0d25a3abc
    { "ConnectionNotification": { "ConnectionNotificationState": "Enabled", "ConnectionNotificationType": "Topic", "ServiceId": "vpce-svc-1237881c0d25a3abc", "ConnectionEvents": [ "Reject", "Accept", "Delete", "Connect" ], "ConnectionNotificationId": "vpce-nfn-008776de7e03f5abc", "ConnectionNotificationArn": "arn:aws:sns:us-east-2:123456789012:VpceNotification" } }
  2. 要查看您的通知,请使用 describe-vpc-endpoint-connection-notifications 命令:

    aws ec2 describe-vpc-endpoint-connection-notifications
  3. 要更改通知的 SNS 主题或终端节点事件,请使用 modify-vpc-endpoint-connection-notification 命令;例如:

    aws ec2 modify-vpc-endpoint-connection-notification --connection-notification-id vpce-nfn-008776de7e03f5abc --connection-events Accept Reject --connection-notification-arn arn:aws:sns:us-east-2:123456789012:mytopic
  4. 要删除通知,请使用 delete-vpc-endpoint-connection-notifications 命令:

    aws ec2 delete-vpc-endpoint-connection-notifications --connection-notification-ids vpce-nfn-008776de7e03f5abc

对连接信息使用代理协议

网络负载均衡器 向您的应用程序 (您的服务) 提供源 IP 地址。当服务使用者通过接口终端节点将流量发送至您的服务时,向您的应用程序提供的源 IP 地址是 网络负载均衡器 节点的私有 IP 地址而不是服务使用者的 IP 地址。

如果您需要服务使用者的 IP 地址及其对应的接口终端节点 ID,请在您的负载均衡器上启用代理协议并从代理协议标头中获取客户端 IP 地址。有关更多信息,请参阅 网络负载均衡器 用户指南 中的代理协议

删除终端节点服务配置

您可以删除终端节点服务配置。删除该配置不会删除在您的 VPC 中托管的应用程序或关联的负载均衡器。

在删除终端节点服务配置之前,您必须拒绝已附加到该服务的任何 availablepending-acceptance VPC 终端节点。有关更多信息,请参阅 接受和拒绝接口终端节点连接请求

使用控制台删除终端节点服务配置

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

  2. 在导航窗格中,选择 Endpoint Services,然后选择该服务。

  3. 依次选择 ActionsDelete

  4. 选择 Yes, Delete

使用 AWS CLI 删除终端节点服务配置

使用 适用于 Windows PowerShell 的 AWS 工具 或 API 删除终端节点服务配置