設定私人服務存取權

本頁面說明如何在虛擬私有雲網路中設定私人服務存取權

私人服務存取權會以虛擬私有雲對等互連連線的方式運作,可連結您的虛擬私有雲網路與 Cloud SQL 執行個體所在的基礎 Cloud de Confiance by S3NS 虛擬私有雲網路。私人連線提供內部 IP 位址,可讓虛擬私有雲網路中的 VM 執行個體和您存取的服務進行專屬通訊。VM 執行個體不需要網際網路存取權或外部 IP 位址,就能連線至透過私人服務存取權提供的服務。

事前準備

Cloud SQL 必須為用於私人 IP 連線的每個虛擬私有雲網路,啟用私人服務存取權。如要管理私人服務存取權連線,使用者應具備下列 IAM 權限:

  • compute.networks.list
  • compute.addresses.create
  • compute.addresses.list
  • servicenetworking.services.addPeering

如果沒有這些權限,可能會發生權限不足錯誤。

如果您使用共用虛擬私有雲端網路,則也必須:

  • 將使用者新增至主專案。
  • 在主專案中,將這四項權限指派給該使用者。
  • compute.globalAddresses.list IAM 權限授予使用者。

設定 Cloud SQL 的私人服務存取權

私人服務存取設定程序分為兩部分:

  • 選取現有 IP 位址範圍,或分配新的 IP 位址範圍。

    你也可以選擇讓 Google 為你分配範圍。在這種情況下,Google 會自動分配前置字串長度為 /24 的 IP 範圍,並以「default-ip-range」命名。

    如果您要在多個區域中建立執行個體,或是建立不同資料庫類型的執行個體,則每個區域或資料庫類型都必須有至少 /24 範圍的可用 IP 位址。包括 FilestoreMemorystore 等其他應用程式。如果是新的區域或資料庫類型,Cloud SQL 必須有免費的 /24 範圍。

  • 從虛擬私有雲網路建立與基礎服務供應商網路的私人連線。

分配 IP 位址範圍

控制台

  1. 前往 Cloud de Confiance 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 選取要使用的 VPC 網路。
  3. 選取「私人服務存取權」分頁標籤。
  4. 選取「已分配的服務 IP 範圍」分頁標籤。
  5. 按一下「Allocate IP range」(分配 IP 範圍)
  6. 在已分配範圍的「名稱」中,指定 google-managed-services-VPC_NETWORK_NAME,其中 VPC_NETWORK_NAME 是您要連線的虛擬私有雲網路名稱 (例如 google-managed-services-default)。「說明」為選填。
  7. 選取「自訂」選項,然後以 CIDR 標記法輸入要分配的 IP 位址範圍。
  8. 按一下 [Allocate] (分配),建立已分配範圍。

gcloud

執行下列其中一個步驟:

  • 如要指定位址範圍與前置字串長度 (子網路遮罩),請使用 addressesprefix-length 標記。例如,如要分配 CIDR 區塊 192.168.0.0/16,請將位址指定為 192.168.0.0,並將前置字串長度指定為 16
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --addresses=192.168.0.0 \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            
  • 如要只指定前置字串長度 (子網路遮罩),請使用 prefix-length 標記。如果省略位址範圍, Cloud de Confiance會自動選取虛擬私有雲網路中未使用的位址範圍。下列範例會以 16 位元前置字串長度選取未使用的 IP 位址範圍。
  •         gcloud compute addresses create google-managed-services-VPC_NETWORK_NAME \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=16 \
            --network=projects/PROJECT_ID/global/networks/VPC_NETWORK_NAME
            

請將 VPC_NETWORK_NAME 替換為您的虛擬私有雲網路名稱,例如 my-vpc-network

下列範例會分配 IP 範圍,讓虛擬私有雲網路 my-vpc-network 中的資源使用私人 IP 連線至 Cloud SQL 執行個體。

    gcloud compute addresses create google-managed-services-my-vpc-network \
    --global \
    --purpose=VPC_PEERING \
    --prefix-length=16 \
    --network=projects/myprojectid/global/networks/myvpcnetwork \
    --project=my-project
    

Terraform

如要分配 IP 位址範圍,請使用 Terraform 資源

resource "google_compute_global_address" "private_ip_address" {
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.peering_network.id
}

套用變更

如要在 Cloud de Confiance 專案中套用 Terraform 設定,請完成下列各節的步驟。

準備 Cloud Shell

  1. 啟動 Cloud Shell
  2. 設定要套用 Terraform 設定的預設 Cloud de Confiance 專案。

    每個專案只需要執行一次這個指令,而且可以在任何目錄中執行。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 設定檔中設定明確值,環境變數就會遭到覆寫。

準備目錄

每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。

  1. Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱的副檔名必須是 .tf,例如 main.tf。在本教學課程中,這個檔案稱為 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您正在學習教學課程,可以複製每個章節或步驟中的範例程式碼。

    將範例程式碼複製到新建立的 main.tf 中。

    視需要從 GitHub 複製程式碼。如果 Terraform 代码片段是端對端解決方案的一部分,建議您使用這個方法。

  3. 查看並修改範例參數,套用至您的環境。
  4. 儲存變更。
  5. 初始化 Terraform。每個目錄只需執行一次這項操作。
    terraform init

    如要使用最新版 Google 供應商,請加入 -upgrade 選項:

    terraform init -upgrade

套用變更

  1. 檢查設定,確認 Terraform 即將建立或更新的資源符合您的預期:
    terraform plan

    視需要修正設定。

  2. 執行下列指令,然後在提示中輸入 yes,套用 Terraform 設定:
    terraform apply

    等待 Terraform 顯示「Apply complete!」訊息。

  3. 開啟 Cloud de Confiance 專案即可查看結果。在 Cloud de Confiance 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。

刪除變更

執行下列指令,並在提示中輸入 yes,移除先前透過 Terraform 設定套用的資源:

terraform destroy

建立私人連線

控制台

  1. 前往 Cloud de Confiance 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 選取要使用的 VPC 網路。
  3. 選取 [Private service connection] (私人服務連線) 分頁標籤。
  4. 選取「Private connections to services」(私人服務連線) 分頁標籤。
  5. 按一下 [Create connection] (建立連線),在網路與服務生產端之間建立私人連線。
  6. 針對「Assigned allocation」(已指派的分配範圍),選取尚未由其他服務供應商使用的一或多個現有分配範圍。
  7. 按一下 [Connect] (連線) 建立連線。

gcloud

  1. 建立私人連線。

    gcloud services vpc-peerings connect \
    --service=servicenetworking.googleapis.com \
    --ranges=google-managed-services-VPC_NETWORK_NAME \
    --network=VPC_NETWORK_NAME \
    --project=PROJECT_ID

    這個指令會啟動長時間執行的 Cloud SQL 執行個體作業,並傳回作業 ID。

  2. 確認作業是否已經成功完成。

    gcloud services vpc-peerings operations describe \
    --name=OPERATION_ID

您可以在建立私人連線時指定多個分配範圍,舉例來說,如果範圍已用盡,您可以指派額外的分配範圍。服務會依照您指定的順序,使用所有指派範圍中的 IP 位址。

Terraform

如要建立私人連線,請使用 Terraform 資源

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.peering_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

建立私有連線時,系統會將 servicenetworking.serviceAgent 角色授予 service-HOST_PROJECT_NUMBER@service-networking.s3ns-system.iam.gserviceaccount.com 格式的服務帳戶,因為帳戶是即時佈建。

如果看到專案的 compute.globalAddresses.list 權限或 compute.projects.get 權限相關錯誤,請執行下列 gcloud 指令:

gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \
    --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.s3ns-system.iam.gserviceaccount.com \
    --role=roles/servicenetworking.serviceAgent

變更私人服務存取權設定

您可以變更私人服務連線的已分配位址範圍,而不必修改任何現有的 Cloud SQL 執行個體。如要變更現有 Cloud SQL 執行個體的私人 IP 位址,請按照這些步驟操作。

如要變更分配的地址範圍,請按照下列步驟操作:

控制台

  1. 前往 Cloud de Confiance 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 選取要使用的 VPC 網路。
  3. 選取 [Private service connection] (私人服務連線) 分頁標籤。
  4. 選取「已分配的服務 IP 範圍」分頁標籤。
  5. 選取要刪除的範圍名稱。

  6. 按一下「發布」

  7. 按一下「Allocate IP range」(分配 IP 範圍)

  8. 建立同名的新範圍和新範圍

    這個名稱很重要,因為私人連線已使用該位址名稱建立。

gcloud services vpc-peerings update \
--network=VPC_NETWORK_NAME \
--ranges=ALLOCATED_RANGES \
--service=servicenetworking.googleapis.com \
--force

變更現有 Cloud SQL 執行個體的私人 IP 位址

如要變更現有 Cloud SQL 執行個體的私人 IP 位址,請將執行個體從原始網路移至臨時 VPC 網路。接著變更執行個體原始網路的私人服務存取權設定,然後將 Cloud SQL 執行個體移回原始網路。

如要改用其他虛擬私有雲網路,請按照下列程序操作,但最後一個步驟 (將執行個體移回) 除外。在本例中,TEMPORARY_VPC_NETWORK_NAME 是新的虛擬私有雲網路。此外,請刪除舊的私人連線。刪除的私人連線可能需要幾天,才會從Cloud de Confiance 控制台中消失。

如果 Cloud SQL 執行個體是託管在共用虛擬私有雲網路中,下列操作說明中使用的 VPC_NETWORK_NAME 變數必須是主專案的虛擬私有雲網路名稱。如要指定共用虛擬私有雲網路的網路,請使用網路的完整網址,例如 projects/HOST_PROJECT/global/networks/NETWORK_NAME

控制台

  1. 前往 Cloud de Confiance 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 建立暫時性虛擬私有雲網路
  3. 在臨時虛擬私有雲網路中建立 IP 分配
  4. 在臨時虛擬私有雲網路中建立私人連線
  5. 將 Cloud SQL 執行個體移至臨時虛擬私有雲網路。

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \
      --no-assign-ip
  6. 在原始網路中變更私人服務存取權設定,新增或刪除現有分配範圍。

  7. 將 Cloud SQL 執行個體移回原始的 VPC 網路。

    gcloud beta sql instances patch INSTANCE_ID \
      --project=PROJECT_ID \
      --network=projects/PROJECT_ID/global/networks/ORIGINAL_VPC_NETWORK_NAME \
      --no-assign-ip