本頁面說明如何透過授予特定 Compute Engine資源的存取權,而非授予專案、資料夾或機構等上層資源的存取權,來實行最小權限原則。
如要授予資源存取權,請在資源上設定 Identity and Access Management (IAM) 政策。政策會將一或多個成員 (例如使用者或服務帳戶) 繫結至一或多個角色。每個角色都包含權限清單,可讓成員與資源互動。
如果您將存取權授予父項資源 (例如專案),系統會隱含地將存取權授予所有子項資源 (例如該專案中的所有 VM)。如要限制資源存取權,請盡可能在較低層級的資源上設定 IAM 政策,而非專案層級或以上。
如要瞭解如何授予、變更及撤銷與 Compute Engine 無關的資源存取權 (例如授予 Google Cloud 專案存取權),請參閱「授予、變更及撤銷資源的存取權」這篇 IAM 說明文件。
事前準備
- 查看 IAM 總覽。
- 請參閱 Compute Engine 存取權控管總覽。
- 熟悉 Compute Engine 的 IAM 角色 。
-
如果尚未設定驗證,請先完成設定。
驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:
選取這個頁面上範例的預計用途分頁:
控制台
使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,不需要設定驗證。
gcloud
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
-
- 設定預設區域和可用區。
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。
必要的角色
如要取得管理 Compute Engine 資源存取權所需的權限,請要求管理員授予您資源的Compute 管理員 (roles/compute.admin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
這個預先定義的角色具備管理 Compute Engine 資源存取權所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:
所需權限
如要管理 Compute Engine 資源的存取權,必須具備下列權限:
-
如要授予或撤銷資源的存取權,請按照下列步驟操作:
-
專案有
compute.projects.get -
compute.RESOURCE_TYPE.get資源 -
compute.RESOURCE_TYPE.getIamPolicy資源 -
compute.RESOURCE_TYPE.setIamPolicy資源
-
專案有
-
如要測試呼叫者權限:
compute.RESOURCE_TYPE.getIamPolicy在資源上將 RESOURCE_TYPE 替換為要管理存取權的資源。例如
instances、instanceTemplates或images。
支援的資源
如要查看支援資源層級存取權控管的 Compute Engine 資源清單,請參閱「接受 IAM 政策的資源類型」,並篩選 Compute Engine。
對於不支援資源層級存取控管的其他 Compute Engine 資源,您必須在專案、資料夾或機構層級管理這些資源的存取權。如要瞭解機構、資料夾或專案,請參閱「資源階層」。
授予 Compute Engine 資源的存取權
主體 (例如使用者或服務帳戶) 可以存取 Compute Engine 資源。身分是主體的屬性。主體的身份通常以與帳戶相關聯的電子郵件地址表示。
將資源的 IAM 角色授予主體之前,請先查看某項資源有哪些可以授予的角色。詳情請參閱「查看可針對資源授予的角色」。
如要授予存取特定 Compute Engine 資源的權限,請在資源上設定 IAM 政策。
控制台
- 在 Google Cloud 控制台中,前往要新增權限的資源頁面。
- 如為執行個體,請前往「VM instances」(VM 執行個體) 頁面。
- 如要查看區域和可用區磁碟,請前往「磁碟」頁面。
- 如為快照,請前往「Snapshots」(快照) 頁面。
- 如為映像檔,請前往「Images」(映像檔) 頁面。
- 如要使用執行個體範本,請前往執行個體範本頁面。
- 如要查看機器映像檔,請前往「機器映像檔」頁面。
- 如要查看預訂記錄,請前往預訂記錄頁面。
- 如果是單一用戶群節點,請前往「單一用戶群節點」頁面。
- 找出您要更新的資源,選取該資源旁邊的核取方塊。
- 請根據資源頁面完成下列步驟。
- 如果是 VM 執行個體,請按一下 「權限」。
- 如要使用其他資源,請完成下列步驟:
- 確認資訊面板是否顯示在畫面上。如果畫面上未顯示資訊面板,請按一下「顯示資訊面板」。
- 選取 [權限] 分頁標籤。
- 按一下 「新增主體」。
- 新增主體的 ID,然後選取必要角色。
- 點按「儲存」,儲存變更。
gcloud
如要將資源的角色授予主體,請使用該資源的 add-iam-policy-binding 子指令,並加上 --member 和 --role 旗標。
gcloud compute RESOURCE_TYPE add-iam-policy-binding RESOURCE_NAME \
--member='PRINCIPAL' \
--role='ROLE'
更改下列內容:
RESOURCE_TYPE:資源類型。有效值包括:disksimagesinstancesinstance-templatesmachine-imagesreservationssole-tenancy node-groupssole-tenancy node-templatessnapshots
RESOURCE_NAME:資源名稱。例如:my_instance。PRINCIPAL:要授予角色的主體有效身分。格式必須為user|group|serviceAccount:EMAIL_ADDRESS或domain:DOMAIN_ADDRESS。例如:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
ROLE:要指派給這個主體的角色。
如果要授予預先發布資源的存取權,請改用 gcloud beta compute 指令。
REST
如要透過 API 修改 IAM 政策,請按照下列步驟操作:
使用資源的相應
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/REGION或global。VM_NAME:VM 執行個體的名稱。
Compute Engine 會在回應中傳回目前的政策。
使用文字編輯器編輯政策,新增或移除主體及其相關聯的角色。舉例來說,如要將
compute.admin角色授予 email@example.com,請在政策中新增下列繫結:{ "members": [ "user:email@example.com" ], "role":"roles/compute.admin" }使用
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/REGION或global。VM_NAME:VM 執行個體的名稱。
在要求主體中,提供上一個步驟中更新的 IAM 政策。
撤銷資源存取權
最佳做法是,在主體不再需要存取 Compute Engine 資源時,撤銷其存取權。
控制台
- 在 Google Cloud 控制台中,前往要新增權限的資源頁面。
- 如為執行個體,請前往「VM instances」(VM 執行個體) 頁面。
- 如要查看區域和可用區磁碟,請前往「磁碟」頁面。
- 如為快照,請前往「Snapshots」(快照) 頁面。
- 如為映像檔,請前往「Images」(映像檔) 頁面。
- 如果是執行個體群組,請前往「執行個體群組」頁面。
- 如要使用執行個體範本,請前往執行個體範本頁面。
- 如要查看機器映像檔,請前往「機器映像檔」頁面。
- 如要查看預訂記錄,請前往預訂記錄頁面。
- 如果是單一用戶群節點,請前往「單一用戶群節點」頁面。
- 找出您要更新的資源,選取該資源旁邊的核取方塊。
- 請根據資源頁面完成下列步驟。
- 如果是 VM 執行個體,請按一下 「權限」。
- 如要使用其他資源,請完成下列步驟:
- 確認資訊面板是否顯示在畫面上。如果畫面上未顯示資訊面板,請按一下「顯示資訊面板」。
- 選取 [權限] 分頁標籤。
- 按一下要移除主體的角色卡片。這會展開資訊卡,並顯示具有該資源角色的使用者。
- 如要從該角色移除主體,請按一下 「刪除」。
gcloud
如要從資源的主體移除角色,請使用資源的 remove-iam-policy-binding 子指令,並搭配 --member 和 --role 旗標。
gcloud compute RESOURCE_TYPE remove-iam-policy-binding RESOURCE_NAME \
--member='MEMBER' \
--role='ROLE'
更改下列內容:
RESOURCE_TYPE:資源類型。有效值包括:disksimagesinstancesinstance-templatesmachine-imagesreservationssole-tenancy node-groupssole-tenancy node-templatessnapshots
RESOURCE_NAME:資源名稱。 例如:my_instance。PRINCIPAL:主體的有效身分。 格式必須為user|group|serviceAccount:EMAIL_ADDRESS或domain:DOMAIN_ADDRESS。例如:user:test-user@gmail.comgroup:admins@example.comserviceAccount:test123@example.domain.comdomain:example.domain.com
ROLE:要移除主體的角色。
如果要撤銷預先發布資源的存取權,請改用 gcloud beta compute 指令。
REST
如要透過 API 直接修改 IAM 政策,請按照下列步驟操作:
使用資源的相應
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/REGION或global。VM_NAME:VM 執行個體的名稱。
Compute Engine 會在回應中傳回目前的政策。
使用文字編輯器編輯政策,從相關聯的角色中移除成員。舉例來說,從
compute.admin角色中移除 email@example.com:{ "members": [ "user:owner@example.com" ], "role":"roles/compute.admin" }使用
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/REGION或global。VM_NAME:VM 執行個體的名稱。
在要求主體中,提供上一個步驟中更新的 IAM 政策。
測試呼叫者是否擁有權限
如要瞭解身分擁有的權限,請使用 testIamPermissions API 方法,查看身分可用的權限。
這個方法會將資源網址和一組權限做為輸入參數,並傳回呼叫者可用的權限組合。您可以在任何支援的資源上使用這個方法。
通常 testIamPermissions 是用於與專有軟體整合,例如自訂圖形使用者介面。如果您直接使用 Google Cloud管理權限,通常不會呼叫 testIamPermissions。
舉例來說,如果您在 Compute Engine API 上建構 GUI,且 GUI 具有可啟動執行個體的「啟動」按鈕,則可以呼叫 compute.instances.testIamPermissions() 來判斷是否應啟用或停用該按鈕。
如要測試呼叫者是否擁有資源的特定權限:
傳送要求到資源,並以清單形式將您要檢查的權限加入要求主體。
舉例來說,您可能會想要檢查執行個體上的
compute.instances.start、compute.instances.stop和compute.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" ] }該要求會傳回已為呼叫者啟用的權限。
{ "permissions": [ "compute.instances.start", "compute.instances.stop" ] }
為多位成員修改資源存取權
如要同時修改多位成員的 Compute Engine 資源存取權,請參閱以程式輔助方式修改 IAM 政策的建議。
後續步驟
- 瞭解如何使用 IAM 管理自訂映像檔的存取權。
- 進一步瞭解服務帳戶。
- 進一步瞭解 Compute Engine IAM 角色。
- 進一步瞭解預先定義的 Compute Engine IAM 角色所含權限。
- 瞭解如何建立及管理自訂角色。