本頁說明如何實踐最低權限原則,授予特定 Compute Engine 資源存取權,而非授予專案、資料夾或機構等上層資源的存取權。
您可以為資源設定身分與存取權管理 (IAM) 政策,藉此授予存取權。這項政策會將一或多位成員 (例如使用者或服務帳戶) 繫結至一或多個角色。每個角色都包含一組權限,讓成員與資源互動。
如果您授予父項資源 (例如專案) 的存取權,就會隱含授予其所有子項資源 (例如該專案中的所有 VM) 的存取權。如要限制資源存取權,請盡可能在較低層級的資源上設定 IAM 政策,而非在專案層級或更高層級設定。
如要進一步瞭解如何授予、變更及撤銷與 Compute Engine 無關的資源存取權 (例如授予 Google Cloud 專案存取權),請參閱 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
-
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.
- 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.
-
必要的角色
如要取得管理 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 替換為您要管理存取權的資源。例如
instances
、instanceTemplates
或images
。
支援的資源
如要查看支援資源層級存取權控制機制的 Compute Engine 資源清單,請參閱「接受 IAM 政策的資源類型」,並篩選 Compute Engine。
對於不支援資源層級存取權控管機制的其他 Compute Engine 資源,您必須在專案、資料夾或機構層級管理這些資源的存取權。如需機構、資料夾或專案的相關資訊,請參閱「資源階層」。
授予 Compute Engine 資源的存取權
主體 (例如使用者或服務帳戶) 可以存取 Compute Engine 資源。身分是主體的屬性。當事人的身分通常以與帳戶相關聯的電子郵件地址表示。
為資源的主體授予 IAM 角色前,請先確認可在特定資源上授予哪些角色。詳情請參閱「查看可針對資源授予的角色」。
如要授予存取特定 Compute Engine 資源的權限,請為該資源設定 身分與存取權管理政策。
主控台
- 在 Google Cloud 控制台中,前往要新增權限的資源對應頁面。
- 如為執行個體,請前往「VM instances」(VM 執行個體) 頁面。
- 如為區域和區域磁碟,請前往「磁碟」頁面。
- 如為快照,請前往「Snapshots」(快照) 頁面。
- 如為映像檔,請前往「Images」(映像檔) 頁面。
- 如為執行個體範本,請前往「Instance templates」(執行個體範本) 頁面。
- 如為機器映像檔,請前往「Machine images」(機器映像檔) 頁面。
- 如需查看預訂資訊,請前往「預訂記錄」頁面。
- 如需瞭解單一用戶群節點,請前往單一用戶群節點頁面。
- 找出您要更新的資源,選取該資源旁邊的核取方塊。
- 請根據資源頁面完成下列步驟。
- 如果是 VM 執行個體,請按一下 「權限」。
- 如要處理其他資源,請完成下列步驟:
- 檢查資訊面板是否顯示。如果未顯示資訊面板,請按一下「Show info panel」。
- 選取 [權限] 分頁標籤。
- 按一下 「新增主體」。
- 新增主體的身分,然後選取必要的角色。
- 若要儲存變更,請按一下 [儲存]。
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_ADDRESS
或domain: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 修改身分與存取權管理政策,請按照下列步驟操作:
使用資源的對應
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」(映像檔) 頁面。
- 如為執行個體群組,請前往「Instance groups」(執行個體群組) 頁面。
- 如為執行個體範本,請前往「Instance templates」(執行個體範本) 頁面。
- 如為機器映像檔,請前往「Machine images」(機器映像檔) 頁面。
- 如需查看預訂資訊,請前往「預訂記錄」頁面。
- 如需瞭解單一用戶群節點,請前往單一用戶群節點頁面。
- 找出您要更新的資源,選取該資源旁邊的核取方塊。
- 請根據資源頁面完成下列步驟。
- 如果是 VM 執行個體,請按一下 「權限」。
- 如要處理其他資源,請完成下列步驟:
- 檢查資訊面板是否顯示。如果未顯示資訊面板,請按一下「Show info panel」。
- 選取 [權限] 分頁標籤。
- 找出要移除主體的角色資訊卡,按一下該角色資訊卡。這會展開資訊卡,並顯示該資源的角色使用者。
- 如要從該角色移除實體,請按一下 「刪除」。
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_ADDRESS
或domain: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 修改身分與存取權管理政策,請按照下列步驟操作:
使用資源的對應
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 身分與存取權管理角色。
- 進一步瞭解預先定義的 Compute Engine 身分與存取權管理角色具備哪些權限。
- 瞭解如何建立及管理自訂角色。