設定服務連線政策

本頁面說明網路管理員如何設定服務連線政策,自動建立與代管服務的私人連線。

事前準備

必要的角色

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

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

建立服務連線政策

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

每個服務類別、區域和虛擬私有雲網路組合最多可建立一項政策。政策會規定該特定組合的服務連線自動化。

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

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

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

主控台

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

    前往 Private Service Connect

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

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

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

  5. 指定服務類別。

    • 如果是 Google 服務,請執行下列操作:
      1. 在「服務詳細資料」中,選取「Google 服務」
      2. 從「服務類別」選單中選取服務類別。
    • 如果是第三方服務,請按照下列步驟操作:
      1. 在「服務詳細資料」中,選取「第三方服務」
      2. 在「服務類別」中,輸入服務類別名稱。
  6. 在「端點範圍」部分,選取要套用這項政策的「網路」和「區域」

  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:虛擬私有雲網路專案的 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 的服務帳戶

使用服務連線政策和共用 VPC 時,系統會自動設定服務帳戶,但您可以手動移除角色。如果看到權限不足的錯誤訊息,請嘗試再次授予角色。

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

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

gcloud

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

後續步驟