在共享 VPC 服务项目中配置连接器

如果您的组织使用共享 VPC,则您可以在服务项目或宿主项目中设置无服务器 VPC 访问通道连接器。本指南介绍如何在服务项目中设置连接器。

如果您需要在宿主项目中设置连接器,请参阅在宿主项目中配置连接器。 如需了解每种方法的优点,请参阅连接到共享 VPC 网络

大体而言,您必须执行以下步骤:

  1. 添加防火墙规则以允许所需的 IP 范围
  2. 授予权限
  3. 创建子网
  4. 配置无服务器 VPC 访问通道页面中,完成以下各部分中的步骤:

准备工作

注意:无服务器 VPC 访问通道与 URL Fetch 服务不兼容。在开始之前,请停用 URL Fetch 默认值并停止对 urlfetch 库的任何显式使用。

添加防火墙规则以允许 IP 范围

要执行这些步骤,您必须在宿主项目上拥有以下角色之一:

您必须创建防火墙规则,以允许来自以下 IP 范围的请求访问连接器以及被连接器访问:

  • NAT 范围
    • 107.178.230.64/26
    • 35.199.224.0/19
  • 健康检查范围
    • 130.211.0.0/22
    • 35.191.0.0/16
    • 108.170.220.0/23

这些范围由 Cloud Run、Cloud Functions 和 App Engine 标准环境的底层 Google 基础架构使用。来自这些 IP 的所有请求都源自 Google 基础架构,这可确保每个 Cloud Run、Cloud Functions 和 App Engine 服务/函数/应用都只与其所连接的 VPC 连接器进行通信。

对于简单配置,请应用规则,以允许连接到共享 VPC 网络的任何服务项目中的无服务器服务将请求发送到网络中的任何资源。

如需应用这些规则:

  1. 运行以下三个命令以设置规则,允许来自无服务器环境的请求访问网络中的所有 VPC 连接器:

    gcloud compute firewall-rules create serverless-to-vpc-connector \
    --allow tcp:667,udp:665-666,icmp \
    --source-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-to-serverless \
    --allow tcp:667,udp:665-666,icmp \
    --destination-ranges 107.178.230.64/26,35.199.224.0/19 \
    --direction=EGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK
    gcloud compute firewall-rules create vpc-connector-health-checks \
    --allow tcp:667 \
    --source-ranges 130.211.0.0/22,35.191.0.0/16,108.170.220.0/23 \
    --direction=INGRESS \
    --target-tags vpc-connector \
    --network=VPC_NETWORK

    其中 VPC_NETWORK 是要将连接器附加到的 VPC 网络。

  2. 在您的 VPC 网络上创建入站规则,以允许来自连接器的请求:

    gcloud compute firewall-rules create vpc-connector-requests \
    --allow tcp,udp,icmp \
    --direction=INGRESS \
    --source-tags vpc-connector \
    --network=VPC_NETWORK

    此规则授予 VPC 连接器对网络中每个资源的访问权限。如需限制您的无服务器环境可以使用无服务器 VPC 访问通道访问的资源,请为这些防火墙规则指定目标

为特定连接器创建防火墙规则

如果按照添加防火墙规则以允许 IP 范围中的流程操作,则防火墙规则将应用于所有连接器,包括当前的连接器和未来创建的连接器。如果您不希望这样,而是希望仅为特定的连接器创建规则,您可以限制规则的范围,使其仅应用于这些连接器。

要将规则的范围限制为特定连接器,您可以使用以下机制之一:

  • 网络标记。每个连接器都有两个网络标记:vpc-connectorvpc-connector-REGION-CONNECTOR_NAME。 使用后一种格式将防火墙规则的范围限制为特定的连接器。
  • IP 范围。仅可对出站规则使用此机制,因为它不适用于入站流量。您可以使用连接器子网的 IP 范围将防火墙规则范围限制为单个 VPC 连接器。

向服务项目中的服务账号授予权限

对于将使用 VPC 连接器的每个服务项目,Shared VPC Admin 必须向服务项目 cloudservicesvpcaccess 服务账号授予宿主项目中的 Compute Network User 角色 (compute.networkUser)。

如需授予角色:

  1. 使用以下命令:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-vpcaccess.iam.gserviceaccount.com"
    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --role "roles/compute.networkUser" \
    --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
  2. 如果 @gcp-sa-vpcaccess 服务账号不存在,请在服务项目中启用无服务器 VPC 访问通道 API,然后重试:

    gcloud services enable vpcaccess.googleapis.com

如果您不想向这些服务账号授予整个共享 VPC 网络的访问权限,而希望只授予特定子网的访问权限,则可以改为仅向这些服务账号授予特定子网的这些角色

创建子网

使用共享 VPC 时,Shared VPC Admin 必须为每个连接器创建一个子网。按照添加子网文档的说明将 /28 子网添加到共享 VPC 网络。此子网必须与将使用连接器的无服务器服务位于同一区域。

后续步骤