管理自訂圖片的存取權


如要讓使用者建立、刪除、使用或分享自訂圖片,您必須授予他們適當的身分與存取權管理 (IAM) 角色。這份文件說明瞭建立及管理自訂映像檔所需的 IAM 權限,以及如何將這些權限授予使用者。

如要瞭解如何授予 Compute Engine 資源的存取權,請參閱「管理 Compute Engine 資源的存取權」一文。如要瞭解 IAM,請參閱 IAM 說明文件

事前準備

  • 請參閱 IAM 說明文件。
  • 進一步瞭解 Compute Engine 身分與存取權管理角色,特別是 Compute 映像檔使用者角色 (roles/compute.imageUser)。
  • 如果尚未設定,請先設定驗證機制。驗證是指驗證身分,以便存取 Google Cloud 服務和 API 的程序。如要在本機開發環境中執行程式碼或範例,您可以選取下列任一選項,向 Compute Engine 進行驗證:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

    REST

    To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    For more information, see Authenticate for using REST in the Google Cloud authentication documentation.

必要的角色

如要取得管理自訂圖片存取權所需的權限,請要求管理員授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這些預先定義的角色包含管理自訂映像檔存取權所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要管理自訂圖片的存取權,您必須具備下列權限:

  • 如要將建立和分享自訂圖片所需的權限授予使用者或服務帳戶,請按照下列步驟操作:
    • 專案的 resourcemanager.projects.getIamPolicy 權限
    • 專案的 resourcemanager.projects.setIamPolicy 權限
  • 如要授予使用者或服務帳戶刪除自訂圖片的權限,請按照下列步驟操作:
    • 專案的 resourcemanager.projects.getIamPolicy 權限
    • 專案的 resourcemanager.projects.setIamPolicy 權限
    • 圖片的 compute.images.getIamPolicy
    • 圖片的 compute.images.setIamPolicy
  • 如要撤銷使用者或服務帳戶對自訂圖片的存取權,請按照下列步驟操作:
    • 專案的 resourcemanager.projects.getIamPolicy 權限
    • 專案的 resourcemanager.projects.setIamPolicy 權限
  • 如要使用共用映像檔建立執行個體,請按照下列步驟操作:
    • 專案的 compute.instances.create 權限
    • 如何使用自訂映像檔在映像檔上建立 VM: compute.images.useReadOnly
    • 如何使用快照建立 VM: 在快照上執行 compute.snapshots.useReadOnly
    • 如何使用執行個體範本在執行個體範本上建立 VM: compute.instanceTemplates.useReadOnly
    • 如要將舊版網路指派給專案中的 VM: compute.networks.use
    • 如要為專案中的 VM 指定靜態 IP 位址:compute.addresses.use
    • 如要在使用舊版網路時將外部 IP 位址指派給 VM,請在專案中使用 compute.networks.useExternalIp
    • 如要為 VM 指定子網路,請在專案或所選子網路中使用 compute.subnetworks.use
    • 如要在使用虛擬私有雲網路時將外部 IP 位址指派給 VM,請在專案或所選子網路上設定 compute.subnetworks.useExternalIp
    • 如何為專案中的 VM: compute.instances.setMetadata 設定 VM 執行個體中繼資料
    • 如何為 VM 設定標記:compute.instances.setTags
    • 如何為 VM 設定標籤:compute.instances.setLabels
    • 如何設定 VM 要使用的服務帳戶: 在 VM 上使用 compute.instances.setServiceAccount
    • 如要為專案中的 VM compute.disks.create 建立新磁碟
    • 如要以唯讀或讀寫模式連接現有磁碟:磁碟的 compute.disks.use
    • 如要以唯讀模式連接現有磁碟:磁碟上的 compute.disks.useReadOnly

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

限制

在圖片上,您無法將角色授予特殊成員類型 allUsers

授予建立自訂圖片的權限

您可以授予使用者在貴機構或專案中建立自訂圖片的權限。

Compute Engine 提供預先定義的 Compute 儲存空間管理員角色 (roles/compute.storageAdmin),您可以指派給使用者,讓他們建立、刪除及管理儲存空間相關資源,包括映像檔、磁碟和快照。如果您需要的角色只允許建立圖片,則必須建立自訂角色。在自訂角色中加入下列權限:

  • compute.images.create:用來建立新圖片
  • compute.images.list 可列出專案中的圖片
  • compute.disks.use (如果映像檔是從磁碟建立)
  • compute.disks.list 使用者是否需要列出專案中的所有磁碟

如果您授予使用者在機構層級建立自訂圖片的權限,使用者就能為機構內的任何專案建立自訂圖片。

主控台

  1. 在 Google Cloud 控制台中,前往專案或組織的「IAM」頁面。

    前往身分與存取權管理頁面

  2. 如要新增成員,請按一下 「授予存取權」

  3. 在「New principals」(新增主體) 欄位中,輸入您要授予存取權的 ID 電子郵件地址。

    例如:

    • Google 帳戶電子郵件:test-user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com
  4. 在「Select a role」(請選擇角色) 清單中,依序選取「Compute Engine」>「Compute 儲存空間管理員」,或選取您建立的自訂角色。

  5. 選用:如要進一步控制使用者對 Google Cloud 資源的存取權,請新增條件式角色繫結

  6. 儲存變更。

gcloud

如要在機構層級授予 roles/compute.storageAdmin 角色,請使用 gcloud organizations add-iam-policy-binding 指令

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

如要在專案層級授予 roles/compute.storageAdmin 角色,請使用 gcloud projects add-iam-policy-binding 指令

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/compute.storageAdmin'

更改下列內容:

  • ORGANIZATION_IDPROJECT_ID:機構 ID 或專案 ID,例如 my-organization-1my-project-1
  • MEMBER:您要授予角色的有效身分

    例如:

    • Google 帳戶電子郵件:user:user@gmail.com
    • Google 群組:group:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:serviceAccount:server@example.gserviceaccount.com
    • Google Workspace 網域:domain:example.com

REST

  1. 使用資源的 getIamPolicy 方法讀取現有政策。如要使用專案,請使用 projects.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID 替換為專案 ID,例如 my-project-1

    如果是機構,請使用 organizations.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    ORGANIZATION_ID 替換為機構 ID,例如 123456578920

    Compute Engine 會在回應中傳回目前的政策。

  2. 如要新增或移除成員及其相關角色,請使用文字編輯器編輯政策。請使用下列格式新增成員:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    舉例來說,如要將 roles/compute.storageAdmin 角色授予 group:admins@example.com,請將下列繫結加入政策:

    {
     "members": [
       "group:admins@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. 使用 setIamPolicy 方法編寫更新後的政策。

    舉例來說,如要在專案層級設定政策,請使用 project.setIamPolicy 方法。在要求主體中,提供上一個步驟中更新的 IAM 政策。

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

    PROJECT_ID 替換為專案 ID。

授予刪除自訂圖片的權限

視需求授予使用者下列權限:

  • 刪除特定圖片
  • 刪除特定專案擁有的圖片
  • 刪除機構中任何專案的圖片

在專案層級授予權限後,使用者就能刪除該專案擁有的所有圖片。在機構層級授予權限後,使用者就能刪除該機構擁有的任何圖片,不論專案為何皆可。

Compute Engine 提供預先定義的 Compute Storage 管理員角色 (roles/compute.storageAdmin),您可以將該角色指派給使用者,讓他們建立、刪除及管理儲存空間相關資源,包括映像檔、磁碟和快照。如果您需要的角色只允許刪除圖片,則必須建立自訂角色。在自訂角色中加入下列權限:

  • compute.images.delete 可刪除圖片
  • compute.images.list 使用者是否需要在專案或機構中列出圖片
  • compute.images.get 來取得圖片

主控台

如要授予刪除特定圖片的權限,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Images」頁面。

    前往「圖片」

  2. 選取要授權的圖片。

  3. 如要展開權限欄,請按一下「顯示資訊面板」

  4. 如要新增一或多位成員,請按一下「Add principal」

  5. 在「New principals」(新增主體) 欄位中,輸入要與其分享圖片的使用者電子郵件地址。

    例如:

    • Google 帳戶電子郵件:test-user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com
  6. 在「Role」清單中,將游標懸停在「Compute Engine」上,然後選取「Storage Admin」,或從「Custom」清單中選取自訂角色。

  7. 選用:如要進一步控制使用者對 Google Cloud 資源的存取權,請新增條件式角色繫結

  8. 儲存變更。

如要授予刪除專案或機構圖片的權限,請按照下列步驟操作:

  1. 前往專案或機構的「身分與存取權管理」頁面。

    前往身分與存取權管理頁面

  2. 按一下「授予存取權」

  3. 在「New principals」(新增主體) 欄位中,輸入您要授予存取權的使用者身分識別資訊。例如:

    • Google 帳戶電子郵件:test-user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com
  4. 在「Role」清單中,將游標懸停在「Compute Engine」上,然後選取「Storage Admin」,或從「Custom」清單中選取自訂角色。

  5. 選用:如要進一步控制使用者對 Google Cloud 資源的存取權,請新增條件式角色繫結

  6. 儲存變更。

gcloud

如要授予組織層級的圖片刪除權限,請使用 gcloud organizations add-iam-policy-binding 指令

gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
    --member='MEMBER' \
    --role='ROLE'

如要授予專案層級的圖片刪除權限,請使用 gcloud projects add-iam-policy-binding 指令

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='ROLE'

如要授予刪除特定圖片的權限,請使用 gcloud compute images add-iam-policy-binding 指令

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

更改下列內容:

  • ORGANIZATION_IDPROJECT_IDIMAGE_NAME:12 位數的組織 ID、專案 ID 或圖片名稱,例如 123456578920my-project-1my-custom-image
  • MEMBER:您要授予角色的有效身分

    例如:

    • Google 帳戶電子郵件:user:user@gmail.com
    • Google 網路論壇:group:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:serviceAccount:server@example.gserviceaccount.com
    • Google Workspace 網域:domain:example.com
  • ROLE:要指派給此身分的角色,例如 roles/compute.storageAdmin 角色,或 roles/customImageDeletionRole 等自訂角色

REST

  1. 使用資源的對應 getIamPolicy 方法讀取現有政策。如要取得專案,請使用 projects.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    PROJECT_ID 替換為專案 ID。

    如果是機構,請使用 organizations.getIamPolicy 方法

    POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORGANIZATION_ID:getIamPolicy
    

    ORGANIZATION_ID 替換為 12 位數的機構 ID。

    如要取得特定圖片,請使用 images.getIamPolicy 方法

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    更改下列內容:

    • PROJECT_ID:專案 ID
    • IMAGE_NAME:圖片名稱

    Compute Engine 會在回應中傳回目前的政策。

  2. 如要新增或移除成員及其相關角色,您可以使用文字編輯器編輯政策。請使用下列格式新增成員:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    舉例來說,如要將 roles/compute.storageAdmin 角色授予 user:test-email@example.com,請將下列繫結新增至政策:

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.storageAdmin"
    }
    
  3. 使用 setIamPolicy 方法編寫更新後的政策。

    舉例來說,如要在專案層級設定政策,請使用 project.setIamPolicy 方法。在要求主體中,提供先前步驟中更新的 IAM 政策。

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

    PROJECT_ID 替換為專案 ID。

授予在機構內分享自訂圖片的權限

如果您的專案屬於某個機構,該機構可能會有多個其他專案,且這些專案對其他專案的存取權限層級各不相同。建立自訂圖片時,您可以將這些圖片與機構內其他專案的其他使用者分享。

Compute Engine 提供下列預先定義的 IAM 角色,可用於管理映像檔:

  • Compute 映像檔使用者 (roles/compute.imageUser):在要求中列出、讀取及使用圖片的權限,但不具備圖片的其他權限
  • Compute 儲存空間管理員 (roles/compute.storageAdmin):建立、修改及刪除磁碟、映像檔和快照的權限

或者,您也可以建立自己的自訂 IAM 角色

最佳做法是將所有自訂圖片保留在專門用於代管這些圖片的單一專案中。這項做法可改善這些圖片的管理方式,讓您只授予特定團隊所需圖片的存取權。您也可以授予團隊對整個圖像專案的存取權,但由於團隊對整個圖像專案的存取權違反最低權限原則,因此我們不建議這麼做。

以下範例說明如何新增群組,讓該群組的使用者能夠存取圖片。

主控台

  1. 前往 Google Cloud 控制台的「Images」頁面。

    前往「圖片」

  2. 選取要與其他使用者分享的圖片。

  3. 如要展開權限欄,請按一下「顯示資訊面板」

  4. 如要新增一或多位成員,請按一下「Add principal」

  5. 在「New principals」(新增主體) 欄位中,輸入要與其分享圖片的使用者電子郵件地址。

    例如:

    • Google 帳戶電子郵件:test-user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com
  6. 在「角色」清單中,將游標懸停在「Compute Engine」上,然後選取「映像檔使用者」或「儲存空間管理員」,或選取自訂角色。

  7. 選用:如要進一步控制使用者對 Google Cloud資源的存取權,請新增條件式角色繫結

  8. 儲存變更。

如要讓使用者從 Google Cloud 控制台啟動共用自訂圖片,請授予使用者圖片專案的「Viewer」IAM 角色 (roles/viewer)。授予這個角色有助於確保共用圖片會顯示在圖片選取清單中。

  1. 前往 Google Cloud 控制台的「IAM」IAM(身分與存取權管理) 頁面。

    前往身分與存取權管理頁面

  2. 按一下「授予存取權」

  3. 在「New principals」(新增主體) 欄位中,輸入要與其分享圖片的使用者電子郵件地址。例如:

    • Google 帳戶電子郵件:test-user@gmail.com
    • Google 群組:admins@googlegroups.com
    • 外部識別資訊提供者的識別資訊:principal://iam.googleapis.com/locations/global/workforcePools/altostrat-contractors/subject/raha@altostrat.com
    • 服務帳戶:server@example.gserviceaccount.com
    • Google Workspace 網域:example.com
  4. 在「Role」清單中,將游標懸停在「Project」上,然後選取「Viewer」

  5. 選用:如要進一步控制使用者對 Google Cloud資源的存取權,請新增條件式角色繫結

  6. 儲存變更。

gcloud

如要更新特定映像檔的 IAM 政策,請使用 gcloud compute images add-iam-policy-binding 指令

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

更改下列內容:

  • IMAGE_NAME:圖片名稱,例如 custom-centos-8
  • MEMBER:您要授予角色的有效身分

    例如:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE:要指派此身分的角色,例如 roles/compute.imageUserroles/compute.storageAdmin 或自訂角色

您可以選擇讓使用者在 images.list 要求中查看這些共用圖片,方法是使用 gcloud projects add-iam-policy-binding 指令,為使用者授予圖片專案的「檢視者」IAM 角色 (roles/viewer)。如果您不需要使用者能夠查看共用圖片清單,可以略過這個步驟。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/viewer'

REST

  1. 使用資源的 getIamPolicy 方法讀取現有政策。舉例來說,如要取得特定映像檔的政策,請使用 images.getIamPolicy 方法

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬專案的專案 ID
    • IMAGE_NAME:圖片名稱

    Compute Engine 會在回應中傳回目前的政策。

  2. 如要新增或移除成員及其相關角色,請使用文字編輯器編輯政策。請使用下列格式新增成員:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    舉例來說,如要將 roles/compute.imageUser 授予 test-email@example.com,請將下列繫結加入政策:

    {
     "members": [
       "user:test-email@example.com"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. 使用 setIamPolicy 方法編寫更新後的政策。舉例來說,如要為特定映像檔設定政策,請使用 project.setIamPolicy 方法。在要求主體中,提供先前步驟中更新的 IAM 政策。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬專案的專案 ID
    • IMAGE_NAME:圖片名稱

您可以選擇讓使用者在 images.list 要求中查看這些共用圖片,方法是使用 projects.setIamPolicy 方法,為使用者授予圖片專案的 Viewer IAM 角色 (roles/viewer)。如果您不希望使用者能夠查看分享圖片清單,可以略過這個步驟。

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

授予權限,在機構之間分享自訂圖片

建立自訂圖片目錄,可用於與機構外部的合作夥伴、使用者或承包商共用圖片。如要與機構外部的使用者共用圖片,請將他們新增為專案的圖片使用者:

主控台

  1. 前往 Google Cloud 控制台的「Images」頁面。

    前往「圖片」

  2. 選取要與其他使用者分享的圖片。

  3. 如要展開權限欄,請按一下「顯示資訊面板」

  4. 如要新增一或多位成員,請按一下「Add principal」

  5. 在「新增主體」欄位中,輸入要與之分享圖片的群組電子郵件地址。例如:admins@example.com

  6. 在「角色」清單中,將指標懸停在「Compute Engine」上,然後選取「Compute Image User」

  7. 選用:如要進一步控制使用者對 Google Cloud資源的存取權,請新增條件式角色繫結

  8. 儲存變更。

如要讓使用者從 Google Cloud 控制台啟動共用自訂圖片,請授予使用者圖片專案的「Viewer」IAM 角色 (roles/viewer)。授予這個角色有助於確保共用圖片會顯示在圖片選取清單中。

  1. 前往 Google Cloud 控制台的「IAM」IAM(身分與存取權管理) 頁面。

    前往身分與存取權管理頁面

  2. 按一下「授予存取權」

  3. 在「New principals」(新增主體) 欄位中,輸入要與其分享圖片的使用者電子郵件地址。例如:admins@example.com

  4. 在「Role」清單中,將游標懸停在「Project」上,然後選取「Viewer」

  5. 選用:如要進一步控制使用者對 Google Cloud資源的存取權,請新增條件式角色繫結

  6. 儲存變更。

gcloud

如要將 roles/compute.imageUser 角色授予使用者,請使用 gcloud compute images add-iam-policy-binding 指令

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='roles/compute.imageUser'

更改下列內容:

  • IMAGE_NAME:圖片名稱,例如 custom-centos-8
  • MEMBER:您要授予角色的有效身分,例如 group:admins@example.com

您可以選擇讓使用者在 images.list 要求中查看這些共用圖片,方法是使用 gcloud projects add-iam-policy-binding 指令,為使用者授予圖片專案的「檢視者」IAM 角色 (roles/viewer)。如果您不需要使用者能夠查看分享圖片的清單,可以跳過這個步驟。

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='MEMBER' \
    --role='roles/viewer'

REST

  1. 使用資源的 getIamPolicy 方法讀取現有政策。舉例來說,如要取得特定映像檔的政策,請使用 images.getIamPolicy 方法

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬專案的專案 ID
    • IMAGE_NAME:圖片名稱

    Compute Engine 會在回應中傳回目前的政策。

  2. 如要新增或移除成員及其相關角色,您可以使用文字編輯器編輯政策。請使用下列格式新增成員:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com

    舉例來說,如要將 roles/compute.imageUser 授予 test-user@example.com,請將下列繫結新增至政策:

    {
      "members": [
        "user:test-user@example.com"
      ],
      "role":"roles/compute.imageUser"
    }
    
  3. 使用 setIamPolicy 方法編寫更新後的政策。舉例來說,如要為特定映像檔設定政策,請使用 images.setIamPolicy 方法。在要求主體中,提供先前步驟中更新的 IAM 政策。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬專案的專案 ID
    • IMAGE_NAME:圖片名稱

    您可以選擇讓使用者在 images.list 要求中查看這些共用圖片,方法是使用 projects.setIamPolicy 方法,為使用者授予圖片專案的 Viewer IAM 角色 (roles/viewer)。如果您不需要使用者能夠查看分享圖片的清單,可以跳過這個步驟。

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

授予公開分享自訂圖片的權限

您可以與所有已驗證的 Compute Engine 使用者共用自訂映像檔,無論他們是否屬於您的機構或專案皆可。

您只能與所有已驗證的使用者共用資源 (例如圖片),無法與所有已驗證的使用者共用專案或機構組織。這項限制和資源階層有助於防止機構不小心將整個專案分享給所有已驗證的 Compute Engine 使用者。

以下範例說明如何將 Compute 映像檔使用者角色 (roles/compute.imageUser) 授予所有已驗證的 Compute Engine 使用者,以便存取自訂映像檔。

gcloud

如要將圖片設為公開,請使用 gcloud compute images add-iam-policy-binding 指令

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='allAuthenticatedUsers' \
    --role='roles/compute.imageUser'

IMAGE_NAME 替換為資源名稱,例如 my_image

REST

  1. 使用 getIamPolicy 方法讀取現有政策。舉例來說,如要取得特定映像檔的政策,請使用 images.getIamPolicy 方法

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬專案的專案 ID
    • IMAGE_NAME:圖片名稱

    Compute Engine 會在回應中傳回目前的政策。

  2. 如要新增或移除成員及其相關角色,請使用文字編輯器編輯政策:

    {
     "members": [
       "allAuthenticatedUsers"
     ],
     "role":"roles/compute.imageUser"
    }
    
  3. 使用 setIamPolicy 方法編寫更新後的政策。舉例來說,如要為特定映像檔設定政策,請使用 images.setIamPolicy 方法。在要求主體中,提供先前步驟中更新的 IAM 政策。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬專案的專案 ID
    • IMAGE_NAME:圖片名稱

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

Compute Engine 允許您建立執行個體群組,無論是代管非代管執行個體群組。如果您建立的是代管執行個體群組 (MIG),Compute Engine 會使用 Google API 服務代理程式來呼叫 Compute Engine API,並執行與群組相關的動作,例如重建健康狀態不良的執行個體及更新執行個體。

如果您要使用其他專案中的映像檔建立 MIG,請將 Compute Image User 角色 (roles/compute.imageUser) 授予屬於建立 MIG 的專案的 API 服務帳戶。例如:

  1. 專案 A 想要使用專案 B 擁有的映像檔建立 MIG。
  2. 專案 B 將 Compute Image User 角色授予專案 A 的服務帳戶。
  3. 專案 A 現在可以使用專案 B 的映像檔來建立 MIG。

授予 Compute 映像檔使用者角色後,您可以在為代管群組建立執行個體範本時,使用主控台或映像檔的網址,從其他專案存取映像檔。

取得服務帳戶的電子郵件地址

  1. 在 Google Cloud 控制台中,前往要授予服務帳戶存取權的專案的「IAM」頁面。

    前往身分與存取權管理頁面

  2. 如果出現系統提示,請在清單中選取您的專案。

  3. 尋找 Google API 服務代理人,其電子郵件地址的格式如下:

    PROJECT_NUMBER@cloudservices.gserviceaccount.com
    

擷取服務帳戶的電子郵件地址後,請前往下列任一專區:

授予 MIG 存取專案中所有映像檔的權限

取得服務帳戶的電子郵件地址後,您可以將該地址新增至其他專案,並授予 Compute 映像檔使用者角色 (roles/compute.imageUser)。

主控台

  1. 在 Google Cloud 控制台中,前往圖像專案的「IAM」頁面。

    前往身分與存取權管理頁面

  2. 如要新增成員,請按一下 「授予存取權」

  3. 在「新增主體」欄位中,新增服務帳戶電子郵件地址。

  4. 在「角色」清單中,將游標懸停在「Compute」上,然後選取「Compute Image User」

  5. 選用:如要進一步控制使用者對 Google Cloud資源的存取權,請新增條件式角色繫結

  6. 按一下 [儲存]

  7. 切換回服務帳戶的專案。

您現在可以根據映像檔專案中的映像檔建立執行個體範本,並根據執行個體範本建立 MIG

gcloud

使用 gcloud projects add-iam-policy-binding 指令,從映像專案新增服務帳戶:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' --role='roles/compute.imageUser'

更改下列內容:

  • PROJECT_ID:含有您要分享的圖片的專案 ID
  • SERVICE_ACCOUNT_EMAIL:服務帳戶的電子郵件地址

您現在可以根據映像檔專案中的映像檔建立執行個體範本,並根據執行個體範本建立 MIG

REST

  1. 使用 projects.getIamPolicy 方法取得映像檔專案的 IAM 政策:

     POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
     

    PROJECT_ID 替換為圖片專案的專案 ID。

  2. 如要將 roles/compute.imageUser 角色授予服務帳戶,請使用文字編輯器編輯政策:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    SERVICE_ACCOUNT_EMAIL 替換為服務帳戶電子郵件地址。

  3. 使用 projects.setIamPolicy 編寫更新後的政策。在要求主體中,提供先前步驟中更新的 IAM 政策。

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

    PROJECT_ID 替換為圖片專案的產品 ID。

    您現在可以根據映像檔專案中的映像檔建立執行個體範本,並根據執行個體範本建立 MIG

將 MIG 存取權授予專案中的特定映像檔

取得服務帳戶的電子郵件地址後,您可以將該地址新增至其他專案,並為特定映像檔授予 Compute Engine 映像檔使用者角色 (roles/compute.imageUser)。

主控台

  1. 在 Google Cloud 控制台中,前往映像檔專案的「Images」頁面。

    前往「圖片」

  2. 找出要分享的圖片,然後勾選旁邊的核取方塊。

  3. 如要展開權限欄,請按一下「顯示資訊面板」

  4. 在「Permissions」面板中,按一下「Add principal」

  5. 在「新增主體」欄位中,輸入您要與之分享圖片的服務帳戶電子郵件地址。例如:test123@example.domain.com

  6. 在「角色」清單中,選擇「Compute」並選取「Compute Image User」

  7. 選用:如要進一步控制使用者對 Google Cloud 資源的存取權,請新增條件式角色繫結

  8. 按一下 [儲存]

  9. 切換回服務帳戶的專案。

您現在可以根據映像檔專案中的映像檔建立執行個體範本,並根據執行個體範本建立 MIG

gcloud

如要將特定映像檔的存取權授予服務帳戶,請使用 gcloud compute images add-iam-policy-binding 指令

gcloud compute images add-iam-policy-binding IMAGE_NAME \
    --member='serviceAccount:SERVICE_ACCOUNT_EMAIL' \
    --role='roles/compute.imageUser'

更改下列內容:

  • IMAGE_NAME:要分享的圖片名稱
  • SERVICE_ACCOUNT_EMAIL:服務帳戶的電子郵件地址

您現在可以根據映像檔專案中的映像檔建立執行個體範本,並根據執行個體範本建立 MIG

REST

  1. 使用 images.getIamPolicy 方法取得映像檔的 IAM 政策:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖像專案的專案 ID
    • IMAGE_NAME:要分享的圖片名稱
  2. 如要將 roles/compute.imageUser 角色授予服務帳戶,請使用文字編輯器編輯政策:

    {
      "bindings": [
         {
          "role": "roles/compute.imageUser",
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_EMAIL"
          ]
        }
      ]
    }
    

    SERVICE_ACCOUNT_EMAIL 替換為服務帳戶電子郵件地址。

  3. 使用 images.setIamPolicy 方法寫入更新後的政策。在要求主體中,提供先前步驟中更新的 IAM 政策。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:setIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖像專案的專案 ID
    • IMAGE_NAME:要分享的圖片名稱

    您現在可以根據映像檔專案中的映像檔建立執行個體範本,並根據執行個體範本建立 MIG

控管共用映像檔和快照的使用情形

與其他使用者共用圖片後,您可以控管這些使用者在貴機構內使用這些資源的方式。設定 constraints/compute.storageResourceUseRestrictions 限制條件,定義哪些專案的使用者有權使用您的儲存空間資源。

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

  1. 使用 gcloud organization list 指令找出貴機構的機構 ID:

    gcloud organizations list
    
  2. 使用 gcloud resource-manager org-policies describe 指令,取得您機構組織的現有政策設定:

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

    ORGANIZATION_ID 替換為 12 位數的機構 ID。

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

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/organization-id
    
  4. 使用 gcloud resource-manager org-policies set-policy 指令,將 org-policy.yaml 檔案套用至機構組織:

    gcloud resource-manager org-policies set-policy \
       --organization=ORGANIZATION_ID org-policy.yaml
    

    ORGANIZATION_ID 替換為 12 位數的機構 ID。

在組織政策中完成限制條件設定後,請進行測試,確定建立的限制條件是您需要的。

使用其他專案的圖片

如果有人授予您其他專案中一或多張圖片的存取權,您就可以透過在要求中指定圖片專案,存取專案中的這些圖片。

舉例來說,如要使用其他專案中的共用映像檔建立執行個體,請按照「從共用映像檔建立執行個體」一文中的步驟操作。

您也可以從其他專案中的映像檔建立開機磁碟磁區。如要瞭解如何透過映像檔建立開機磁碟,請參閱「建立獨立的開機永久磁碟」一文。

撤銷共用圖片的存取權

當使用者不再需要存取 Compute Engine 資源時,請使用 Google Cloud 控制台、Google Cloud CLI 或 REST 撤銷其存取權。

主控台

  1. 在 Google Cloud 控制台中,前往映像檔專案的「Images」頁面。

    前往「圖片」

  2. 找出要更新的圖片,然後勾選旁邊的核取方塊。

  3. 如要展開權限欄,請按一下「顯示資訊面板」

  4. 展開要移除使用者的角色。

  5. 如要從該角色移除使用者,請按一下 「刪除」

gcloud

如要將使用者從映像檔的角色中移除,請使用 gcloud compute images remove-iam-policy-binding 指令搭配 --member--role 標記:

gcloud compute images remove-iam-policy-binding IMAGE_NAME \
    --member='MEMBER' \
    --role='ROLE'

更改下列內容:

  • IMAGE_NAME:圖片名稱,例如 my_image
  • MEMBER:要移除的 ID

    格式必須為 user|group|serviceAccount:emaildomain:domain。例如:

    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE:要移除身分的角色

如果您要撤銷 Beta 版資源的存取權,請改用 gcloud beta compute 指令。

REST

  1. 使用 images.getIamPolicy 方法讀取現有政策:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images/IMAGE_NAME:getIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬的專案 ID
    • IMAGE_NAME:圖片名稱

    Compute Engine 會在回應中傳回目前的政策。

  2. 如要移除成員及其相關角色,請使用文字編輯器編輯政策。

  3. 使用 images.setIamPolicy 方法寫入更新後的政策。在要求主體中,提供先前步驟中更新的 IAM 政策。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/global/images/IMAGE_NAME:setIamPolicy
    

    更改下列內容:

    • PROJECT_ID:圖片所屬的專案 ID
    • IMAGE_NAME:圖片名稱

後續步驟