共用映像檔、快照和磁碟

您可以和專案或機構組織以外的使用者共用映像檔、快照及磁碟。凡是具備這些資源讀取權限的使用者,都可從其他專案和機構組織使用這些資源來完成作業。舉例來說,如果您授予使用者您專案映像檔或快照的讀取權限,則該使用者就能在自己的專案中利用這些資源來建立永久磁碟。使用身分與存取權管理角色來共用映像檔、快照和磁碟的讀取權限

在某些情況下,您可能會想限制具有儲存資源存取權的授權使用者,只能在您的機構組織內或特定專案中使用這些資源。如要限制使用者只能在特定專案內利用您的映像檔、快照和磁碟來建立資源,請將儲存資源使用限制設為組織政策之一。

如要進一步瞭解身分與存取權管理角色,請參閱身分與存取權管理說明文件

事前準備

限制

共用儲存資源有以下限制:

  • 您只能從專案層級共用映像檔、快照和磁碟的存取權。

  • 無法只共用特定映像檔、快照或磁碟。

  • 無法授予角色給允許存取映像檔、快照或磁碟的 allAuthenticatedUsersallUsers

  • 您只能在組織層級設定「constraints/compute.storageResourceUseRestrictions」 限制。

  • 您必須使用 Compute Engine API,才能從專案以外的資源建立映像檔、快照或磁碟。舉例來說,執行必須指定映像檔、快照或磁碟路徑的方法時,您可以在遠端專案中參照映像檔、快照和磁碟。這些方法包括:

跨專案和組織共用儲存資源

您可以使用以下身分與存取權管理角色或權限來共用映像檔、磁碟和快照存取權。

  • 映像檔:roles/compute.imageUser 角色或 compute.images.useReadOnly 權限。
  • 快照:roles/compute.storageAdmin 角色或 compute.snapshots.useReadOnly 權限。
  • 磁碟:roles/compute.storageAdmin 角色或 compute.disks.useReadOnly 權限。

這些角色和權限可讓您與專案以外的團隊成員獨立共用各種資源類型。舉例來說,貴公司可能有一個特定的專案,其中包含公司其他人可使用的合格映像檔。您可以為專案指派一個群組,專門負責建立和維護映像檔。接下來,您可以將 roles/compute.imageUser 角色授予其他團隊成員。這樣一來,這些成員就能在自己的專案中使用這些映像檔。

如要授予映像檔共用角色,請使用主控台、gcloud 指令列工具或 API。如要進一步瞭解如何使用身分與存取權管理,請參閱身分與存取權管理說明文件

主控台

  1. 在 Google Cloud Platform 主控台中前往身分與存取權管理頁面。

    前往「IAM」(身分與存取權管理) 頁面

  2. 如果出現系統提示,請選取您的專案。
  3. 添加新使用者的方式如下:
    1. 按一下頁面頂端的 [Add] (新增)
    2. 提供一或多個您要授予存取權的帳戶電子郵件地址。
    3. 授予一或多個角色給成員。
      • 在角色選取器中,依序選取 [Compute Engine] > [Compute Image User] (Compute 映像檔使用者)。
      • 快照和磁碟:在角色選取器中,依序選取 [Compute Engine] > [Compute Storage Admin] (Compute 儲存空間管理員)。
  4. 儲存變更。

gcloud

使用 gcloud 指令列工具,為映像檔專案新增繫結至 Cloud IAM 政策:

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

其中:

  • [PROJECT_ID] 是專案 ID,包含您要共用的映像檔。
  • [MEMBER_TYPE] 是您要授予存取權的帳戶類型。舉例來說,對個別使用者請使用 user、對服務帳戶請使用 serviceAccount,如果是 Google 群組則是 group
  • [ACCOUNT] 是授予這個角色的帳戶電子郵件地址。舉例來說,假如是服務帳戶,應該是 my-sa@my-project-123.iam.gserviceaccount.com
  • [ROLE] 是您要授予使用者的角色。映像檔請指定 roles/compute.imageUser;至於快照和磁碟則請指定 roles/compute.storageAdmin

舉例來說,以下指令代表授予 roles/compute.imageUser 角色給 john@example.com,以便該使用者在名稱為 database-images 的專案中存取映像檔:

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.com --role roles/compute.imageUser

API

在 API 中,對以下網址發出 POST 要求,其中 [PROJECT_ID] 是專案 ID,包含您要分享的映像檔。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_ID]:setIamPolicy

要求內容應包含您想套用至專案的繫結清單。角色應是繫結的一部分。例如:

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

將映像檔存取權授予代管執行個體群組

Compute Engine 允許您建立執行個體群組,無論是代管非代管執行個體群組。如果您建立的是代管執行個體群組,Compute Engine 會使用 Google API 服務帳戶來呼叫 Compute Engine API,並執行與群組相關的動作,例如重建健康狀態不良的執行個體及更新執行個體。如果您要使用其他專案中的映像檔建立代管執行個體群組,可以將 compute.imageUser 角色授予 API 服務帳戶 (屬於建立代管執行個體群組的專案)。

舉例來說,假設 A 專案希望使用 B 專案所擁有的映像檔建立代管執行個體群組。B 專案的擁有者必須將 B 專案上的 compute.imageUser 角色授予 A 專案的 Google API 服務帳戶。這將授予該帳戶存取 B 專案中映像檔的權限,以在 A 專案中建立代管執行個體群組。

在授予 compute.imageUser 角色之後,您可以在建立群組的執行個體範本時,提供特定映像檔的網址。

請按照下列步驟取得服務帳戶電子郵件並授予帳戶存取權:

  1. 找到 GCP 主控台中要建立代管執行個體群組的專案,然後前往身分與存取權管理頁面。

    前往「IAM」(身分與存取權管理) 頁面

  2. 如果出現系統提示,請在清單中選取您的專案。
  3. 尋找 Google API 服務帳戶,其電子郵件地址的格式如下:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 請記住上方的電子郵件地址。接下來,請將擁有映像檔的專案存取權限授予帳戶。

    主控台

    1. 在 Google Cloud Platform 主控台中,找到包含您想要存取的映像檔的專案,並前往「IAM」(身分與存取權管理) 頁面。

      前往「IAM」(身分與存取權管理) 頁面

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

    gcloud

    使用 gcloud 指令列工具,為專案新增繫結至 Cloud 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.gservbiceaccount.com"
               ]
           }
           ]
       }
    }
    

限制使用共用映像檔、磁碟和快照

和其他使用者共用映像檔、磁碟和快照時,您可以控管這些使用者使用資源的方式。設定 constraints/compute.storageResourceUseRestrictions 限制就能定義使用者有權使用儲存資源的專案。

您必須具備修改組織政策的權限才能設定限制條件。舉例來說,resourcemanager.organizationAdmin 角色就有權設定這類限制條件。

  1. 尋找您機構組織的組織 ID。

    gcloud organizations list
    
  2. 取得您專案現有的政策設定。

    gcloud beta resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization [ORGANIZATION_ID] > org-policy.yaml
    

    其中,[ORGANIZATION_ID] 是您的組織 ID。

  3. 在文字編輯器中開啟 org-policy.yaml 檔案,並修改 compute.storageResourceUseRestrictions 限制條件。請新增需要的限制或移除不需要的限制,並在檔案編輯完後儲存變更。以下為您可能會在政策檔案中設定的限制條件項目範例:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/[ORGANIZATION_ID]
    
  4. policy.yaml 檔案套用到您的機構組織。

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    其中,[ORGANIZATION_ID] 是您的組織 ID。

設定完組織政策中的條件約束後,請進行測試以確保這些條件能建立您制定的限制。

從其他專案使用映像檔

如果有人將 compute.imageUser 角色授予您,則代表您可以透過在要求中指定映像檔專案,以存取專案中的映像檔。舉例來說,如要取得您可使用的映像檔清單:

gcloud compute images list --project [IMAGE_PROJECT]

如要瞭解如何使用映像檔建立新資源 (例如,建立執行個體),請參閱建立和啟動執行個體一文。

舉例來說,以下指令會透過 database-images 專案使用名為 database-image-a 的映像檔來建立執行個體:

gcloud compute instances create test-instance --image database-image-a --image-project database-images

同樣地,您可以使用該映像檔建立永久磁碟。如要瞭解如何透過映像檔建立磁碟,請參閱建立獨立式根永久磁碟

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件