配置服务连接政策

本页面介绍网络管理员如何配置服务连接政策以自动与代管式服务建立专用连接。

准备工作

所需的角色

如需获得配置网络和创建服务连接政策所需的权限,请让您的管理员为您授予项目的 Compute Network Admin (roles/compute.networkAdmin) IAM 角色。

如需将服务连接政策与共享 VPC 搭配使用,您必须为 Network Connectivity 服务账号授予服务和宿主项目的角色。创建服务连接政策时,系统会自动配置这些服务账号,但您可以手动移除角色。如果您看到有关缺少权限的错误,则 Service Account Admin 可能需要再次授予角色。如需了解详情,请参阅为共享 VPC 配置服务账号

创建服务连接政策

服务连接政策可让您授权指定的服务类,以在提供方 VPC 网络和使用方 VPC 网络之间创建 Private Service Connect 连接。

您最多可以为每个服务类、区域和 VPC 网络组合创建一个政策。政策决定了该特定组合的服务连接自动化。

配置政策时,您需要选择一个或多个子网。这些子网用于为通过该政策创建的端点分配 IP 地址。子网的栈类型会影响您可以部署的端点的可能 IP 版本。如果多个连接政策共享同一区域,则您可以在这些政策中重复使用同一子网。

例如,如果您要为两个服务在三个不同区域中使用服务连接自动化,请创建六个政策。您至少可以使用三个子网,每个区域一个。

创建服务连接政策后,您只能更新该政策的子网、连接限制和服务实例范围。如果您需要更新其他字段,请删除该政策并创建一个新的服务连接政策。

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    转到 Private Service Connect

  2. 点击连接政策标签页。

  3. 点击 Create connection policy(创建连接政策)。

  4. 输入连接政策的名称

  5. 指定服务类。

    • 对于 Google 服务,请执行以下操作:
      1. 服务详情部分中,选择 Google 服务
      2. 服务类菜单中选择相应服务类。
    • 对于第三方服务,请执行以下操作:
      1. 服务详情部分中,选择第三方服务
      2. 服务类字段中,输入服务类名称。
  6. 端点范围部分中,选择此政策适用的网络区域

  7. 端点配置部分中,从子网菜单中选择一个或多个子网。子网用于为端点分配 IP 地址。

  8. 可选:为政策指定连接限制。此限制决定了可以使用此连接政策创建的端点数量。如果省略,则表示无限制。

  9. 默认情况下,系统会为与连接政策位于同一项目中的服务实例创建端点。如果您选择了支持的 Google 服务,则可以配置连接政策,以便连接到位于 Resource Manager 层次结构不同部分的服务实例。

    如需选择不同的 Resource Manager 节点,请执行以下操作:

    1. 选择自定义服务实例范围
    2. 选择包含您要连接到的服务实例的组织、文件夹和项目。
  10. 点击创建政策

gcloud

使用 service-connection-policies create 命令

gcloud network-connectivity service-connection-policies create POLICY_NAME \
    --network=NETWORK \
    --project=PROJECT_ID \
    --region=REGION \
    --service-class=SERVICE_CLASS \
    --subnets=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETS \
    --psc-connection-limit=LIMIT \
    --description=DESCRIPTION \
    --producer-instance-location=PRODUCER_INSTANCE_LOCATION \
    --allowed-google-producers-resource-hierarchy-level=LIST_OF_NODES

替换以下内容:

  • POLICY_NAME:您的服务连接政策的名称。
  • NETWORK:要应用此政策的网络。
  • PROJECT_ID:VPC 网络项目的 ID 或编号。对于共享 VPC 网络,服务连接政策必须部署在宿主项目中,在服务项目中不受支持。
  • REGION:要应用此政策的区域。要自动执行服务连接的每个区域中必须存在相同的政策。
  • SERVICE_CLASS:提供方提供的服务类资源标识符。
  • SUBNETS:用于为 Private Service Connect 端点分配 IP 地址的一个或多个常规使用方子网。子网必须与服务连接政策位于同一区域。如果多个连接政策共享同一区域,您可以在多个连接政策中重复使用同一子网。您可以在逗号分隔列表中输入多个子网。
  • LIMIT:可以使用此政策创建的端点数量上限。如果未指定,则表示无限制。
  • DESCRIPTION:服务连接政策的可选说明。
  • PRODUCER_INSTANCE_LOCATION:对于支持的 Google 托管式服务,指定此政策是否会自动连接到位于自定义 Resource Manager 位置的服务实例。如果设置为 none,则会创建端点,以连接到与服务连接政策位于同一项目中的服务实例(如果是共享 VPC,则位于关联项目)。默认值为 none。如果设置为 custom-resource-hierarchy-levels,则您可以使用 --allowed-google-producers-resource-hierarchy-level 标志指定自定义位置。
  • LIST_OF_NODES:对于支持的 Google 托管式服务,指定包含您要连接到的服务实例的 Resource Manager 节点(项目、文件夹和组织)列表。只有当 --producer-instance-location 标志设置为 custom-resource-hierarchy-levels 时,系统才会检查此字段。该列表可以包含项目、文件夹和组织的任意组合。如需查看示例列表,请参阅以下内容:
    "projects/1111111111",
    "folders/2222222222",
    "folders/3333333333",
    "organizations/4444444444"
    

例如,以下命令为 Google 发布的 google-cloud-sql 服务类创建一个服务连接政策。该政策可用于自动连接到在 shared-db-service-project 中部署的服务实例。系统会从 endpoint-subnet 子网为使用此政策创建的 Private Service Connect 端点分配 IP 地址。最多可以使用此政策创建 10 个端点。

gcloud network-connectivity service-connection-policies create google-cloud-sql-policy \
    --network=default \
    --project=my-project \
    --region=us-central1 \
    --service-class=google-cloud-sql \
    --subnets=endpoint-subnet \
    --psc-connection-limit=10 \
    --producer-instance-location=custom-resource-hierarchy-levels \
    --allowed-producer-instance-scope=projects/shared-db-service-project

Terraform

您可以使用 Terraform 资源创建服务连接政策。

# Create a VPC network
resource "google_compute_network" "default" {
  name                    = "consumer-network"
  auto_create_subnetworks = false
}

# Create a subnetwork
resource "google_compute_subnetwork" "default" {
  name          = "consumer-subnet"
  ip_cidr_range = "10.0.0.0/16"
  region        = "us-central1"
  network       = google_compute_network.default.id
}

# Create a service connection policy
resource "google_network_connectivity_service_connection_policy" "default" {
  name          = "service-connection-policy"
  location      = "us-central1"
  service_class = "gcp-memorystore-redis"
  network       = google_compute_network.default.id
  psc_config {
    subnetworks = [google_compute_subnetwork.default.id]
    limit       = 2
  }
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

API

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目的 ID。
  • REGION:您的服务连接政策的区域。
  • POLICY_NAME:您的服务连接政策的名称。
  • DESCRIPTION:您的服务连接政策的可选说明。
  • NETWORK:您的服务连接政策的网络。
  • LIMIT:可以使用此政策创建的端点数量上限。如果未指定,则表示无限制。
  • SUBNET:用于为 Private Service Connect 端点分配 IP 地址的一个或多个常规使用方子网。子网必须与服务连接政策位于同一区域。如果多个连接政策共享同一区域,则您可以在这些政策中重复使用同一子网。您可以采用英文逗号分隔列表的形式输入多个子网 URI。
  • SERVICE_CLASS:提供方提供的服务类资源标识符。
  • PRODUCER_INSTANCE_LOCATIONPRODUCER_INSTANCE_LOCATION_UNSPECIFIED(默认)或 CUSTOM_RESOURCE_HIERARCHY_LEVELS
  • LIST_OF_NODES:包含您要连接到的服务实例的 Resource Manager 节点(项目、文件夹和组织)列表。只有当 PRODUCER_INSTANCE_LOCATION 标志设置为 CUSTOM_RESOURCE_HIERARCHY_LEVELS 时,系统才会检查此字段。该列表可以包含项目、文件夹和组织的任意组合。如需查看示例列表,请参阅以下内容:
        "projects/1111111111",
        "folders/2222222222",
        "folders/3333333333",
        "organizations/4444444444"
        

HTTP 方法和网址:

POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies?serviceConnectionPolicyId=POLICY_NAME

请求 JSON 正文:

{
  "description": "DESCRIPTION",
  "network": "projects/PROJECT_ID/global/networks/NETWORK",
  "pscConfig": {
    "limit": "LIMIT",
    "subnetworks": [
      "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
    ]
    "producerInstanceLocation": "CUSTOM_RESOURCE_HIERARCHY_LEVELS",
    "allowedGoogleProducersResourceHierarchyLevel": [
      LIST_OF_NODES
    ]
  },
  "serviceClass": "SERVICE_CLASS"
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/project-id/locations/us-central1/operations/operation-1692118768698-602f91a204523-8c6a2d93-d5c20a6a",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T16:59:29.236110917Z",
    "target": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

列出服务连接政策

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    前往 Private Service Connect

  2. 点击连接政策标签页。

  3. 系统会显示连接政策。

gcloud

使用 service-connection-policies list 命令

gcloud network-connectivity service-connection-policies list \
    --region=REGION

REGION 替换为您要列出服务连接政策的区域。

API

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目的 ID。
  • REGION:要在其中列出服务连接政策的区域。

HTTP 方法和网址:

GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "serviceConnectionPolicies": [
    {
      "name": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-1",
      "createTime": "2023-08-15T15:33:54.712819865Z",
      "updateTime": "2023-08-15T15:33:54.945630882Z",
      "description": "descriptor",
      "network": "projects/project-id/global/networks/network-two",
      "serviceClass": "service-class",
      "infrastructure": "PSC",
      "pscConfig": {
        "subnetworks": [
          "projects/project-id/regions/us-west1/subnetworks/us-west1-subnet"
        ],
        "limit": "12"
      },
      "etag": "zCqDFBG1dS7B4gNdJKPR98YMUXpSrBIz0tZB_hwOIZI"
    },
    {
      "name": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-2",
      "createTime": "2023-08-15T16:59:29.230257109Z",
      "updateTime": "2023-08-15T16:59:29.508994923Z",
      "description": "descriptor",
      "network": "projects/project-id/global/networks/custom-test",
      "serviceClass": "service-class",
      "infrastructure": "PSC",
      "pscConfig": {
        "subnetworks": [
          "projects/project-id/regions/us-central1/subnetworks/subnet-one"
        ],
        "limit": "25"
      },
      "etag": "nB603i61nRGMZpNjWoWMM6wRzsgM8QN9C9v5QFLyOa8"
    }
  ]
}

描述服务连接政策

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    前往 Private Service Connect

  2. 点击连接政策标签页。

  3. 点击要查看的服务连接政策。

gcloud

使用 service-connection-policies describe 命令

gcloud network-connectivity service-connection-policies describe POLICY_NAME \
    --region=REGION

请替换以下内容:

  • POLICY_NAME:您要描述的服务连接政策的名称。
  • REGION:您要描述的服务连接政策的区域。

API

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目的 ID。
  • REGION:您的服务连接政策的区域。
  • POLICY_NAME:要描述的服务连接政策的名称。

HTTP 方法和网址:

GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
  "createTime": "2023-08-15T16:59:29.230257109Z",
  "updateTime": "2023-08-15T16:59:29.508994923Z",
  "description": "description",
  "network": "projects/project-id/global/networks/custom-test",
  "serviceClass": "gcp-memorystore-redis",
  "infrastructure": "PSC",
  "pscConfig": {
    "subnetworks": [
      "projects/project-id/regions/us-central1/subnetworks/subnet-one"
    ],
    "limit": "25"
  },
  "etag": "nB603i61nRGMZpNjWoWMM6wRzsgM8QN9C9v5QFLyOa8"
}

更新服务连接政策

您可以更新服务连接政策的子网、连接限制和服务实例范围。

如果您从服务连接政策中移除子网,则以下情况适用:

  • 现有 Private Service Connect 端点不会受影响。
  • 新端点不使用已移除的子网。

如果您更新服务连接政策的连接限制,则以下情况适用:

  • 现有端点不会受影响。
  • 如果新连接限制小于与政策关联的现有端点数,则服务连接自动化会阻止创建使用此政策的新端点。
  • 如果新连接限制大于与政策关联的现有端点数,则可以创建先前被连接限制阻止的端点。

如果您更新服务连接政策但未指定连接限制,则更新后的政策没有连接限制。

如果您更新服务连接政策的服务实例范围,现有端点不会受影响。如需更新范围,请使用 Google Cloud 控制台或 API。

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    前往 Private Service Connect

  2. 点击连接政策标签页。

  3. 点击要修改的服务连接政策。

  4. 点击修改

  5. 更新服务连接政策。

  6. 点击更新政策

gcloud

使用 service-connection-policies update 命令

gcloud network-connectivity service-connection-policies update POLICY_NAME \
    --region=REGION \
    --project=PROJECT_ID \
    --subnets=SUBNETS \
    --psc-connection-limit=LIMIT
  • POLICY_NAME:您的服务连接政策的名称。
  • REGION:服务连接政策的区域。您无法更新政策的区域。
  • PROJECT_ID:政策项目的项目 ID 或编号。
  • SUBNETS:用于为 Private Service Connect 端点分配 IP 地址的一个或多个常规使用方子网。子网必须与服务连接政策位于同一区域。如果多个连接政策共享同一区域,您可以在多个连接政策中重复使用同一子网。您可以在逗号分隔列表中输入多个子网。
  • LIMIT:可以使用此政策创建的端点数量上限。如果未指定,则表示无限制。

API

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目的 ID。
  • REGION:您的服务连接政策的区域。您无法更新政策的区域。
  • POLICY_NAME:您的服务连接政策的名称。
  • LIMIT:可以使用此政策创建的端点数量上限。如果未指定,则表示无限制。
  • SUBNET:用于为 Private Service Connect 端点分配 IP 地址的一个或多个常规使用方子网。子网必须与服务连接政策位于同一区域。如果多个连接政策共享同一区域,则您可以在这些政策中重复使用同一子网。您可以采用英文逗号分隔列表的形式输入多个子网 URI。
  • NETWORK:您的服务连接政策的网络。

HTTP 方法和网址:

PATCH https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME

请求 JSON 正文:

{
  "pscConfig": {
    "limit": "LIMIT",
    "subnetworks": [
      "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
    ]
  },
  "network": "projects/PROJECT_ID/global/networks/NETWORK"
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/project-id/locations/us-central1/operations/operation-1692118768698-602f91a204523-8c6a2d93-d5c20a6a",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T16:59:29.236110917Z",
    "target": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

删除服务连接政策

如果您对服务的使用结束或者希望停止自动连接,则可以删除服务连接政策。如果有活跃的 Private Service Connect 连接与政策相关联,则系统会阻止删除政策。在删除服务连接政策之前,请通过停用所有关联的服务实例删除所有活跃连接。

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    前往 Private Service Connect

  2. 点击连接政策标签页。

  3. 选择要删除的服务连接政策,然后点击删除

gcloud

使用 service-connection-policies delete 命令

gcloud network-connectivity service-connection-policies delete POLICY_NAME \
    --region=REGION

请替换以下内容:

  • POLICY_NAME:您要删除的服务连接政策的名称。
  • REGION:您要删除的服务连接政策的区域。

API

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的项目的 ID。
  • REGION:您的服务连接政策的区域。
  • POLICY_NAME:要删除的服务连接政策的名称。

HTTP 方法和网址:

DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/serviceConnectionPolicies/POLICY_NAME

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/project-id/locations/us-central1/operations/operation-1692128792549-602fb6f98194a-e0275435-36edc095",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.networkconnectivity.v1.OperationMetadata",
    "createTime": "2023-08-15T19:46:32.605032867Z",
    "target": "projects/project-id/locations/us-central1/serviceConnectionPolicies/policy-name",
    "verb": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

为共享 VPC 配置服务账号

当您将服务连接政策与共享 VPC 搭配使用时,系统会自动配置服务账号,但您可以手动移除这些角色。如果您看到有关缺少权限的错误,请尝试再次授予角色。

如需授予所需角色,Service Account Admin 可以执行以下操作。

向服务项目中的服务账号授予角色

gcloud

  1. 向服务项目的 Network Connectivity 服务账号授予 Network Connectivity Service Agent 角色 (roles/networkconnectivity.serviceAgent)。授予服务项目的角色。

    gcloud projects add-iam-policy-binding SERVICE_PROJECT_NUMBER \
        --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
        --role=roles/networkconnectivity.serviceAgent
    

    SERVICE_PROJECT_NUMBER 替换为服务项目的项目编号。

  2. 向服务项目的 Network Connectivity 服务账号授予 Compute Network User 角色 (roles/compute.networkUser)。执行下列其中一项操作。

    • 授予宿主项目中的角色。

      gcloud projects add-iam-policy-binding HOST_PROJECT_NUMBER \
          --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
          --role=roles/compute.networkUser
      

      HOST_PROJECT_NUMBER 替换为宿主项目的项目编号。

    • 授予宿主项目中与服务连接政策关联的每个子网的角色。对每个子网使用以下命令。

      gcloud compute networks subnets add-iam-policy-binding SUBNET \
          --member=serviceAccount:service-SERVICE_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
          --role=roles/compute.networkUser \
          --region=REGION \
          --project=HOST_PROJECT_NUMBER
      

      请替换以下内容:

      • SUBNET:与服务连接政策关联的子网的名称。
      • REGION:子网的区域。

向宿主项目中的服务账号授予角色

gcloud

  1. 向宿主项目的 Network Connectivity 服务账号授予 Network Connectivity Service Agent 角色 (roles/networkconnectivity.serviceAgent)。授予宿主项目的角色。

    gcloud projects add-iam-policy-binding HOST_PROJECT_NUMBER \
        --member=serviceAccount:service-HOST_PROJECT_NUMBER@gcp-sa-networkconnectivity.iam.gserviceaccount.com \
        --role=roles/networkconnectivity.serviceAgent
    

    HOST_PROJECT_NUMBER 替换为宿主项目的项目编号。

后续步骤