本頁面說明如何在虛擬私有雲網路中設定私人服務存取權。
私人服務存取權會以虛擬私有雲端對等互連的方式運作,可連結您的虛擬私有雲端網路與 Cloud SQL 執行個體所在的底層 Google Cloud 虛擬私有雲端網路。私人連線可讓您 VPC 網路中的 VM 執行個體和您存取的服務,透過內部 IP 位址進行專屬通訊。VM 執行個體不需要網際網路存取權或外部 IP 位址,就可以透過私人服務存取權存取可用的服務。
事前準備
對於用於私人 IP 連線的每個 VPC 網路,Cloud SQL 都需要私人服務存取權。如要管理私人服務存取權連線,使用者必須具備下列 IAM 權限:
compute.networks.list
compute.addresses.create
compute.addresses.list
servicenetworking.services.addPeering
如果您沒有這些權限,就可能會收到權限不足的錯誤訊息。
如果您使用共用虛擬私有雲網路,則必須同時符合下列條件:
- 將使用者新增至主機專案。
- 在主機專案中,將相同的四項權限指派給該使用者。
- 授予使用者
compute.globalAddresses.list
IAM 權限。
設定 Cloud SQL 的私人服務存取權
私人服務存取權設定程序分為兩個部分:
- 選取現有 IP 範圍或分配新的 IP 範圍。
您也可以選擇讓 Google 為您分配範圍。在這種情況下,Google 會自動分配前置長度為 /20 的 IP 範圍,並使用「default-ip-range」做為名稱。
如果您要在多個區域或為不同資料庫類型建立執行個體,則必須為每個區域或資料庫類型提供至少 /24 範圍的 IP 位址。這包括其他應用程式,例如 Filestore 或 Memorystore。對於新的區域或資料庫類型,Cloud SQL 必須有可用的 /24 範圍。
- 建立從虛擬私有雲網路到基礎服務供應商網路的私人連線。
分配 IP 位址範圍
主控台
-
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
- 選取要使用的 VPC 網路。
- 選取 [Private service connection] (私人服務連線)
分頁標籤。 - 選取「Allocated IP ranges for services」(已分配的服務 IP 範圍)
分頁標籤。 - 按一下「分配 IP 範圍」
。 - 在分配範圍的「名稱」
中,指定 google-managed-services-VPC_NETWORK_NAME
,其中VPC_NETWORK_NAME
是您要連線的虛擬私人雲端網路名稱 (例如google-managed-services-default
)。「說明」為選填項目。 - 選取「自訂」
選項,然後以 CIDR 標記法輸入要分配的 IP 位址範圍。 - 按一下 [Allocate] (分配)
,建立已分配範圍。
gcloud
執行下列其中一個步驟:
- 如要指定位址範圍與前置字串長度 (子網路遮罩),請使用
addresses
和prefix-length
標記。例如,如要分配 CIDR 區塊192.168.0.0/16
,請將位址指定為192.168.0.0
,並將前置字串長度指定為16
。 - 如要單純指定前置字串長度 (子網路遮罩),請使用
prefix-length
標記。如果省略位址範圍, Google Cloud會自動選取虛擬私人雲端網路中未使用的位址範圍。下列範例會以16
位元前置字串長度選取未使用的 IP 位址範圍。
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
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 資源。
套用變更
如要在 Google Cloud 專案中套用 Terraform 設定,請完成下列各節中的步驟。
準備 Cloud Shell
- 啟動 Cloud Shell。
-
設定要套用 Terraform 設定的預設 Google Cloud 專案。
您只需為每個專案執行這個指令一次,而且可以在任何目錄中執行。
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
如果您在 Terraform 設定檔中設定明確的值,系統就會覆寫環境變數。
準備目錄
每個 Terraform 設定檔都必須有自己的目錄 (也稱為根模組)。
-
在 Cloud Shell 中建立目錄,並在該目錄中建立新檔案。檔案名稱必須包含
.tf
副檔名,例如main.tf
。在本教學課程中,檔案稱為main.tf
。mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
如果您正在參考教學課程,可以複製各個章節或步驟中的程式碼範例。
將範例程式碼複製到新建立的
main.tf
中。您可以視需要從 GitHub 複製程式碼。如果 Terraform 程式碼片段是端對端解決方案的一部分,建議您採用這種做法。
- 查看並修改要套用至環境的範例參數。
- 儲存變更。
-
初始化 Terraform。這項操作只需對每個目錄執行一次。
terraform init
如要使用最新版的 Google 供應器,請視需要加入
-upgrade
選項:terraform init -upgrade
套用變更
-
檢查設定,並確認 Terraform 要建立或更新的資源是否符合您的預期:
terraform plan
視需要修正設定。
-
執行下列指令,並在提示中輸入
yes
,即可套用 Terraform 設定:terraform apply
等待 Terraform 顯示「Apply complete!」(套用完成) 訊息。
- 開啟 Google Cloud 專案即可查看結果。在 Google Cloud 控制台中,前往 UI 中的資源,確認 Terraform 已建立或更新這些資源。
刪除變更
如要移除先前透過 Terraform 設定套用的資源,請執行下列指令,並在提示中輸入 yes
:
terraform destroy
建立私人連線
控制台
-
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
- 選取要使用的 VPC 網路。
- 選取 [Private service connection] (私人服務連線) 分頁標籤。
- 選取「Private connections to services」(私人服務連線) 分頁。
- 按一下 [Create connection] (建立連線),在網路與服務生產端之間建立私人連線。
- 針對「Assigned allocation」(已指派的分配範圍),選取尚未由其他服務供應商使用的一或多個現有分配範圍。
- 按一下 [Connect] (連線) 建立連線。
gcloud
建立私人連線。
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。
確認作業是否已經成功完成。
gcloud services vpc-peerings operations describe \ --name=OPERATION_ID
您可以在建立私人連線時指定多個分配範圍,舉例來說,如果範圍已用盡,您可以指派額外的分配範圍。服務會依照您指定的順序使用所有提供範圍的 IP 位址。
Terraform
如要建立私人連線,請使用 Terraform 資源。
service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com
格式的服務帳戶會在建立私人連線時獲得 servicenetworking.serviceAgent
角色,因為帳戶已即時佈建。
如果您看到有關專案 compute.globalAddresses.list
權限或 compute.projects.get
權限的錯誤訊息,請執行以下 gcloud
指令:
gcloud projects add-iam-policy-binding HOST_PROJECT_NAME \ --member=serviceAccount:service-HOST_PROJECT_NUMBER@service-networking.iam.gserviceaccount.com \ --role=roles/servicenetworking.serviceAgent
變更私人服務存取權設定
您可以變更私人服務連線的已分配位址範圍,而無須修改任何現有的 Cloud SQL 執行個體。如要變更現有 Cloud SQL 執行個體的私人 IP 位址,請按照這些步驟操作。
如要變更已分配的位址範圍,請按照下列步驟操作:
控制台
-
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
- 選取要使用的 VPC 網路。
- 選取 [Private service connection] (私人服務連線) 分頁標籤。
- 選取「Allocated IP ranges for services」(已分配的服務 IP 範圍) 分頁標籤。
選取要刪除的範圍名稱。
按一下「釋出」。
按一下「分配 IP 範圍」。
建立名稱相同的新範圍和新範圍
名稱很重要,因為私人連線已使用該地址名稱建立。
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 執行個體移回原始網路。
如要移動至其他 VPC 網路,請按照下列程序操作,但最後一個步驟 (將執行個體移回) 除外。在本例中,TEMPORARY_VPC_NETWORK_NAME
是新的虛擬私有雲網路。此外,請刪除舊版私人連線。刪除的私人連線可能需要幾天才會從Google Cloud 控制台消失。
如果 Cloud SQL 執行個體是託管在共用虛擬私人雲端網路中,則下列操作說明中使用的 VPC_NETWORK_NAME
變數必須是主專案的虛擬私人雲端網路名稱。如要指定含有共用虛擬私有雲網路的網路,請使用網路的完整網址,例如 projects/HOST_PROJECT/global/networks/NETWORK_NAME
。
控制台
-
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
- 建立臨時虛擬私有雲網路。
- 在臨時虛擬私有雲網路中建立 IP 分配。
- 在臨時虛擬私有雲網路中建立私人連線。
將 Cloud SQL 執行個體移至臨時 VPC 網路。
gcloud beta sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --network=projects/PROJECT_ID/global/networks/TEMPORARY_VPC_NETWORK_NAME \ --no-assign-ip
在原始網路中變更私人服務存取權設定,新增分配範圍或刪除現有範圍。
將 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