本頁面說明如何在虛擬私有雲網路中設定私人服務存取權。
私人服務存取權會以虛擬私有雲對等互連連線的方式運作,可連結您的虛擬私有雲網路與 Cloud SQL 執行個體所在的基礎 Google Cloud 虛擬私有雲網路。私人連線提供內部 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 會自動分配前置字串長度為 /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 範圍)
分頁標籤。 - 按一下「Allocate IP range」(分配 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 已建立或更新這些資源。
刪除變更
執行下列指令,並在提示中輸入 yes
,移除先前透過 Terraform 設定套用的資源:
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 資源。
建立私有連線時,系統會將 servicenetworking.serviceAgent
角色授予 service-HOST_PROJECT_NUMBER@service-networking.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.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 範圍) 分頁標籤。
選取要刪除的範圍名稱。
按一下「發布」。
按一下「Allocate IP range」(分配 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 執行個體移至臨時虛擬私有雲網路。
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