本頁說明如何授予特定 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
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 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 替換為要管理存取權的資源。例如
instances
、instanceTemplates
或images
。
支援的資源
如要查看支援資源層級存取權控管的 Compute Engine 資源清單,請參閱接受 IAM 政策的資源類型,並篩選 Compute Engine。
如為不支援資源層級存取權控管的其他 Compute Engine 資源,您必須在專案、資料夾或機構層級管理這些資源的存取權。如要瞭解機構、資料夾或專案,請參閱資源階層。
授予 Compute Engine 資源的存取權
主體 (例如使用者或服務帳戶) 可以存取 Compute Engine 資源。身分是主體的屬性。主體的 ID 通常以與帳戶相關聯的電子郵件地址表示。
將 IAM 角色授予資源的主體之前,請先查看特定資源有哪些可以授予的角色。詳情請參閱「查看可針對資源授予的角色」。
如要授予存取特定 Compute Engine 資源的權限,請在資源上設定 IAM 政策。
主控台
- 在 Google Cloud 控制台,前往要新增權限的資源頁面。
- 如為執行個體,請前往「VM instances」(VM 執行個體) 頁面。
- 如為區域和地區磁碟,請前往「Disks」(磁碟) 頁面。
- 如為快照,請前往「Snapshots」(快照) 頁面。
- 如為映像檔,請前往「Images」(映像檔) 頁面。
- 如為執行個體範本,請前往「Instance templates」(執行個體範本) 頁面。
- 如為機器映像檔,請前往「Machine images」(機器映像檔) 頁面。
- 如為預留項目,請前往「預留項目」頁面。
- 如為單一用戶群節點,請前往單一用戶群節點頁面。
- 找出您要更新的資源,選取該資源旁邊的核取方塊。
- 請根據資源頁面完成下列步驟。
- 如果是 VM 執行個體,請按一下「權限」 。
- 如為其他資源,請完成下列步驟:
- 確認資訊面板是否顯示在畫面上。如果沒有顯示,請按一下「顯示資訊面板」。
- 選取 [權限] 分頁標籤。
- 按一下「新增主體」 。
- 新增主體的身分,然後選取必要角色。
- 若要儲存變更,請按一下 [儲存]。
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 修改 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 執行個體) 頁面。
- 如為區域和地區磁碟,請前往「Disks」(磁碟) 頁面。
- 如為快照,請前往「Snapshots」(快照) 頁面。
- 如為映像檔,請前往「Images」(映像檔) 頁面。
- 如為執行個體群組,請前往執行個體群組頁面。
- 如為執行個體範本,請前往「Instance templates」(執行個體範本) 頁面。
- 如為機器映像檔,請前往「Machine 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
:資源類型。有效值包括: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 直接修改 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 身分與存取權管理角色具備哪些權限。
- 瞭解如何建立及管理自訂角色。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-31 (世界標準時間)。
-