管理 Compute Engine 資源的存取權


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

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

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

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

事前準備

  • 查看 IAM 總覽
  • 閱讀 Compute Engine 存取權控管總覽
  • 熟悉 Compute Engine 的 IAM 角色
  • 如果尚未設定驗證,請先完成設定。 「驗證」是指驗證身分的程序,確認您有權存取 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.
      3. REST

        如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 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.

        詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。

必要的角色

如要取得管理 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 在資源上

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

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

支援的資源

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

如為不支援資源層級存取權控管的其他 Compute Engine 資源,您必須在專案、資料夾或機構層級管理這些資源的存取權。如要瞭解機構、資料夾或專案,請參閱資源階層

授予 Compute Engine 資源的存取權

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

將 IAM 角色授予資源的主體之前,請先查看特定資源有哪些可以授予的角色。詳情請參閱「查看可針對資源授予的角色」。

如要授予存取特定 Compute Engine 資源的權限,請在資源上設定 IAM 政策

主控台

  1. 在 Google Cloud 控制台,前往要新增權限的資源頁面。
  2. 找出您要更新的資源,選取該資源旁邊的核取方塊。
  3. 請根據資源頁面完成下列步驟。
    • 如果是 VM 執行個體,請按一下「權限」
    • 如為其他資源,請完成下列步驟:
      1. 確認資訊面板是否顯示在畫面上。如果沒有顯示,請按一下「顯示資訊面板」
      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 修改 IAM 政策,請按照下列步驟操作:

  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. 確認資訊面板是否顯示在畫面上。如果沒有顯示,請按一下「顯示資訊面板」
      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 直接修改 IAM 政策,請按照下列步驟操作:

  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 政策的建議。

後續步驟