使用其他專案的映像檔

本頁說明如何設定專案,以便 Deployment Manager 可透過屬於其他專案的作業系統映像檔,建立 Compute Engine 虛擬機器執行個體。

舉例來說,如果您有一個名為「Awesome Project」的專案,且 Deployment Manager 在其中建立及管理 VM 執行個體。我們現在假設您需要使用私人映像檔,而該私人映像檔屬於名為「Database Images」的不同專案。如要授予這些映像檔的存取權,Database Images 的擁有者必須將身分與存取權管理角色 roles/compute.imageUser 授予 Awesome Project 的 Google API 服務帳戶,Awesome Project 才能使用 Database Images 專案中的映像檔。

您也可以透過這個程序,將其他專案映像檔的存取權授予代管執行個體群組

事前準備

限制

以下是使用這項功能的限制:

  • 您必須將專案層級的 compute.imageUser 角色授予專案的 Google API 服務帳戶
  • 授予 compute.imageUser 角色即代表授予特定專案中所有映像檔的權限,您無法共用特定映像檔。
  • 您必須將這個角色授予特定使用者,但不得為 allAuthenticatedUsersallUsers

授予映像檔的存取權

如要授予屬於其他專案映像檔的存取權,擁有映像檔的專案擁有者必須針對要使用映像檔的專案,將存取權授予該專案的 Google API 服務帳戶。

  1. 針對需要存取其他專案所擁有私人映像檔的專案,前往 Google Cloud 控制台中該專案的「IAM」頁面。

    前往「IAM」頁面

  2. 如果出現系統提示,請從清單中選取您的專案。請記得選取需要存取其他專案所儲存映像檔的專案。
  3. 尋找 Google API 服務帳戶,其電子郵件地址的格式如下:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 請記住上方的電子郵件地址。接下來,所需映像檔所屬專案的專案擁有者可以將 roles/compute.imageUser 角色授予 Google API 服務帳戶。

    主控台

    1. 在 Google Cloud 控制台中,找到包含待存取映像檔的專案,並前往其「IAM」頁面。

      前往「IAM」頁面

    2. 透過專案清單來選取專案。
    3. 按一下 [Add] (新增) 按鈕來新增成員。
    4. 在「Members」(成員) 部分,輸入服務帳戶的電子郵件地址。
    5. 展開「Roles」(角色) 下拉式選單,然後依序選取 [Compute Engine] > [Compute Image User] (Compute 映像檔使用者)。
    6. 點選 [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
    ...

新增映像檔之後,完成設定的建立作業,然後予以部署

後續步驟