Python 2 不再受社区支持。我们建议您将 Python 2 应用迁移到 Python 3

连接到共享 VPC 网络

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

概括来讲,您必须执行以下步骤:

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

优势

在服务项目中创建连接器的优点如下:

  • 隔离:每个连接器都有专用带宽,不受其他服务项目中的连接器带宽用量的影响。如果您的某个服务遇到流量高峰,或者您需要确保每个服务项目都不受其他服务项目的连接器使用影响,则此方法非常适用。
  • 退款:连接器产生的费用与包含连接器的服务项目相关联。这可以简化退款操作。
  • 安全性:允许您遵循“最小权限原则”。连接器必须获得它们在您的共享 VPC 网络中需要访问的资源的访问权限。通过在服务项目中创建连接器,您可以使用防火墙规则来限制项目中的服务可以访问的内容。
  • 团队独立性:减少对宿主项目管理员的依赖。团队可以创建和管理与其服务项目关联的连接器。具有 Compute Engine Security Admin 角色或自定义 Identity and Access Management (IAM) 角色并对宿主项目启用了 compute.firewalls.create 权限的用户仍必须管理连接器的防火墙规则。

如果这些注意事项不适合您的使用场景,请参阅在宿主项目中使用连接器配置共享 VPC 的优势

添加防火墙规则以允许 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 访问通道访问的资源,请为这些防火墙规则指定目标,或参阅创建防火墙规则缩小范围。请注意,如果指定了目标,则每次创建新的 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 服务帐号不存在,请在服务项目中启用 Serverless VPC Access API,然后重试:

    gcloud services enable vpcaccess.googleapis.com

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

创建子网

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

后续步骤