管理 Compute Engine 資源的存取權


本頁說明如何實踐最低權限原則,授予特定 Compute Engine 資源存取權,而非授予專案、資料夾或機構等上層資源的存取權。

您可以為資源設定身分與存取權管理 (IAM) 政策,藉此授予存取權。這項政策會將一或多位成員 (例如使用者或服務帳戶) 繫結至一或多個角色。每個角色都包含一組權限,讓成員與資源互動。

如果您授予父項資源 (例如專案) 的存取權,就會隱含授予其所有子項資源 (例如該專案中的所有 VM) 的存取權。如要限制資源存取權,請盡可能在較低層級的資源上設定 IAM 政策,而非在專案層級或更高層級設定。

如要進一步瞭解如何授予、變更及撤銷與 Compute Engine 無關的資源存取權 (例如授予 Google Cloud 專案存取權),請參閱 IAM 說明文件中的「授予、變更及撤銷資源的存取權」一文。

事前準備

必要的角色

如要取得管理 Compute Engine 資源存取權所需的權限,請要求管理員為您授予該資源的 Compute 管理員 (roles/compute.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。

這個預先定義的角色具備管理 Compute Engine 資源存取權所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:

所需權限

如要管理 Compute Engine 資源的存取權,您必須具備下列權限:

  • 如要授予或撤銷資源存取權,請按照下列步驟操作:
    • compute.projects.get 專案
    • 資源的 compute.RESOURCE_TYPE.get
    • 資源的 compute.RESOURCE_TYPE.getIamPolicy
    • 資源的 compute.RESOURCE_TYPE.setIamPolicy
  • 如要測試呼叫者權限: compute.RESOURCE_TYPE.getIamPolicy on the resource

    RESOURCE_TYPE 替換為您要管理存取權的資源。例如 instancesinstanceTemplatesimages

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

支援的資源

如要查看支援資源層級存取權控制機制的 Compute Engine 資源清單,請參閱「接受 IAM 政策的資源類型」,並篩選 Compute Engine

對於不支援資源層級存取權控管機制的其他 Compute Engine 資源,您必須在專案、資料夾或機構層級管理這些資源的存取權。如需機構、資料夾或專案的相關資訊,請參閱「資源階層」。

授予 Compute Engine 資源的存取權

主體 (例如使用者或服務帳戶) 可以存取 Compute Engine 資源。身分是主體的屬性。當事人的身分通常以與帳戶相關聯的電子郵件地址表示。

為資源的主體授予 IAM 角色前,請先確認可在特定資源上授予哪些角色。詳情請參閱「查看可針對資源授予的角色」。

如要授予存取特定 Compute Engine 資源的權限,請為該資源設定 身分與存取權管理政策

主控台

  1. 在 Google Cloud 控制台中,前往要新增權限的資源對應頁面。
  2. 找出您要更新的資源,選取該資源旁邊的核取方塊。
  3. 請根據資源頁面完成下列步驟。
    • 如果是 VM 執行個體,請按一下 「權限」
    • 如要處理其他資源,請完成下列步驟:
      1. 檢查資訊面板是否顯示。如果未顯示資訊面板,請按一下「Show info panel」
      2. 選取 [權限] 分頁標籤。
  4. 按一下 「新增主體」
  5. 新增主體的身分,然後選取必要的角色。
  6. 若要儲存變更,請按一下 [儲存]

gcloud

如要將角色授予資源上的主體,請使用該資源的 add-iam-policy-binding 子指令,並搭配 --member--role 旗標。

gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \
    --member='PRINCIPAL' \
    --role='ROLE'

更改下列內容:

  • RESOURCE_TYPE:資源類型。有效值包括:
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME:資源名稱。例如:my_instance
  • PRINCIPAL:您要授予角色的主體有效身分。格式必須為 user|group|serviceAccount:EMAIL_ADDRESSdomain:DOMAIN_ADDRESS。例如:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE:要指派給這個主體的角色。

如果您要授予處於預覽階段的資源存取權,請改用 gcloud beta compute 指令。

REST

如要透過 API 修改身分與存取權管理政策,請按照下列步驟操作:

  1. 使用資源的對應 getIamPolicy 方法讀取現有政策。舉例來說,下列 HTTP 要求會讀取 VM 的 IAM 政策:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy

    更改下列內容:

    • PROJECT_ID:這個 VM 所屬專案的專案 ID。
    • ZONE:VM 的可用區。針對區域或全球資源,請將 zones/ZONE 替換為 regions/REGIONglobal
    • VM_NAME:VM 執行個體的名稱。

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

  2. 使用文字編輯器編輯政策,新增或移除主體及其相關角色。舉例來說,如要將 compute.admin 角色授予 email@example.com,請將下列新的繫結加入政策:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. 使用 setIamPolicy() 編寫更新後的政策:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy

    更改下列內容:

    • PROJECT_ID:這個 VM 所屬專案的專案 ID。
    • ZONE:VM 的可用區。針對區域或全球資源,請將 zones/ZONE 替換為 regions/REGIONglobal
    • VM_NAME:VM 執行個體的名稱。

    在要求主體中,提供上一個步驟中更新的 IAM 政策。

撤銷資源存取權

最佳做法是,當實體不再需要存取 Compute Engine 資源時,就撤銷其存取權。

主控台

  1. 在 Google Cloud 控制台中,前往要新增權限的資源對應頁面。
  2. 找出您要更新的資源,選取該資源旁邊的核取方塊。
  3. 請根據資源頁面完成下列步驟。
    • 如果是 VM 執行個體,請按一下 「權限」
    • 如要處理其他資源,請完成下列步驟:
      1. 檢查資訊面板是否顯示。如果未顯示資訊面板,請按一下「Show info panel」
      2. 選取 [權限] 分頁標籤。
  4. 找出要移除主體的角色資訊卡,按一下該角色資訊卡。這會展開資訊卡,並顯示該資源的角色使用者。
  5. 如要從該角色移除實體,請按一下 「刪除」

gcloud

如要從資源的實體移除角色,請使用資源的 remove-iam-policy-binding 子指令,並搭配 --member--role 旗標。

gcloud compute RESOURCE_TYPE remove-iam-policy-binding RESOURCE_NAME \
    --member='MEMBER' \
    --role='ROLE'

更改下列內容:

  • RESOURCE_TYPE:資源類型。有效值包括:
    • disks
    • images
    • instances
    • instance-templates
    • machine-images
    • reservations
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • RESOURCE_NAME:資源名稱。例如:my_instance
  • PRINCIPAL:主要實體的有效身分。格式必須為 user|group|serviceAccount:EMAIL_ADDRESSdomain:DOMAIN_ADDRESS。例如:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • ROLE:您要從中移除主體的角色。

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

REST

如要直接透過 API 修改身分與存取權管理政策,請按照下列步驟操作:

  1. 使用資源的對應 getIamPolicy 方法讀取現有政策。舉例來說,下列 HTTP 要求會讀取 VM 的 IAM 政策:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:getIamPolicy

    更改下列內容:

    • PROJECT_ID:這個 VM 所屬專案的專案 ID。
    • ZONE:VM 的可用區。針對區域或全球資源,請將 zones/ZONE 替換為 regions/REGIONglobal
    • VM_NAME:VM 執行個體的名稱。

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

  2. 使用文字編輯器編輯政策,將成員從相關聯的角色中移除。例如,從 compute.admin 角色中移除 email@example.com:

    {
      "members": [
        "user:owner@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. 使用 setIamPolicy() 編寫更新後的政策:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME:setIamPolicy

    更改下列內容:

    • PROJECT_ID:這個 VM 所屬專案的專案 ID。
    • ZONE:VM 的可用區。針對區域或全球資源,請將 zones/ZONE 替換為 regions/REGIONglobal
    • VM_NAME:VM 執行個體的名稱。

    在要求主體中,提供上一個步驟中更新的 IAM 政策。

測試呼叫者是否擁有權限

如果您不知道身分具備哪些權限,請使用 testIamPermissions API 方法,查看身分可使用的權限。

該方法會將資源網址和權限組合視為輸入參數,並傳回呼叫者允許使用的權限組合。您可以在任何支援的資源上使用此方法。

testIamPermissions 通常適合與您的專屬軟體 (如自訂圖形使用者介面) 整合。如果您直接使用 Google Cloud管理權限,通常不會呼叫 testIamPermissions

舉例來說,如果您是以 Compute Engine API 為基礎來建構 GUI,且您的 GUI 設有用於啟動執行個體的「開始」按鈕,則可透過呼叫 compute.instances.testIamPermissions() 來判定要將該按鈕啟用或停用。

如何測試呼叫者是否擁有資源的特定權限:

  1. 傳送要求到資源,並以清單形式將您要檢查的權限加入要求主體。

    舉例來說,您可能會想要檢查執行個體上的 compute.instances.startcompute.instances.stopcompute.instances.delete

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/testIamPermissions
        {
          "permissions": [
            "compute.instances.start",
            "compute.instances.stop",
            "compute.instances.delete"
           ]
        }
  2. 該要求會傳回已為呼叫者啟用的權限。

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

修改多名成員的資源存取權

如果您想同時修改多位成員的 Compute Engine 資源存取權,請參閱以程式輔助方式修改 IAM 政策的最佳做法。

後續步驟