Shared VPC 基本概念
Shared VPC 可以讓同一個 Organization(機構) 底下的數個 projects(專案) 連結相同的 VPC network,讓這些 projects 能夠安全、有效率地使用內網傳輸。如下圖,Shared VPC 的架構為一個 Host project 連接多個 Service project。Host project 的 VPC networks 就稱為 Shared VPC networks。而位於 Service project 的 Eligible resources 可以使用 Shared VPC networks 的 subnets。
Shared VPC 的 IAM roles 分為三種:
- Organization Admin:
- 位於 Organization-level,賦予使用者 Shared VPC Admin 與新增、刪除 project 的 roles。
- Shared VPC Admin:
- 位於 Organization-level,擁有設置 Shared VPC 的權限。Shared VPC Admin 賦予使用者 Service Project Admin roles。
- Service Project Admin:
- 位於 Organization or Project level,Service Project Admin 分為兩種 Project-level 以及 Subnet-level。依照 Shared VPC Admin 的設定,可以取得一整個 project 的管理權限或是只有幾個 subnets 的管理權限。
官方建議的 Shared VPC 最佳實例是賦予每個使用者最少的權限。Shared VPC Admins 負責將網路管理任務委派給 Shared VPC network 中的網路和安全管理員,而不允許 Service Project Admins 來進行網路維護。Service Project Admins 只擁有創建與管理使用 Shared VPC Network 的 instances
Shared VPC 計價與額度
限制額度:
項目 | 限制 | 備註 |
一個 Host projects 的 Service projects 數量 | 100 | 聯絡我們來加大限制 |
Host projects 的數量 | 100 | 無法加大限制 |
Service projects 連接 Host projects 的數量 | 1 | 無法加大限制 |
計價方式:
如果該 Resource 是創建在 Service project 上,帳單會計在 Service project 的 Billing。舉例來說,一台位於 Service project 的 VM 產生了 Egress 費用。即使該台 VM 使用的是 Shared VPC network 的 subnet,Egress 費用還是會記錄在 Service project 的 Billing account。
Shared VPC 手把手教學
預先準備
如果還未使用 gcloud 驗證 Organization Admin 的身份則需要按照以下步驟驗證 Organization Admin 的身份,或是直接使用 Console 的 Cloud Shel,小編這邊使用的是 Cloud Shelll。[ORG_ADMIN] 替換為 Organization Admin 的帳號
gcloud auth login [ORG_ADMIN]
查看 Organization 的 ID
gcloudorganizations list
賦予使用者 Shared VPC Admin 的 role,[ORG_ID] 為 Organization ID,[EMAIL_ADDRESS] 為使用者的帳號。
gcloud organizations add-iam-policy-binding [ORG_ID] \
--member 'user:[EMAIL_ADDRESS]' \
--role "roles/compute.xpnAdmin"
完成以上的動作後,登出 Organization Admin 的身份
gcloud auth revoke [ORG_ADMIN]
設置 Host project
選定一個 project 為 Host project。
gcloud compute shared-vpc enable sharedvpc-1 //sharedvpc-1 為 Host project
列出 Organization 裡面所有的 Host projects,確認剛剛的設定是否成功。[ORG_ID] 為 Organization 的 ID
gcloud compute shared-vpc organizations list-host-projects [ORG_ID]
連結 Service projects
連結 Service project 至剛剛啟用的 Host project
gcloud compute shared-vpc associated-projects add sharedvpc-2 \
--host-project sharedvpc-1
確認是否有成功連結至 Host project
gcloud compute shared-vpc get-host-project sharedvpc-2
也可以列出指定 Host project 的所有 Service project
gcloud compute shared-vpc list-associated-resources sharedvpc-1
設置 Service Project Admins
使用者可以根據需求劃分 subnets 的權限,為處於 Service project 的其中一位使用者加入 Service Project Admin 的 Role。這個 Role 有權限存取所有的 subnets。
gcloud projects add-iam-policy-binding sharedvpc-1 \
--member "user:[SERVICE_PROJECT_ADMIN]" \
--role "roles/compute.networkUser"
完成以上的動作後,登出 Shared VPC Admin 的身份
gcloud auth revoke [SHARED_VPC_ADMIN]
使用 Shared VPC
以下的步驟,根據 GCP 的 Best practice,會由 Service Project Admins 來實作。列出所有該 Service Project Admin 可用的 subnets。
gcloud compute networks subnets list-usable --project sharedvpc-1
註冊一個靜態的內部 IP,而該 IP 會從指定的 subnet 範圍內隨機選出。
gcloud compute addresses create sharedvpcip \
--project sharedvpc-2 \
--subnet projects/sharedvpc-1/regions/asia-east1/subnetworks/default
新增一台 VM 並進行驗證
Service Project Admins 只能使用他們有權限存取的 subnet 創建一台 VM instance。當 GCP 收到在 Shared VPC network 創建一台 VM instance 的請求時,GCP 會自動判斷該使用者是否有權限可以使用該段 subnet。
gcloud compute instances create sharedvpc-2vm \
--project sharedvpc-2 \
--private-network-ip sharedvpcip \
--zone asia-east1-a --subnet \
projects/sharedvpc-1/regions/asia-east1/subnetworks/default
在 Host project 新增一台 VM (選定與 sharedvpc-2vm 同一個 subnet )並 ssh 至該 VM。ping sharedvpc-2vm 的內部 IP,成功互連的話代表兩台位於不同 project 的 VM 成功地創建在同一個 subnet 裡,並可以使用內網互通。
ping [IP_ADDR]//為處於 Host project 的 VM IP
Shared VPC FAQ
- 一個 project 是否能同時為 Host project 跟 Service Project?
- 不行。
- 一個 service project 是否能夠連結多個 host projects?
- 不行,一個 service project 只能連結一個 host project。但一個 host project 可以連結多個 service projects。
- Share VPC的架構與權限機制
- 權限設定可參考文件。
- 如何設定 host & service projects?
- 可參考文件
- GCP 的最佳實例?
- 可參考 GCP 官方的 use-cases
- Shared VPC 的計費是否有要留意的部分?
- shared VPC 的計價方式跟一般 VPC network 的計價方式是相同的
原文出處