佈建共用虛擬私有雲
共用虛擬私有雲可讓您將「主專案」中的虛擬私有雲 (VPC) 網路子網路匯出至同一個機構中的其他服務專案。服務專案中的執行個體可以使用主專案共用子網路中的網路連線。本頁說明如何設定及使用共用 VPC,包括機構的必要管理準備工作。
共用虛擬私有雲支援匯出任何堆疊類型的子網路。
如要瞭解如何卸離服務專案或完全移除共用虛擬私有雲設定,請參閱「取消佈建共用虛擬私有雲」。
在 API 和指令列介面中,共用虛擬私有雲也稱為「XPN」。
配額、限制和符合資格的資源
開始前,請務必瞭解共用虛擬私有雲和身分與存取權管理,具體來說:
記住與共用虛擬私人雲端相關的配額與限制。
務必瞭解可參與的資源。
請確認您已啟用主專案和所有服務專案的 Compute Engine API 和計費功能,並且這些專案都會連結至主專案。
執行貴機構準備作業
準備機構時,請注意下列資訊。
管理員和身分與存取權管理
執行貴機構準備作業、設定共用虛擬私人雲端主專案以及使用共用虛擬私人雲端網路,這些工作需要至少三種不同管理層級的身分與存取權管理角色。如要進一步瞭解各個角色的詳細資訊,以及選用角色的相關資訊,請參閱共用虛擬私人雲端總覽中的「管理員和身分與存取權管理」一節。
機構政策限制
機構政策限制可在專案、資料夾或機構層級保護共享虛擬私有雲資源。以下各節將說明各項政策。
避免主專案遭到誤刪
主專案遭到誤刪時,會導致其中附加的所有服務專案中斷。如果您將某專案設為共用虛擬私有雲主專案,系統會為這個專案啟用名為「防刪除鎖定」的特殊鎖定功能。只要防刪除鎖定仍在有效,就能防止專案遭到意外刪除。當您為主專案解除共用虛擬私有雲設定時,系統則會自動移除防刪除鎖定功能。
具有 orgpolicy.policyAdmin
角色的使用者可以定義機構層級政策限制 (constraints/compute.restrictXpnProjectLienRemoval),將移除防刪除鎖定的權限限制在下列角色:
- 機構層級具備
roles/owner
或roles/resourcemanager.lienModifier
的使用者 - 使用者具備機構層級的
resourcemanager.projects.get
和resourcemanager.projects.updateLiens
權限的自訂角色
這麼做可有效避免非機構層級 roles/owner
角色或機構層級 resourcemanager.lienModifier
角色的專案擁有者,意外刪除共用虛擬私有雲主專案。如要進一步瞭解與 resourcemanager.lienModifier
角色相關聯的權限,請參閱 Resource Manager 說明文件中的「設定專案防刪除鎖定功能」一節。
機構政策會套用至機構中的所有專案,因此您只需按照以下步驟操作一次,即可限制防刪除鎖定的移除作業。
以具備
orgpolicy.policyAdmin
角色的機構管理員或身分與存取權管理主體的身分,進行gcloud
驗證。將ORG_ADMIN
替換為機構管理員名稱:gcloud auth login ORG_ADMIN
依照這個指令的輸出結果判定您的機構 ID 編號。
gcloud organizations list
執行這個指令,強制執行貴機構的
compute.restrictXpnProjectLienRemoval
政策,將ORG_ID
替換為上一步判定的編號。gcloud resource-manager org-policies enable-enforce \ --organization ORG_ID compute.restrictXpnProjectLienRemoval
以機構管理員身分完成上述工作後,請登出
gcloud
,以利保障帳戶安全。gcloud auth revoke ORG_ADMIN
限制主機專案附件
根據預設,共用虛擬私人雲端管理員可以將非主機專案連結至相同機構中的任何主專案。機構政策管理員可以限制主辦人專案的組合,以便在資料夾或機構中附加非主辦人專案或非主辦人專案。詳情請參閱 constraints/compute.restrictSharedVpcHostProjects
限制條件。
限制主專案中服務專案可使用的子網路
根據預設,在您設定共用虛擬私有雲後,如果服務專案中的 IAM 主體具備適當的 IAM 權限,便可使用主專案中的任何子網路。除了管理個別使用者的權限,機構政策管理員也可以設定政策,定義特定專案或資料夾或機構中的專案可存取的子網路組合。詳情請參閱 constraints/compute.restrictSharedVpcSubnetworks
限制。
避免主機專案意外關閉
取消共用虛擬私有雲網路的帳單連結,可能會導致所有依附資源 (包括服務專案) 完全關閉。為避免共用虛擬私有雲因計費功能未啟用或遭停用而意外關閉,請確保主專案與其帳單帳戶之間的連結安全無虞。
指派共用虛擬私人雲端管理員
機構管理員可將共用虛擬私人雲端管理員和專案身分與存取權管理員角色授予一或多位身分與存取權管理主體。
專案 IAM 管理員角色會授予共用虛擬私人雲端管理員權限,讓他們可以共用所有現有和日後的子網路,而非單一子網路。這類授權會在機構或資料夾層級 (而非專案層級) 建立繫結,因此必須在機構中定義身分與存取權管理員,不能只在專案中定義。
主控台
在機構層級授予共用虛擬私人雲端管理員角色
以機構管理員身分登入 Google Cloud 控制台,然後前往「IAM」頁面。
從專案選單中選取您的機構。
如果您選取的是專案,「角色」選單就會顯示不正確的項目。
按一下「新增」。
輸入「新主體」的電子郵件地址。
在「Roles」(角色)選單中,依序選取「Compute Engine」>「Compute Shared VPC Admin」(Compute 共用虛擬私人雲端管理員)。
按一下 [Add another role] (新增其他角色)。
在「Roles」下拉式選單中,依序選取「Resource Manager」 >「Project IAM Admin」。
按一下 [儲存]。
在資料夾層級授予共用虛擬私有雲端管理員角色
以機構管理員身分登入 Google Cloud 控制台,然後前往「IAM」頁面。
從專案選單中選取您的資料夾。
如果選取專案或機構,您會看到錯誤的選項。
按一下「新增」。
輸入「新主體」的電子郵件地址。
在「Select a role」(請選擇角色) 下方,依序選取「Compute Engine」>「Compute Shared VPC Admin」(Compute 共用虛擬私人雲端管理員)。
按一下 [Add another role] (新增其他角色)。
在「Roles」選單中,依序選取「Resource Manager」>「Project IAM Admin」。
按一下 [Add another role] (新增其他角色)。
在「Roles」選單中,依序選取「Resource Manager」>「Compute Network Viewer」。
按一下 [儲存]。
gcloud
以機構管理員身分驗證
gcloud
,將ORG_ADMIN
替換為機構管理員名稱:gcloud auth login ORG_ADMIN
依照這個指令的輸出結果判定您的機構 ID 編號。
gcloud organizations list
如要在機構層級指派共用虛擬私人雲端管理員角色,請執行下列操作:
將共用虛擬私人雲端管理員角色套用至現有的身分與存取權管理實體。將
ORG_ID
替換為上一步產生的機構 ID 編號,並將EMAIL_ADDRESS
替換為您要授予共用虛擬私人雲端管理員角色之使用者的電子郵件地址。gcloud organizations add-iam-policy-binding ORG_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/compute.xpnAdmin"
gcloud organizations add-iam-policy-binding ORG_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/resourcemanager.projectIamAdmin"
如要在資料夾層級指派共用虛擬私人雲端管理員角色,請執行下列操作:
查看這個指令的輸出,判定資料夾 ID。
gcloud resource-manager folders list --organization=ORG_ID
將共用虛擬私人雲端管理員角色套用至現有的身分與存取權管理實體。將
ORG_ID
替換為上一步產生的機構 ID 編號,並將EMAIL_ADDRESS
替換為您要授予共用虛擬私人雲端管理員角色之使用者的電子郵件地址。gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/compute.xpnAdmin"
gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/resourcemanager.projectIamAdmin"
gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \ --member='user:EMAIL_ADDRESS' \ --role="roles/compute.networkViewer"
完成執行工作後,請在
gcloud
指令列工具中撤銷機構管理員帳戶權杖,以利保障帳戶安全。gcloud auth revoke ORG_ADMIN
API
如要在機構層級指派共用虛擬私人雲端管理員角色,請按照下列程序操作:
判定機構 ID 編號。
POST https://cloudresourcemanager.googleapis.com/v1/organizations
描述並記錄現有機構政策的詳細資料。
POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:getIamPolicy
將
ORG_ID
替換為機構 ID。指派共用虛擬私人雲端管理員角色。
POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:setIamPolicy { "bindings": [ ...copy existing bindings { "members": [ "user:EMAIL_ADDRESS" ], "role": "roles/compute.xpnAdmin" }, { "members": [ "user:EMAIL_ADDRESS" ], "role": "roles/resourcemanager.projectIamAdmin" } ], "etag": "ETAG", "version": 1, ...other existing policy details }
更改下列內容:
ORG_ID
:包含您要授予共用虛擬私有雲管理員角色的使用者所在機構的 ID。EMAIL_ADDRESS
:使用者的電子郵件地址。ETAG
:您在說明現有政策時取得的專屬 ID。這可避免同時傳送多個更新要求時發生衝突。
如要在資料夾層級指派共用虛擬私人雲端管理員角色,請使用以下要求:
判定機構 ID 編號。
POST https://cloudresourcemanager.googleapis.com/v1/organizations
找出資料夾 ID。
GET https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/ORG_ID
將
ORG_ID
替換為機構 ID。說明並記錄現有資料夾政策的詳細資料。
POST https://cloudresourcemanager.googleapis.com/v2/folders/FOLDER_ID:getIamPolicy
將
FOLDER_ID
替換為資料夾 ID。指派共用虛擬私人雲端管理員角色。
POST https://cloudresourcemanager.googleapis.com/v1/organizations/FOLDER_ID:setIamPolicy { "bindings": [ ...copy existing bindings { "members": [ "user:EMAIL_ADDRESS" ], "role": "roles/compute.xpnAdmin" }, { "members": [ "user:EMAIL_ADDRESS" ], "role": "roles/resourcemanager.projectIamAdmin" }, { "members": [ "user:EMAIL_ADDRESS" ], "role": "roles/compute.networkViewer" } ], "etag": "ETAG", "version": 1, ...other existing policy details }
更改下列內容:
FOLDER_ID
:包含您要授予共用虛擬私有雲管理員角色的使用者所在機構的 ID。EMAIL_ADDRESS
:使用者的電子郵件地址。ETAG
:您在說明現有政策時取得的專屬 ID。這可避免同時傳送多個更新要求時發生衝突。
詳情請參閱
folders.setIamPolicy
方法。
設定共用虛擬私有雲
本節所述的所有工作都必須由共用虛擬私人雲端管理員執行。
啟用主專案
機構內的共用虛擬私人雲端管理員可以按照下列程序,將專案指定為共用虛擬私人雲端「主專案」,但須遵守配額與限制。如果共用虛擬私人雲端管理員具備機構的專案建立者角色和專案刪除者角色 (roles/resourcemanager.projectCreator
和 roles/resourcemanager.projectDeleter
),也可以建立及刪除專案。
啟用主專案時,專案的網路資源不會自動與服務專案共用。您需要將服務專案附加至主專案,才能與服務專案共用所選網路和子網路。
主控台
如果您尚未擁有 Compute 共用虛擬私人雲端管理員角色 (roles/compute.xpnAdmin
),就無法在 Google Cloud 控制台中查看這個頁面。
在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
以共用虛擬私有雲管理員身分登入。
在專案選擇工具中選取您要啟用並做為共用虛擬私人雲端主專案的專案。
按一下 [Set up Shared VPC] (設定共用虛擬私人雲端)。
在下一個頁面中,按一下 [Enable host project] (啟用主專案) 下方的 [Save & continue] (儲存並繼續)。
在「選取子網路」 之下,執行下列其中一項操作:
- 如果您需要將主專案虛擬私人雲端網路中目前和日後的所有子網路,與後續步驟中指定的服務專案和服務專案管理員共用,請按一下 [Share all subnets (project-level permissions)] (共用所有子網路 (專案層級權限))。
- 如果您需要將主專案虛擬私人雲端網路中的部分子網路與服務專案和服務專案管理員共用,請按一下 [Individual subnets (subnet-level permissions)] (個別子網路 (子網路層級權限)),然後選取「要共用的子網路」。
按一下 [Continue] (繼續)。
系統會顯示下一個畫面。在「Project names」(專案名稱) 中,指定要連結至主專案的服務專案。請注意,附加服務專案時不會定義任何服務專案管理員;這會在下一步中進行。
在「Select users by role」(依角色選取使用者) 部分,新增服務專案管理員。系統會將共用子網路的
compute.networkUser
身分與存取權管理角色授予這些使用者。只有服務專案管理員可以在共用虛擬私人雲端主專案的子網路中建立資源。按一下 [儲存]。
gcloud
以共用虛擬私人雲端管理員身分驗證
gcloud
,將SHARED_VPC_ADMIN
替換為共用虛擬私有雲端管理員名稱:gcloud auth login SHARED_VPC_ADMIN
針對您要設為主專案的專案啟用共用虛擬私有雲,將
HOST_PROJECT_ID
替換為專案 ID。gcloud compute shared-vpc enable HOST_PROJECT_ID
請確認該專案列為貴機構的主專案,將
ORG_ID
替換為您的機構 ID (由gcloud organizations list
決定)。gcloud compute shared-vpc organizations list-host-projects ORG_ID
如果您只需要啟用主專案,可以登出
gcloud
,保障共用虛擬私人雲端管理員帳戶憑證。否則請略過這個步驟,並繼續執行附加服務專案的步驟。gcloud auth revoke SHARED_VPC_ADMIN
API
使用具有共用 VPC 管理員權限的憑證,為專案啟用共用 VPC。
POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
將
HOST_PROJECT_ID
替換為將成為共用虛擬私人雲端主專案的專案 ID。詳情請參閱
projects.enableXpnHost
方法。確認專案列為主專案。
POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
將
HOST_PROJECT_ID
替換為共用虛擬私人雲端主專案的 ID。詳情請參閱
projects.listXpnHosts
方法。
Terraform
您可以使用 Terraform 資源啟用主機專案。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
附加服務專案
您必須將服務專案附加到主專案,其服務專案管理員才能使用共用虛擬私有雲。共用虛擬私有雲管理員必須執行下列步驟,才能完成附加作業。
一個服務專案只能附加到一個主專案,但一個主專案可支援附加多個服務專案。詳情請參閱「虛擬私有雲配額」頁面中的共用虛擬私有雲專屬限制。
主控台
- 以共用虛擬私有雲端管理員身分登入 Google Cloud 主控台。
- 在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
前往「共用虛擬私有雲」頁面 - 按一下「Attached projects」(附加的專案) 分頁。
- 在「Attached projects」(附加的專案) 分頁之下,按一下 [Attach projects] (附加專案) 按鈕。
- 在「Project names」(專案名稱) 部分中,勾選要附加的服務專案對應的核取方塊。請注意,附加服務專案時不會定義任何服務專案管理員;這會在下一步中進行。
- 在「VPC network permissions」(虛擬私有雲網路權限) 部分中,選取主體會取得
compute.networkUser
角色的角色。根據虛擬私人雲端網路共用模式,系統會授予 IAM 使用者主體整個主專案或主專案中特定子網路的「網路使用者」角色。這些主體在各自的服務專案中稱為服務專案管理員。 - 在「VPC network sharing」(VPC 網路共用模式) 部分中,選取下列其中一項操作:
- 如果您需要將主專案虛擬私人雲端網路中目前和日後的所有子網路,與所有服務專案和服務專案管理員共用,請按一下 [Share all subnets (project-level permissions)] (共用所有子網路 (專案層級權限))。
- 如果您需要將主專案虛擬私人雲端網路中的特定子網路,與服務專案和服務專案管理員共用,請按一下 [Individual subnets (subnet-level permissions)] (個別子網路 (子網路層級權限)),然後選取「要共用的子網路」。
- 按一下 [儲存]。
gcloud
如果您尚未以共用虛擬私人雲端管理員身分驗證
gcloud
,請立即執行。將SHARED_VPC_ADMIN
替換為共用虛擬私有雲端管理員名稱:gcloud auth login SHARED_VPC_ADMIN
將服務專案附加到先前啟用的主專案。將
SERVICE_PROJECT_ID
替換為服務專案的專案 ID,並將HOST_PROJECT_ID
替換為主專案的專案 ID。gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \ --host-project HOST_PROJECT_ID
確認服務專案已附加成功。
gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
您也可以選擇列出附加到主專案的服務專案:
gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
如果您只需要附加服務專案,可以登出
gcloud
,以利保障共用虛擬私人雲端管理員帳戶憑證。否則,請略過這個步驟,然後為所有子網路或部分子網路定義服務專案管理員。gcloud auth revoke SHARED_VPC_ADMIN
API
將服務專案附加到共用虛擬私有雲主專案。
POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource { "xpnResource": { "id": "SERVICE_PROJECT" } }
更改下列內容:
HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SERVICE_PROJECT
:要附加的服務專案 ID。
確認服務專案已附加至主專案。
GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
更改下列內容:
HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。
詳情請參閱
projects.getXpnResources
方法。
Terraform
您可以使用 Terraform 資源附加服務專案。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
所有子網路的服務專案管理員
共用虛擬私有雲端管理員可以將服務專案中的 IAM 主體指派為「服務專案管理員」,授予主專案中所有子網路的存取權。這類的服務專案管理員會取得「整個主專案」的 compute.networkUser
角色。也就是說,這類的管理員可存取主專案中所有已定義和日後的子網路。
在主專案中具備 compute.networkUser
角色的使用者,可以查看附加服務專案中的所有子網路。
主控台
如要使用Google Cloud 主控台,將服務專案中的身分與存取權管理員定義為服務專案管理員,並授予主專案中所有子網路的存取權,請參閱「附加服務專案」一節。
gcloud
下列步驟說明如何將服務專案中的身分與存取權管理主體定義為服務專案管理員,並授予主專案中所有子網路的存取權。執行下列步驟前,您必須啟用主專案,並將服務專案連結至主專案。
如果您尚未以共用虛擬私人雲端管理員身分驗證
gcloud
,請立即執行。將SHARED_VPC_ADMIN
替換為共用虛擬私有雲端管理員名稱:gcloud auth login SHARED_VPC_ADMIN
建立政策繫結,將服務專案中的身分與存取權管理主體設為服務專案管理員。接著將
HOST_PROJECT_ID
替換為主專案的專案 ID,並將SERVICE_PROJECT_ADMIN
替換為服務專案管理員使用者的電子郵件地址。gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member "user:SERVICE_PROJECT_ADMIN" \ --role "roles/compute.networkUser"
您可以變更
--member
引數的格式,指定不同類型的使用者:- 使用
group:
即可將 Google 網上論壇 (按電子郵件地址識別) 指定為實體。 - 使用
domain:
指定 Google 網域為主要對象。 - 使用
serviceAccount:
指定服務帳戶。如要進一步瞭解這項用途,請參閱「將服務帳戶設為服務專案管理員」。
- 使用
重複進行先前的步驟,分別定義其他每一個服務專案管理員。
定義服務專案管理員後,請登出
gcloud
,保障共用虛擬私人雲端管理員帳戶憑證。gcloud auth revoke SHARED_VPC_ADMIN
API
說明並記錄現有專案政策的詳細資料。您需要現有的政策和
etag
值。POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
將
HOST_PROJECT_ID
替換為共用虛擬私人雲端主專案的 ID。建立政策繫結,將服務專案中的身分與存取權管理主體指定為服務專案管理員。
POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy { "bindings": [ ...copy existing bindings { "members": [ PRINCIPAL, ...additional principals ], "role": "roles/compute.networkUser" }, ], "etag": "ETAG", "version": 1, ...other existing policy details }
更改下列內容:
HOST_PROJECT_ID
:包含共用虛擬私有雲網路的主機專案 ID。PRINCIPAL
:與角色相關聯的身分,例如使用者、群組、網域或服務帳戶。詳情請參閱 Resource Manager 說明文件中的members
欄位。ETAG
:您在說明現有政策時取得的專屬 ID。這可避免同時傳送多個更新要求時發生衝突。
詳情請參閱
projects.setIamPolicy
方法。
部分子網路的服務專案管理員
共用虛擬私人雲端管理員可以將服務專案中的身分與存取權管理員指派為「服務專案管理員」,並只授予主專案中部分子網路的存取權。這個選項提供更精細的方法來定義服務專案管理員,讓您只針對主專案中的部分子網路將 compute.networkUser
角色授予這些管理員。
在主專案中具備 compute.networkUser
角色的使用者,可以查看附加服務專案中的所有子網路。
主控台
如要使用Google Cloud 主控台,將服務專案中的身分與存取權管理員定義為服務專案管理員,並只授予主專案中部分子網路的存取權,請參閱「附加服務專案」一節。
gcloud
下列步驟說明如何將服務專案中的身分與存取權管理員定義為服務專案管理員,並只授予主專案中部分子網路的存取權。定義服務專案管理員前,您必須啟用主專案,以及將服務專案連結至主專案。
如果您尚未以共用虛擬私人雲端管理員身分驗證
gcloud
,請立即執行。將SHARED_VPC_ADMIN
替換為共用虛擬私有雲端管理員名稱:gcloud auth login SHARED_VPC_ADMIN
選擇主專案中服務專案管理員有權存取的子網路,並取得其目前的身分與存取權管理政策 (以 JSON 格式)。將
SUBNET_NAME
替換為主專案中的子網路名稱,並將HOST_PROJECT_ID
替換為主專案的專案 ID。gcloud compute networks subnets get-iam-policy SUBNET_NAME \ --region SUBNET_REGION \ --project HOST_PROJECT_ID \ --format json
複製上一步的 JSON 格式輸入內容,並儲存為檔案。為操作時易於辨識,這些步驟會將儲存的檔案命名為
subnet-policy.json
。修改
subnet-policy.json
檔案,並新增您要指派為服務專案管理員的 IAM 主體 (擁有子網路的存取權)。接著將每個SERVICE_PROJECT_ADMIN
替換為服務專案的身分與存取權管理使用者電子郵件地址。{ "bindings": [ { "members": [ "user:[SERVICE_PROJECT_ADMIN]", "user:[SERVICE_PROJECT_ADMIN]" ], "role": "roles/compute.networkUser" } ], "etag": "[ETAG_STRING]" }
請注意,您可以在政策中指定不同類型的 IAM 授權對象 (除了使用者外):
- 將
user:
替換為group:
,即可指定 Google 網上論壇 (按電子郵件地址識別) 為實體。 - 將
user:
替換為domain:
,即可指定 Google 網域為實體。 - 使用
serviceAccount:
指定服務帳戶。有關這個用途的詳情,請參閱「將服務帳戶設為服務專案管理員」。
- 將
使用
subnet-policy.json
檔案內容更新子網路的政策繫結。gcloud compute networks subnets set-iam-policy SUBNET_NAME subnet-policy.json \ --region SUBNET_REGION \ --project HOST_PROJECT_ID
定義服務專案管理員後,請登出
gcloud
,保障共用虛擬私人雲端管理員帳戶憑證。gcloud auth revoke SHARED_VPC_ADMIN
API
說明並記錄現有子網路政策的詳細資料。您需要現有的政策和
etag
值。GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/getIamPolicy
更改下列內容:
HOST_PROJECT_ID
:包含共用虛擬私有雲網路的主機專案 ID。SUBNET_NAME
:要共用的子網路名稱。SUBNET_REGION
:子網路所在的地區。
更新子網路政策,授予服務專案管理員主專案中子網路的存取權。
POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy { "bindings": [ ...copy existing bindings { "members": [ PRINCIPAL, ...additional principals ], "role": "roles/compute.networkUser" }, ], "etag": "ETAG", "version": 1, ...other existing policy details }
更改下列內容:
ETAG
:您在說明現有政策時取得的專屬 ID。這可避免同時傳送多個更新要求時發生衝突。HOST_PROJECT_ID
:包含共用虛擬私有雲網路的主機專案 ID。PRINCIPAL
:與角色相關聯的身分,例如使用者、群組、網域或服務帳戶。詳情請參閱 Resource Manager 說明文件中的members
欄位。SUBNET_NAME
:要共用的子網路名稱。SUBNET_REGION
:子網路所在的地區。
詳情請參閱
subnetworks.setIamPolicy
方法。
將服務帳戶設為服務專案管理員
共用虛擬私人雲端管理員也可以將服務專案的服務帳戶定義為服務專案管理員。本節說明如何將「兩種不同類型的服務帳戶」定義為服務專案管理員:
使用者管理的服務帳戶格式為:
USER_ID
@SERVICE_PROJECT_ID
.iam.gserviceaccount.comGoogle API 服務帳戶的格式為:
SERVICE_PROJECT_NUMBER
@cloudservices.gserviceaccount.com
您可以授予主專案的所有子網路或部分子網路的服務專案管理員角色 (compute.networkUser
)。然而,為操作時易於辨識,本節僅說明如何針對主專案的所有子網路,個別將這兩種服務帳戶類型定義為服務專案管理員。
將使用者管理服務帳戶設為服務專案管理員
下列操作步驟說明如何針對共用虛擬私人雲端主專案的所有子網路,將使用者管理服務帳戶定義為服務專案管理員。
主控台
- 以共用虛擬私有雲端管理員身分登入 Google Cloud 主控台。
- 前往 Google Cloud 控制台的「Settings」頁面。
前往「設定」頁面 - 將專案變更為服務專案,其中包含必須定義為服務專案管理員的服務帳戶。
- 複製服務專案的專案 ID。為操作時易於辨識,這項程序會使用
SERVICE_PROJECT_ID
代表服務專案 ID。 - 將專案變更為共用虛擬私人雲端主專案。
- 前往 Google Cloud 控制台的「IAM」頁面。
前往「身分與存取權管理」頁面 - 按一下「新增」。
- 將
SERVICE_ACCOUNT_NAME
@SERVICE_PROJECT_ID
.iam.gserviceaccount.com新增至「Principals」欄位,並將SERVICE_ACCOUNT_NAME
替換為服務帳戶的名稱。 - 在 [Roles] (角色) 選單中選取 [Compute Engine] > [Compute Network User] (Compute Network 使用者)。
- 按一下「新增」。
gcloud
如果您尚未以共用虛擬私人雲端管理員身分驗證
gcloud
,請立即執行。將SHARED_VPC_ADMIN
替換為共用虛擬私有雲端管理員名稱:gcloud auth login SHARED_VPC_ADMIN
如果您不知道服務專案的專案 ID,可以列出貴機構的所有專案。這份清單會顯示每個專案的專案 ID。
gcloud projects list
建立政策繫結,將服務帳戶設為服務專案管理員。接著將
HOST_PROJECT_ID
替換為主專案的專案 ID,將SERVICE_ACCOUNT_NAME
替換為服務帳戶名稱,並將SERVICE_PROJECT_ID
替換為服務專案 ID。gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
API
說明並記錄現有專案政策的詳細資料。您需要現有的政策和
etag
值。POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
將
HOST_PROJECT_ID
替換為共用虛擬私人雲端主專案的 ID。建立政策繫結,將服務帳戶指定為服務專案管理員。
POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy { "bindings": [ ...copy existing bindings { "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com", ...include additional service accounts ], "role": "roles/compute.networkUser" }, ], "etag": "ETAG", "version": 1, ...other existing policy details }
更改下列內容:
HOST_PROJECT_ID
:包含共用虛擬私有雲網路的主機專案 ID。SERVICE_ACCOUNT_NAME
:服務帳戶名稱。SERVICE_PROJECT_ID
:包含服務帳戶的服務專案 ID。ETAG
:您在說明現有政策時取得的專屬 ID。這可避免同時傳送多個更新要求時發生衝突。
詳情請參閱
projects.setIamPolicy
方法。
將 Google API 服務帳戶設為服務專案管理員
下列操作步驟說明如何針對共用虛擬私人雲端主專案的所有子網路,將「Google API 服務帳戶」定義為服務專案管理員。搭配共用虛擬私人雲端使用代管執行個體群組時,您必須將 Google API 服務帳戶設為服務專案管理員,因為這類服務帳戶會執行建立執行個體等工作。如要進一步瞭解這項關係,請參閱「代管執行個體群組和 IAM」。
主控台
- 以共用虛擬私有雲端管理員身分登入 Google Cloud 主控台。
- 前往 Google Cloud 控制台的「Settings」頁面。
前往「設定」頁面 - 將專案變更為服務專案,其中包含必須定義為服務專案管理員的服務帳戶。
- 複製服務專案的專案編號。為操作時易於辨識,這項程序會使用
SERVICE_PROJECT_NUMBER
代表服務專案編號。 - 將專案變更為共用虛擬私人雲端主專案。
- 前往 Google Cloud 控制台的「IAM」頁面。
前往「身分與存取權管理」頁面 - 按一下「新增」。
- 將
SERVICE_PROJECT_NUMBER
@cloudservices.gserviceaccount.com新增至「Members」欄位。 - 在 [Roles] (角色) 選單中選取 [Compute Engine] > [Compute Network User] (Compute Network 使用者)。
- 按一下「新增」。
gcloud
如果您尚未以共用虛擬私人雲端管理員身分驗證
gcloud
,請立即執行。將SHARED_VPC_ADMIN
替換為共用虛擬私有雲端管理員名稱:gcloud auth login SHARED_VPC_ADMIN
判定服務專案的「專案編號」。為操作時易於辨識,這項程序會使用
SERVICE_PROJECT_NUMBER
代表服務專案編號。接著將SERVICE_PROJECT_ID
替換為服務專案的專案 ID。gcloud projects describe SERVICE_PROJECT_ID --format='get(projectNumber)'
如果您不知道服務專案的專案 ID,可以列出貴機構的所有專案。這份清單會顯示每個專案的專案編號。
gcloud projects list
建立政策繫結,將服務帳戶設為服務專案管理員。將
HOST_PROJECT_ID
替換為主專案的專案 ID,並將SERVICE_PROJECT_NUMBER
替換為服務專案編號。gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com" \ --role "roles/compute.networkUser"
API
說明並記錄現有專案政策的詳細資料。您需要現有的政策和
etag
值。POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
將
HOST_PROJECT_ID
替換為共用虛擬私人雲端主專案的 ID。列出專案,找出專案編號。
GET https://cloudresourcemanager.googleapis.com/v1/projects?filter=projectId="SERVICE_PROJECT_ID"
將
SERVICE_PROJECT_ID
替換為服務帳戶所在的服務專案 ID。建立政策繫結,將服務帳戶指定為服務專案管理員。
POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy { "bindings": [ ...copy existing bindings { "members": [ "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com" ], "role": "roles/compute.networkUser" }, ], "etag": "ETAG", "version": 1, ...other existing policy details }
更改下列內容:
HOST_PROJECT_ID
:包含共用虛擬私有雲網路的主機專案 ID。SERVICE_PROJECT_NUMBER
:包含服務帳戶的服務專案數量。ETAG
:您在說明現有政策時取得的專屬 ID。這可避免同時傳送多個更新要求時發生衝突。
詳情請參閱
projects.setIamPolicy
方法。
使用共用虛擬私有雲
共用虛擬私人雲端管理員完成啟用主專案、將必要的服務專案附加至該專案,以及為所有或部分主專案子網路定義服務專案管理員後,服務專案管理員就可以使用主專案的子網路,在服務專案中建立執行個體、範本和內部負載平衡器。
本節所述的所有工作都必須由服務專案管理員執行。
請注意,共用虛擬私人雲端管理員只能將 Compute Network User 角色 (roles/compute.networkUser
) 授予服務專案管理員 (針對整個主專案或其中部分子網路)。服務專案管理員也應具備管理各自服務專案所需的其他角色。舉例來說,服務專案管理員也可以是專案擁有者,或者至少擁有該專案的Compute Instance Admin 角色 (roles/compute.instanceAdmin
)。
列出可用的子網路
服務專案管理員可以列出自己已獲權使用的子網路,操作步驟如下。
主控台
在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
gcloud
如果您尚未以服務專案管理員身分驗證
gcloud
,請立即執行。將SERVICE_PROJECT_ADMIN
替換為服務專案管理員名稱:gcloud auth login SERVICE_PROJECT_ADMIN
執行以下指令,並將
HOST_PROJECT_ID
替換為共用虛擬私人雲端主專案的專案 ID:gcloud compute networks subnets list-usable --project HOST_PROJECT_ID
以下範例會列出
project-1
主機專案中可用的子網路:$ gcloud compute networks subnets list-usable --project project-1 PROJECT REGION NETWORK SUBNET RANGE SECONDARY_RANGES project-1 us-west1 net-1 subnet-1 10.138.0.0/20 project-1 us-central1 net-1 subnet-2 10.128.0.0/20 r-1 192.168.2.0/24 r-2 192.168.3.0/24 project-1 us-east1 net-1 subnet-3 10.142.0.0/20
詳情請參閱 SDK 說明文件中的 list-usable
指令。
API
列出主專案中可用的子網路。以服務專案管理員身分提出要求。
GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable
將 HOST_PROJECT_ID
替換為共用虛擬私人雲端主專案的 ID。
詳情請參閱 subnetworks.listUsable
方法。
預留靜態內部 IPv4 或 IPv6 位址
服務專案管理員可以在共用虛擬私有雲網路的子網路中,保留內部 IPv4 或 IPv6 位址。IP 位址設定物件會在服務專案中建立,而其值則來自所選共用子網路中可用的 IPv4 位址範圍。
如要在服務專案中保留獨立的內部 IP 位址,請完成下列步驟。
主控台
- 設定共用虛擬私有雲。
在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
以共用虛擬私有雲管理員身分登入。
從專案選擇工具中選取服務專案。
依序選取「VPC network」>「IP addresses」,前往「IP addresses」頁面。
按一下「保留內部靜態 IP 位址」。
在「名稱」欄位中輸入 IP 位址名稱。
在「IP 版本」清單中,選取所需的 IP 版本:
- 如要預留靜態內部 IPv4 位址,請選取「IPv4」IPv4。
- 如要保留靜態內部 IPv6 位址,請選取「IPv6」IPv6。
按一下「與我共用的網路」按鈕。
在「Network」和「Subnetwork」清單中,分別選取虛擬私有雲網路和子網路。
指定 IP 位址的預留方式:
- 如要指定要保留的靜態內部 IPv4 位址,請在「Static IP address」(靜態 IP 位址) 中選取「Let me choose」,然後輸入自訂 IP 位址。否則,系統會自動在子網路中為您指派靜態內部 IPv4 位址。
- 對於 IPv6 位址,系統會自動從子網路的內部 IPv6 位址範圍,指派靜態內部 IPv6 位址。
選用:如果您想在不同前端中共用靜態內部 IPv4 位址,請在「用途」部分選擇「共用」。預設選項為「非共用」。
按一下「保留」。
gcloud
如果您尚未以服務專案管理員身分驗證 Google Cloud CLI,請立即執行。將
SERVICE_PROJECT_ADMIN
替換為服務專案管理員名稱:gcloud auth login SERVICE_PROJECT_ADMIN
使用
compute addresses create
指令。保留 IPv4 位址:
gcloud compute addresses create IP_ADDR_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --region=REGION --ip-version=IPV4
保留 IPv6 位址:
gcloud compute addresses create IP_ADDR_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --region=REGION --ip-version=IPV6
更改下列內容:
IP_ADDR_NAME
:IPv4 位址物件的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。
如要進一步瞭解如何建立 IP 位址,請參閱 SDK 說明文件。
API
請使用 addresses.insert
方法。
以服務專案管理員身分預留靜態內部 IPv4 位址:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses { "name": "ADDRESS_NAME", "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "addressType": "INTERNAL" }
更改下列內容:
ADDRESS_NAME
:保留的內部 IP 位址名稱。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:保留的 IPv4 位址所在區域,以及共用子網路所在區域。SERVICE_PROJECT_ID
:您要預留 IPv4 位址的服務專案 ID。SUBNET_NAME
:共用子網路的名稱。
詳情請參閱 addresses.insert
方法。
Terraform
您可以使用 Terraform 資料區塊指定主機子網路資訊。接著,使用 Terraform 資源保留靜態內部 IPv4 位址。如果您省略選用 address
引數,系統會選取並保留可用的 IPv4 位址。
指定主機子網路:
從主專案的子網路中保留 IPv4 位址,以便在服務專案中使用:
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
預留靜態外部 IPv4 位址
服務專案中的資源可以使用服務專案或主專案中定義的地區性靜態外部 IPv4 位址。因此,已連結服務專案中的資源可以使用主專案中保留的區域性靜態外部 IPv4 位址。
保留靜態外部 IPv6 位址
服務專案管理員可以在服務專案中保留靜態外部 IPv6 位址。IPv6 位址設定物件會在服務專案中建立,而其值則來自所選共用子網路中可用的 IPv6 位址範圍。
主控台
您可以使用Google Cloud 控制台在服務專案中預留獨立的外部 IPv6 位址:
- 設定共用虛擬私有雲。
- 在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
前往「共用虛擬私有雲」頁面 - 以共用虛擬私有雲管理員身分登入。
- 從專案選擇工具中選取服務專案。
- 如要前往「IP addresses」頁面,請依序選取「VPC network」>「IP addresses」。
- 按一下「保留外部靜態 IP 位址」。
- 選擇新位址的名稱。
- 指定網路服務級別是「Premium」(進階級) 或「Standard」(標準級)。只有進階級支援 IPv6 靜態位址預留功能。
- 在「IP 版本」下方,選取「IPv6」。
- 指定此 IP 位址是地區還是全球。
- 如果您要為全域負載平衡器保留靜態 IP 位址,請選擇「Global」。
- 如果您要為執行個體或區域負載平衡器保留靜態 IP 位址,請選擇「Regional」,然後選取要建立位址的地區。
- 選擇下列項目:
- 這項專案中的網路:如果您想在預留 IPv6 位址的相同虛擬私有雲 (VPC) 網路中預留外部 IPv6 位址,請選擇這個選項。
- 與我共用的網路:如果您想在共用虛擬私有雲網路的子網路中保留外部 IPv6 位址,請選擇這個選項。
視您的選擇而定,請選擇下列任一選項:
- 網路:虛擬私有雲網路
- 子網路:要指派靜態區域性 IPv6 位址的子網路
- 端點類型:選擇「VM 執行個體」或「Network Load Balancer」
選用:如果您選擇「VM 執行個體」做為端點類型,請選取要附加 IPv6 位址的 VM 執行個體。
按一下「保留」。
gcloud
如果您尚未以服務專案管理員身分驗證
gcloud
,請立即執行。將SERVICE_PROJECT_ADMIN
替換為服務專案管理員名稱:gcloud auth login SERVICE_PROJECT_ADMIN
使用
gcloud compute addresses create
指令:gcloud compute addresses create IP_ADDR_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --region=REGION \ --ip-version=IPV6 \ --endpoint-type=[VM | NETLB]
更改下列內容:
IP_ADDR_NAME
:IPv6 位址物件的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET
:共用子網路的名稱。REGION
:包含共用子網路的區域。
API
如要以服務專案管理員身分保留靜態內部 IPv6 位址,請使用 addresses.insert
方法:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses { "name": "ADDRESS_NAME", "ipVersion": "IPV6", "ipv6EndpointType": "VM|LB", "networkTier": "PREMIUM", "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "addressType": "EXTERNAL" }
更改下列內容:
SERVICE_PROJECT_ID
:您要預留 IPv6 位址的服務專案 ID。REGION
:保留的 IPv6 位址和共用子網路所在的區域。ADDRESS_NAME
:保留的靜態外部 IPv6 位址名稱。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET_NAME
:共用子網路的名稱。
建立執行個體
使用共用虛擬私有雲建立執行個體時,請留意以下事項:
在建立執行個體的標準過程中,您必須選取區域、網路和子網路。您選取的子網路和區域都必須位在同一地區。服務專案管理員使用共用虛擬私人雲端網路的子網路建立執行個體時,為該執行個體選取的區域必須與所選子網路所在地區相同。
當您透過預留的靜態內部 IPv4 位址建立執行個體時,系統會先行選取建立靜態 IPv4 位址時使用的子網路和地區。本節提供使用靜態內部 IPv4 位址建立執行個體的
gcloud
範例。服務專案管理員只能透過已獲權使用的子網路建立執行個體。如要判斷可供使用的子網路,請參閱「列出可用的子網路」一節。
當 Google Cloud 收到在共用虛擬私人雲端網路的子網路中建立執行個體的要求時,系統會檢查發出要求的身分與存取權管理員,是否有權使用該共用子網路。如果檢查失敗,系統就不會建立執行個體,而且 Google Cloud會傳回權限錯誤訊息。如需協助,請與共用虛擬私有雲管理員聯絡。
您建立執行個體的共用子網路必須支援您建立的執行個體堆疊類型。詳情請參閱「子網路類型」一文。對於具有 IPv6 位址的執行個體,子網路的 IPv6 存取類型會決定指派給執行個體的 IPv6 位址是內部或外部 IPv6 位址。
主控台
- 設定共用虛擬私有雲。
在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
以共用虛擬私有雲管理員身分登入。
從專案選擇工具中選取服務專案。
如要前往「建立執行個體」頁面,請依序選取「Compute Engine」>「VM 執行個體」>「建立執行個體」。
指定執行個體的 [名稱]。
在「區域」中,選取包含共用子網路的區域。
點選「進階選項」下方的「網路」。
在「Network interfaces」下方,按一下「Networks shared with me」圓形按鈕。
在「Shared subnetwork」(共用子網路) 清單中,選取要建立執行個體的必要子網路:
選取IP 堆疊類型:
- IPv4 (單一堆疊)
- IPv4 和 IPv6 (雙重堆疊)
- IPv6 (單一堆疊) (預先發布版)
指定該執行個體所需的其他必要參數。
按一下 [建立]。
gcloud
請參閱以下例子:
在共用虛擬私有雲網路的共用子網路中,使用臨時內部 IPv4 位址建立執行個體:
gcloud compute instances create INSTANCE_NAME \ --project SERVICE_PROJECT_ID \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --zone ZONE
更改下列內容:
INSTANCE_NAME
:執行個體的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。ZONE
:指定地區中的區域。
在共用虛擬私有雲網路中,使用已保留的靜態內部 IPv4 位址建立執行個體:
- 在服務專案中,從主機專案的可用位址範圍中保留靜態內部 IPv4 位址。
建立執行個體:
gcloud compute instances create INSTANCE_NAME \ --project SERVICE_PROJECT_ID \ --private-network-ip IP_ADDR_NAME \ --zone ZONE \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
更改下列內容:
INSTANCE_NAME
:執行個體的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。IP_ADDR_NAME
:靜態 IP 位址的名稱。ZONE
:與IP_ADDR_NAME
位於相同區域的區域。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:與靜態內部 IPv4 位址相關聯的共用子網路名稱。
建立使用臨時內部 IPv4 位址和臨時 IPv6 位址的執行個體:
gcloud compute instances create INSTANCE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type IPV4_IPV6 \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --zone ZONE
更改下列內容:
INSTANCE_NAME
:執行個體的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。ZONE
:指定地區中的區域。
建立使用已保留的靜態外部 IPv6 位址的執行個體:
gcloud compute instances create INSTANCE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type STACK_TYPE \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --ipv6-address IPV6_ADDRESS \ --external-ipv6-prefix-length=96 \ --ipv6-network-tier PREMIUM \ --zone ZONE
更改下列內容:
INSTANCE_NAME
:執行個體的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。STACK_TYPE
:IPV4_IPV6
或IPV6_ONLY
(預先發布版),視您是否希望執行個體也具有 IPv4 位址而定。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。IPV6_ADDRESS
:要指派給 VM 的 IPv6 位址。ZONE
:指定地區中的區域。
API
請參閱以下例子:
如要建立使用臨時內部 IPv4 位址的執行個體,請只指定子網路:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances { "machineType": "MACHINE_TYPE", "name": "INSTANCE_NAME", "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "SOURCE_IMAGE" } } ] }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。ZONE
:指定地區中的區域。MACHINE_TYPE
:執行個體的機器類型。INSTANCE_NAME
:執行個體的名稱。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。SOURCE_IMAGE
:執行個體的圖片。
詳情請參閱
instances.insert
方法。如要建立使用已保留內部 IPv4 位址的執行個體,請指定子網路和已保留 IPv4 位址的名稱:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances { "machineType": "MACHINE_TYPE", "name": "INSTANCE_NAME", "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "networkIP": "projects/SERVICE_PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "SOURCE_IMAGE" } } ] }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。ZONE
:指定地區中的區域。MACHINE_TYPE
:執行個體的機器類型。INSTANCE_NAME
:執行個體的名稱。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET_NAME
:共用子網路的名稱。ADDRESS_NAME
:保留的內部 IPv4 位址名稱。SOURCE_IMAGE
:執行個體的圖片。
詳情請參閱
instances.insert
方法。如要建立使用臨時內部 IPv4 位址和臨時 IPv6 位址的執行個體,請指定子網路和堆疊類型:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances { "machineType": "MACHINE_TYPE", "name": "INSTANCE_NAME", "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "stackType": "IPv4_IPv6" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "SOURCE_IMAGE" } } ] }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。ZONE
:指定地區中的區域。MACHINE_TYPE
:執行個體的機器類型。INSTANCE_NAME
:執行個體的名稱。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。SOURCE_IMAGE
:執行個體的圖片。
詳情請參閱
instances.insert
方法。如要建立使用臨時 IPv6 位址的執行個體,請指定子網路和堆疊類型:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances { "machineType": "MACHINE_TYPE", "name": "INSTANCE_NAME", "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "stackType": "IPV6_ONLY" } ], "disks": [ { "boot": true, "initializeParams": { "sourceImage": "SOURCE_IMAGE" } } ] }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。ZONE
:指定地區中的區域。MACHINE_TYPE
:執行個體的機器類型。INSTANCE_NAME
:執行個體的名稱。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。REGION
:包含共用子網路的區域。SUBNET
:共用子網路的名稱。SOURCE_IMAGE
:執行個體的圖片。
詳情請參閱
instances.insert
方法。
Terraform
您可以使用 Terraform 資料區塊指定主機子網路資訊。接著使用 Terraform 資源,在服務專案中建立 VM 執行個體。
指定主機子網路:
在服務專案中,使用主專案共用子網路中的臨時 IPv4 位址建立 VM 執行個體:
在服務專案中建立 VM 執行個體,並使用主專案共用子網路中的已保留的靜態 IPv4 位址:
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
建立執行個體範本
使用共用虛擬私有雲建立執行個體範本時,請留意以下事項:
在建立執行個體範本的過程中,您必須選取網路和子網路。
如果是針對自訂模式共用虛擬私人雲端網路建立的範本,您必須同時指定網路和子網路。
如果是針對自動模式共用虛擬私有雲端網路建立的範本,您可以日後再選擇子網路。在這些情況下,系統會自動選取子網路,其所在地區與使用該範本的任何代管執行個體群組相同 (自動模式網路在每個地區都會有子網路)。
當身分與存取權管理主體建立執行個體範本時,Google Cloud 不會執行權限檢查作業,查看主體是否可以使用指定的自網路。系統一律會延後執行權限檢查作業,直到使用範本的代管執行個體群組收到要求。
您建立執行個體範本的共用子網路必須支援您建立的執行個體範本堆疊類型。詳情請參閱「子網路類型」。對於具有 IPv6 位址的執行個體,子網路的 IPv6 存取類型會決定指派給執行個體的 IPv6 位址是內部或外部 IPv6 位址。
主控台
- 設定共用虛擬私有雲。
- 在 Google Cloud 控制台中,前往「Shared VPC」(共用 VPC) 頁面。
前往「共用虛擬私有雲」頁面 - 以共用虛擬私有雲管理員身分登入。
- 從專案選擇工具中選取服務專案。
- 如要前往「Create an instance template」(建立執行個體範本) 頁面,請依序選取「Compute Engine」>「Instance templates」(執行個體範本)>「Create instance templates」(建立執行個體範本)。
- 指定執行個體範本的 [名稱]。
- 在「進階選項」部分中,按一下「網路」。
- 在「Network interfaces」區段中,按一下「Networks shared with me」圓形按鈕。
- 在「Shared subnetwork」(共用子網路) 清單中,選取您要建立執行個體範本的所需子網路:
- 選取執行個體範本的 IP 堆疊類型:
- IPv4 (單一堆疊)
- IPv4 和 IPv6 (雙重堆疊)
- IPv6 (單一堆疊) (預先發布版)
- 指定該執行個體範本所需的其他必要參數。
- 按一下 [建立]。
gcloud
建立僅限 IPv4 的執行個體範本,用於自動模式共用虛擬私有雲網路的任何自動建立子網路:
gcloud compute instance-templates create TEMPLATE_NAME \ --project SERVICE_PROJECT_ID \ --network projects/HOST_PROJECT_ID/global/networks/NETWORK
更改下列內容:
TEMPLATE_NAME
:範本名稱。SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。NETWORK
:共用虛擬私有雲網路的名稱。
針對共用虛擬私有雲網路 (自動或自訂模式) 中手動建立的子網路,建立僅限 IPv4 的執行個體範本:
gcloud compute instance-templates create TEMPLATE_NAME \ --project SERVICE_PROJECT_ID \ --region REGION \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
更改下列內容:
TEMPLATE_NAME
:範本名稱。SERVICE_PROJECT_ID
:服務專案的 ID。REGION
:包含共用子網路的區域。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET
:共用子網路的名稱。
建立在自訂模式共用虛擬私有雲網路中使用子網路的雙重堆疊執行個體範本:
gcloud compute instance-templates create TEMPLATE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type IPV4_IPV6 \ --region REGION \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
更改下列內容:
TEMPLATE_NAME
:範本名稱。SERVICE_PROJECT_ID
:服務專案的 ID。REGION
:包含共用子網路的區域。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET
:共用子網路的名稱。
建立僅限 IPv6 的執行個體範本 (預先發布版),在自訂模式共用虛擬私有雲網路中使用子網路:
gcloud compute instance-templates create TEMPLATE_NAME \ --project SERVICE_PROJECT_ID \ --stack-type IPV6_ONLY \ --region REGION \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
更改下列內容:
TEMPLATE_NAME
:範本名稱。SERVICE_PROJECT_ID
:服務專案的 ID。REGION
:包含共用子網路的區域。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET
:共用子網路的名稱。
API
如要建立僅限 IPv4 的執行個體範本,以便使用自動模式共用虛擬私有雲網路的任何自動建立子網路,請指定虛擬私有雲網路:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates { "properties": { "networkInterfaces": [ { "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK" } ] ... }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:含有共用虛擬私有雲網路的專案 ID。NETWORK
:共用虛擬私有雲網路的名稱。
詳情請參閱
instanceTemplates.insert
方法。如要建立僅限 IPv4 的執行個體範本,並在共用虛擬私有雲網路 (自動或自訂模式) 中使用手動建立的子網路,請指定子網路:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates { "properties": { "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME" } ] ... }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:含有共用虛擬私有雲網路的專案 ID。REGION
:包含共用子網路的區域。SUBNET_NAME
:共用子網路的名稱。
詳情請參閱
instanceTemplates.insert
方法。如要建立在自訂模式共用虛擬私有雲網路中使用子網路的雙重堆疊執行個體範本,請指定子網路和堆疊類型:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates { "properties": { "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "stackType": "IPV4_IPV6" } ] ... }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:含有共用虛擬私有雲網路的專案 ID。REGION
:包含共用子網路的區域。SUBNET_NAME
:共用子網路的名稱。
詳情請參閱
instanceTemplates.insert
方法。如要建立僅限 IPv6 的執行個體範本 (預先發布版),在自訂模式共用虛擬私有雲網路中使用子網路,請指定子網路和堆疊類型:
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates { "properties": { "networkInterfaces": [ { "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME", "stackType": "IPV6_ONLY" } ] ... }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。HOST_PROJECT_ID
:含有共用虛擬私有雲網路的專案 ID。REGION
:包含共用子網路的區域。SUBNET_NAME
:共用子網路的名稱。
詳情請參閱
instanceTemplates.insert
方法。
Terraform
您可以使用 Terraform 資料區塊指定主機子網路資訊。接著使用 Terraform 資源建立 VM 執行個體範本。虛擬機器的 IPv4 位址來自主專案的共用子網路。
子網路必須位於要建立 VM 執行個體的相同區域。
指定主機子網路:
在服務專案中建立 VM 執行個體範本:
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
建立代管執行個體群組
使用共用虛擬私有雲建立代管執行個體群組時,請留意以下事項:
搭配共用虛擬私人雲端使用代管執行個體群組時,您需要將 Google API 服務帳戶設為服務專案管理員,因為透過自動調度資源功能自動建立執行個體等這類工作,是由該服務帳戶執行。
在建立代管執行個體群組的過程中,您需要根據群組類型選取區域或地區,以及執行個體範本 (網路和子網路詳細資訊會根據執行個體範本而定)。符合資格的執行個體範本限定只能參照所在地區與代管執行個體群組相同的子網路。
服務專案管理員只能建立代管執行個體群組,其中的執行個體需使用已取得權限的子網路。網路和子網路詳細資訊會根據執行個體範本而定,因此服務專案管理員使用的範本只能參照已獲權使用的子網路。
當 Google Cloud 收到建立代管執行個體群組的要求時,系統會檢查發出要求的身分與存取權管理員,是否有權使用執行個體範本中指定的子網路 (其所在地區與群組相同)。如果檢查失敗,系統就不會建立代管執行個體群組,而且 Google Cloud 會傳回錯誤訊息:
Required 'compute.subnetworks.use' permission for 'projects/SUBNET_NAME
。您可以列出可用的子網路來判定哪些子網路可供使用;如果服務帳戶需要額外存取權,請與共用 VPC 管理員聯絡。詳情請參閱「將服務帳戶設為服務專案管理員」。
詳情請參閱 Compute Engine 說明文件中的「建立受管理執行個體群組」。
建立 HTTP(S) 負載平衡器
您可以透過多種方式在共用虛擬私有雲網路中設定外部應用程式負載平衡器。無論部署類型為何,負載平衡器的所有元件都必須位於同一個機構和共用虛擬私有雲網路。
如要進一步瞭解支援的共用虛擬私有雲架構,請參閱下列資源:
建立內部直通式網路負載平衡器
以下範例說明在共用虛擬私人雲端網路中建立內部轉送網路負載平衡器時,必須考量的事項。服務專案管理員可以建立內部直通式網路負載平衡器,使用他們有權存取的主機專案中的子網路。負載平衡器的內部轉送規則是在服務專案中定義,但其子網路參照指向主機專案共用虛擬私人雲端網路中的子網路。
在共用 VPC 環境中建立內部直通式網路負載平衡器前,請先參閱共用 VPC 架構。
主控台
前往 Google Cloud 控制台的「負載平衡」頁面。
前往「Load balancing」(負載平衡) 頁面建立內部 TCP/UDP 負載平衡器,並進行下列調整:在「Configure frontend services」(設定前端服務) 部分中,從「Subnet」(子網路) 選單的「Networks shared by other projects」(其他專案共用的網路) 部分選取所需的共用虛擬私有雲子網路。
完成負載平衡器建立作業。
gcloud
建立內部轉送規則時,請使用 --subnet
標記在主機專案中指定子網路:
gcloud compute forwarding-rules create FR_NAME \ --project SERVICE_PROJECT_ID \ --load-balancing-scheme internal \ --region REGION \ --ip-protocol IP_PROTOCOL \ --ports PORT,PORT,... \ --backend-service BACKEND_SERVICE_NAME \ --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \ --address INTERNAL_IP
更改下列內容:
FR_NAME
:轉送規則的名稱。SERVICE_PROJECT_ID
:服務專案的 ID。REGION
:包含共用子網路的區域。IP_PROTOCOL
:TCP
或UDP
,符合負載平衡器後端服務的通訊協定。PORT
:負載平衡器的數字通訊埠或通訊埠清單。BACKEND_SERVICE_NAME
:後端服務的名稱 (已在建立內部直通式網路負載平衡器的一般程序中建立)。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET
:共用子網路的名稱。INTERNAL_IP
:共用子網路中的內部 IP 位址 (如未指定,系統會選取一個可用的 IP 位址)。
如需更多選項,請參閱 gcloud compute forwarding-rules create
指令。
API
建立內部轉送規則,並在主機專案中指定子網路。
POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/forwardingRules { "name": "FR_NAME", "IPAddress": "IP_ADDRESS", "IPProtocol": "IP_PROTOCOL", "ports": [ "PORT", ... ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET", "network": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME", "backendService": "https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/us-west1/backendServices/BE_NAME", "networkTier": "PREMIUM" }
更改下列內容:
SERVICE_PROJECT_ID
:服務專案的 ID。REGION
:包含共用子網路的區域。FR_NAME
:轉送規則的名稱。IP_ADDRESS
:共用子網路中的內部 IP 位址。IP_PROTOCOL
:TCP
或UDP
,符合負載平衡器後端服務的通訊協定。PORT
:負載平衡器的數字通訊埠或通訊埠清單。HOST_PROJECT_ID
:共用虛擬私有雲主專案的 ID。SUBNET
:共用子網路的名稱。NETWORK_NAME
:網路名稱。BE_NAME
:後端服務的名稱 (已在建立內部直通式網路負載平衡器的一般程序中建立)。
詳情請參閱 forwardingRules.insert
方法。
Terraform
您可以使用 Terraform 資料區塊指定主機子網路和主機網路。接著,使用 Terraform 資源建立轉送規則。
指定主機網路:
指定主機子網路:
在服務專案中,在主專案的網路和子網路中建立轉送規則:
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
後續步驟
- 如要進一步瞭解共用虛擬私有雲,請參閱「共用虛擬私有雲」。
- 如要瞭解如何透過共用虛擬私有雲設定 Google Kubernetes Engine 叢集,請參閱「透過共用虛擬私有雲設定叢集」。
- 瞭解如何設定共用虛擬私人雲端網路的存取權,從Cloud Run、Cloud Run 函式或 App Engine 標準環境存取。
- 如需刪除共用虛擬私人雲端設定的操作說明,請參閱「取消佈建共用虛擬私人雲端」。