本頁說明如何設定專案,以便 Deployment Manager 可透過屬於其他專案的作業系統映像檔,建立 Compute Engine 虛擬機器執行個體。
舉例來說,如果您有一個名為「Awesome Project」的專案,且 Deployment Manager 在其中建立及管理 VM 執行個體。我們現在假設您需要使用私人映像檔,而該私人映像檔屬於名為「Database Images」的不同專案。如要授予這些映像檔的存取權,Database Images 的擁有者必須將身分與存取權管理角色 roles/compute.imageUser
授予 Awesome Project 的 Google API 服務帳戶,Awesome Project 才能使用 Database Images 專案中的映像檔。
您也可以透過這個程序,將其他專案映像檔的存取權授予代管執行個體群組。
事前準備
- 如要使用本指南提供的指令列範例,請安裝 `gcloud` 指令列工具。
- 如要使用本指南提供的 API 範例,請設定 API 存取權。
- 瞭解 Deployment Manager 設定。
- 瞭解 Compute Engine 私人映像檔。
- 參閱身分與存取權管理 (IAM) 說明文件。
- 瞭解 Deployment Manager IAM 角色,尤其是
roles/compute.imageUser
角色。
限制
以下是使用這項功能的限制:
- 您必須將專案層級的
compute.imageUser
角色授予專案的 Google API 服務帳戶。 - 授予
compute.imageUser
角色即代表授予特定專案中所有映像檔的權限,您無法共用特定映像檔。 - 您必須將這個角色授予特定使用者,但不得為
allAuthenticatedUsers
或allUsers
。
授予映像檔的存取權
如要授予屬於其他專案映像檔的存取權,擁有映像檔的專案擁有者必須針對要使用映像檔的專案,將存取權授予該專案的 Google API 服務帳戶。
- 針對需要存取其他專案所擁有私人映像檔的專案,前往 Google Cloud 控制台中該專案的「IAM」頁面。
- 如果出現系統提示,請從清單中選取您的專案。請記得選取需要存取其他專案所儲存映像檔的專案。
尋找 Google API 服務帳戶,其電子郵件地址的格式如下:
[PROJECT_NUMBER]@cloudservices.gserviceaccount.com
請記住上方的電子郵件地址。接下來,所需映像檔所屬專案的專案擁有者可以將
roles/compute.imageUser
角色授予 Google API 服務帳戶。主控台
- 在 Google Cloud 控制台中,找到包含待存取映像檔的專案,並前往其「IAM」頁面。
- 透過專案清單來選取專案。
- 按一下 [Add] (新增) 按鈕來新增成員。
- 在「Members」(成員) 部分,輸入服務帳戶的電子郵件地址。
- 展開「Roles」(角色) 下拉式選單,然後依序選取 [Compute Engine] > [Compute Image User] (Compute 映像檔使用者)。
- 點選 [Add] (新增) 即可添加帳戶。
gcloud
使用 Google Cloud CLI,為專案的 IAM 政策新增繫結:
gcloud projects add-iam-policy-binding [PROJECT_ID] \ --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser
其中:
[PROJECT_ID]
是專案 ID,包含您要共用的映像檔。[SERVICE_ACCOUNT_EMAIL]
是服務帳戶的電子郵件地址。
例如:
gcloud projects add-iam-policy-binding database-images \ --member serviceAccount:123456789012@cloudservices.gserviceaccount.com \ --role roles/compute.imageUser
API
在 API 中,向下列網址發出
POST
要求,其中[PROJECT_ID]
是含有您要共用的映像檔的專案 ID:POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
要求主體應包含您想套用至專案的繫結清單。
roles/compute.imageUser
角色應是繫結的一部分。例如:{ "policy": { "version": "0", "bindings": [ { "role": "roles/owner", "members": [ "user:example@gmail.com" ] }, { "role": "roles/compute.imageUser", "members": [ "serviceAccount:123456789012@cloudservices.gserviceaccount.com" ] } ] }
}
在設定中使用其他專案的映像檔
專案取得其他專案映像檔的存取權後,該專案的使用者可在範本或設定中,指定映像檔所屬專案的專案 ID,藉此使用映像檔:
image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]
例如,如果映像檔的專案 ID 是 database-images
,那麼您可以在設定中提供下列映像檔 URI:
resources: - name: a-special-vm type: compute.v1.instances properties: machineType: zones/us-central1-a/machineTypes/f1-micro image: projects/database-images/global/images/example-database-image ...