設定服務連線政策

本頁面說明網路管理員如何設定服務連線政策,以便自動連線至代管服務。

事前準備

必要的角色

如要取得設定網路及建立服務連線政策所需的權限,請要求管理員為您授予專案的 Compute Network Admin (roles/compute.networkAdmin) 身分與存取權管理角色。

如要搭配共用虛擬私有雲使用服務連線政策,您必須為服務和主機專案中的網路連線服務帳戶授予角色。建立服務連線政策時,系統會自動設定這些服務帳戶,但您可以手動移除這些角色。如果您看到缺少權限的錯誤訊息,服務帳戶管理員可能需要再次授予角色。詳情請參閱「為共用虛擬私人雲端設定服務帳戶」。

建立服務連線政策

服務連線政策可讓您授權指定的服務類別,在供應端和用戶端虛擬私有雲網路之間建立 Private Service Connect 連線。

您最多可以為每個服務類別、區域和 VPC 網路組合建立一項政策。政策會針對該特定組合指定服務連線自動化功能。

設定政策時,您會選取一或多個子網路。這些子網路會用來為透過政策建立的端點分配 IP 位址。子網路的堆疊類型會影響可部署的端點 IP 版本。如果多個連線政策位於相同的區域,您可以在這些政策中重複使用相同的子網路。

舉例來說,如果您想在三個不同區域使用兩項服務的服務連線自動化功能,請建立六個政策。您至少可以使用三個子網路,每個區域一個。

建立服務連線政策後,您只能更新政策的子網路、連線限制和服務執行個體範圍。如果需要更新其他欄位,請刪除政策並建立新的政策。

主控台

  1. 前往 Google Cloud 控制台的「Private Service Connect」頁面。

    前往 Private Service Connect

  2. 按一下「連線政策」分頁標籤。

  3. 按一下「建立連線政策」

  4. 輸入連線政策的「名稱」

  5. 指定服務類別。

    • 針對 Google 服務,請執行下列操作:
      1. 在「服務詳細資料」中,選取「Google 服務」
      2. 從「Service class」選單中選取服務類別。
    • 針對第三方服務,請採取下列行動:
      1. 在「服務詳細資料」中,選取「第三方服務」
      2. 在「Service class」(服務類別) 中,輸入服務類別名稱。
  6. 在「Endpoints scope」部分,選取這項政策適用的「Network」和「Region」

  7. 在「Endpoints configuration」部分,從「Subnetworks」選單中選取一或多個子網路。子網路用於為端點分配 IP 位址。

  8. 選用步驟:為政策指定連線限制。限制會決定使用此連線政策可建立的端點數量。如未指定,則代表沒有限制。

  9. 根據預設,系統會為與連線政策位於相同專案的服務執行個體建立端點。如果您已選取支援的 Google 服務,可以設定連線政策,連線至 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 或編號。對於共用虛擬私有雲網路,服務連線政策必須部署在主專案中,服務專案不支援這類政策。
  • REGION:要套用這項政策的地區。您必須為每個要自動連線服務的區域建立相同的政策。
  • SERVICE_CLASS:服務類別的產生者提供的資源 ID。
  • SUBNETS:一或多個用於為 Private Service Connect 端點分配 IP 位址的一般消費者子網路。子網路必須與服務連線政策位於相同區域。如果多個連線政策位於相同的區域,您可以在這些政策中重複使用相同的子網路。您可以使用半形逗號分隔的清單輸入多個子網路。
  • LIMIT:使用這項政策可建立的端點數量上限。如未指定,則代表沒有限制。
  • DESCRIPTION:服務連線政策的選用說明。
  • PRODUCER_INSTANCE_LOCATION:針對支援的 Google 託管服務,指定這項政策是否會自動連線至位於自訂 Resource Manager 位置的服務例項。如果設為 none,系統會建立端點,連線至與服務連線政策位於相同專案的服務執行個體 (如果是共用虛擬私有雲,則會連線至已連結的專案)。預設值為 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 中部署的服務執行個體。使用這項政策建立的 Private Service Connect 端點會從 endpoint-subnet 子網路中分配 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:服務類別的產生者提供的資源 ID。
  • 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 時,系統會自動設定服務帳戶,但您可以手動移除角色。如果您看到缺少權限的錯誤訊息,請嘗試再次授予角色。

如要授予必要角色,服務帳戶管理員可以執行下列操作。

在服務專案中將角色授予服務帳戶

gcloud

  1. Network Connectivity Service Agent 角色 (roles/networkconnectivity.serviceAgent) 授予服務專案的 Network Connectivity Service 帳戶。授予服務專案的角色。

    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. Compute Network User 角色 (roles/compute.networkUser) 授予服務專案的 Network Connectivity 服務帳戶。請執行下列任一操作。

    • 在主專案中授予角色。

      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. 將網路連線服務代理人角色 (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 替換為主機專案的專案編號。

後續步驟