GSP190

總覽
Cloud IAM 可提供合適的資源權限管理工具,並具備簡潔和高度自動化的特性。您不會直接授予使用者權限,而是向他們授予繫結了一或多個權限的「角色」。這麼做可將公司內部的職務對應至相關的群組與角色。使用者只會取得完成工作所需的存取權,管理員也能輕鬆將預設權限授予整個使用者群組。
Cloud IAM 中有兩種角色:
預先定義角色是由 Google 建立及維護。角色權限會視需要自動更新,例如 Google Cloud 加入新功能或服務時。
自訂角色是由使用者定義,可繫結一或多個支援的權限以滿足特定需求。自訂角色並非由 Google 維護,因此當 Google Cloud 加入新的權限、功能或服務時,自訂角色不會自動更新。將一或多個可用 Cloud IAM 權限結合,即可建立自訂角色。擁有權限的使用者才能對 Google Cloud 資源執行特定操作。
課程內容
在本實驗室中,您將建立、更新、刪除與還原自訂角色。
事前準備
如想獲得最佳學習成效,建議您熟悉 IAM 角色的概念。
設定和需求
瞭解以下事項後,再點選「Start Lab」按鈕
請詳閱以下操作說明。實驗室活動會計時,且中途無法暫停。點選「Start Lab」後就會開始計時,顯示可使用 Google Cloud 資源的時間。
您將在真正的雲端環境完成實作實驗室活動,而不是模擬或示範環境。為此,我們會提供新的暫時憑證,供您在實驗室活動期間登入及存取 Google Cloud。
為了順利完成這個實驗室,請先確認:
- 可以使用標準的網際網路瀏覽器 (Chrome 瀏覽器為佳)。
注意事項:請使用無痕模式 (建議選項) 或私密瀏覽視窗執行此實驗室,這可以防止個人帳戶和學員帳戶之間的衝突,避免個人帳戶產生額外費用。
- 是時候完成實驗室活動了!別忘了,活動一旦開始將無法暫停。
注意事項:務必使用實驗室專用的學員帳戶。如果使用其他 Google Cloud 帳戶,可能會產生額外費用。
如何開始研究室及登入 Google Cloud 控制台
-
點選「Start Lab」按鈕。如果實驗室會產生費用,畫面上會出現選擇付款方式的對話方塊。左側的「Lab Details」窗格會顯示下列項目:
- 「Open Google Cloud console」按鈕
- 剩餘時間
- 必須在這個研究室中使用的臨時憑證
- 完成這個實驗室所需的其他資訊 (如有)
-
點選「Open Google Cloud console」;如果使用 Chrome 瀏覽器,也能按一下滑鼠右鍵,選取「在無痕視窗中開啟連結」。
接著,實驗室會啟動相關資源,並開啟另一個分頁,顯示「登入」頁面。
提示:您可以在不同的視窗中並排開啟分頁。
注意:如果頁面中顯示「選擇帳戶」對話方塊,請點選「使用其他帳戶」。
-
如有必要,請將下方的 Username 貼到「登入」對話方塊。
{{{user_0.username | "Username"}}}
您也可以在「Lab Details」窗格找到 Username。
-
點選「下一步」。
-
複製下方的 Password,並貼到「歡迎使用」對話方塊。
{{{user_0.password | "Password"}}}
您也可以在「Lab Details」窗格找到 Password。
-
點選「下一步」。
重要事項:請務必使用實驗室提供的憑證,而非自己的 Google Cloud 帳戶憑證。
注意:如果使用自己的 Google Cloud 帳戶來進行這個實驗室,可能會產生額外費用。
-
按過後續的所有頁面:
- 接受條款及細則。
- 由於這是臨時帳戶,請勿新增救援選項或雙重驗證機制。
- 請勿申請免費試用。
Google Cloud 控制台稍後會在這個分頁開啟。
注意:如要使用 Google Cloud 產品和服務,請點選「導覽選單」,或在「搜尋」欄位輸入服務或產品名稱。
啟動 Cloud Shell
Cloud Shell 是搭載多項開發工具的虛擬機器,提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作。Cloud Shell 提供指令列存取權,方便您使用 Google Cloud 資源。
-
點按 Google Cloud 控制台頂端的「啟用 Cloud Shell」圖示
。
-
系統顯示視窗時,請按照下列步驟操作:
- 繼續操作 Cloud Shell 視窗。
- 授權 Cloud Shell 使用您的憑證發出 Google Cloud API 呼叫。
連線建立完成即代表已通過驗證,而且專案已設為您的 Project_ID:。輸出內容中有一行文字,宣告本工作階段的 Project_ID:
Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}
gcloud
是 Google Cloud 的指令列工具,已預先安裝於 Cloud Shell,並支援 Tab 鍵自動完成功能。
- (選用) 您可以執行下列指令來列出使用中的帳戶:
gcloud auth list
- 點按「授權」。
輸出內容:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (選用) 您可以使用下列指令來列出專案 ID:
gcloud config list project
輸出內容:
[core]
project = {{{project_0.project_id | "PROJECT_ID"}}}
注意:如需 gcloud
的完整說明,請前往 Google Cloud 參閱 gcloud CLI 總覽指南。
設定專案區域
請執行以下指令來設定專案區域:
gcloud config set compute/region {{{project_0.default_region | Region}}}
IAM 自訂角色簡介
Cloud IAM 也能建立自訂 Cloud IAM 角色。您可以建立具有一或多個權限的自訂 Cloud IAM 角色,再將角色授予使用者。Cloud IAM 還提供 UI 和 API,能用於建立及管理自訂角色。
重要事項:自訂角色可讓您實施最小權限原則,確保組織中的使用者與服務帳戶只具有執行預期職務所需的權限。
注意:您可以在機構層級和專案層級建立自訂角色,但無法在資料夾層級建立自訂角色。
將一或多個可用 Cloud IAM 權限結合,即可建立自訂角色。擁有權限的使用者才能對 Google Cloud 資源執行特定操作。
在 Cloud IAM,權限皆以下列格式表示:
<service>.<resource>.<verb>
例如:compute.instances.list
權限可讓使用者列出自己擁有的 Compute Engine 執行個體;而 compute.instances.stop
則能讓使用者停止 VM。
權限通常 (但並非絕對) 與 REST 方法有 1:1 的對應關係。也就是說,每個 Google Cloud 服務對於擁有的每個 REST 方法,都有關聯的權限。如要呼叫方法,呼叫者就需要有相關權限。例如:topic.publish()
的呼叫者需要 pubsub.topics.publish
權限。
自訂角色只可用於向相同專案或機構授予政策中的權限,這些專案或機構擁有自訂角色下層的角色或資源。您無法針對某個專案或機構擁有的資源,授予另一個專案或機構的自訂角色。
所需權限和角色
如要建立自訂角色,呼叫者必須擁有 iam.roles.create
權限。
使用者 (包括機構管理員) 如果不是擁有者,就必須指派為「機構角色管理員」角色 (roles/iam.organizationRoleAdmin) 或「IAM 角色管理員」角色 (roles/iam.roleAdmin)。「IAM 安全性審查者」角色 (roles/iam.securityReviewer) 提供了查看自訂角色的功能,但不含管理功能。
自訂角色的使用者介面位於 Cloud 控制台的「IAM 角色」下方。這個介面只提供給具有建立或管理自訂角色權限的使用者。根據預設,只有專案擁有者可建立新的角色。專案擁有者可以透過為相同專案中的其他使用者授予「IAM 角色管理員」角色,來控制這項功能的存取權。而對機構而言,只有機構管理員能授予「機構角色管理員」角色。
準備建立自訂角色
建立自訂角色前,您可能會想瞭解以下內容:
- 哪些權限可套用至資源
- 可對資源授予哪些角色
- 角色的中繼資料是什麼
工作 1:檢視資源的可用權限
建立自訂角色前,您可能會想知道哪些權限可套用至資源。您可以透過 gcloud 指令列工具、Cloud 控制台或 IAM API,取得可套用到資源及階層下方資源的所有權限。例如,您能夠取得可套用在機構和機構內專案的所有權限。
gcloud iam list-testable-permissions //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
輸出內容:
name: appengine.applications.create
stage: GA
---
name: appengine.applications.get
stage: GA
---
name: appengine.applications.update
stage: GA
---
name: appengine.instances.delete
stage: GA
---
name: appengine.instances.get
stage: GA
---
name: appengine.instances.list
stage: GA
---
customRolesSupportLevel: TESTING
name: appengine.memcache.addKey
stage: BETA
---
customRolesSupportLevel: TESTING
name: appengine.memcache.flush
stage: BETA
---
工作 2:取得角色中繼資料
在建立自訂角色前,建議您取得預先定義角色和自訂角色的中繼資料。角色中繼資料包括角色 ID 和角色擁有的權限。您可以使用 Cloud 控制台或 IAM API 查看中繼資料。
- 如要查看角色中繼資料,請使用下列指令,將
[ROLE_NAME]
替換為要查看的角色,例如 roles/viewer
或 roles/editor
:
gcloud iam roles describe [ROLE_NAME]
輸出內容範例 (roles/viewer):
description: Read access to all custom roles in the project.
etag: AA==
includedPermissions:
- iam.roles.get
- iam.roles.list
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
...
...
name: roles/iam.roleViewer
stage: GA
title: Viewer
工作 3:查看可針對資源授予的角色
您可以使用 gcloud iam list-grantable-roles
指令,傳回可套用到特定資源的所有角色清單。
- 請執行下列
gcloud
指令,從專案列出可授予的角色:
gcloud iam list-grantable-roles //cloudresourcemanager.googleapis.com/projects/$DEVSHELL_PROJECT_ID
輸出內容應如下所示:
---
description: Full management of App Engine apps (but not storage).
name: roles/appengine.appAdmin
title: App Engine Admin
---
description: Ability to view App Engine app status.
name: roles/appengine.appViewer
title: App Engine Viewer
---
description: Ability to view App Engine app status and deployed source code.
name: roles/appengine.codeViewer
title: App Engine Code Viewer
---
...
...
工作 4:建立自訂角色
如要建立自訂角色,呼叫者必須擁有 iam.roles.create
權限。根據預設,專案或機構的擁有者具備這個權限,並且能建立和管理自訂角色。
使用者 (包括機構管理員) 如果不是擁有者,就必須指派為機構角色管理員角色,或 IAM 角色管理員角色。
請使用 gcloud iam roles create
指令建立新的自訂角色,方法有兩種:
- 提供包含角色定義的 YAML 檔案
- 使用標記指定角色定義
建立自訂角色時,您必須使用 --organization [ORGANIZATION_ID]
或 --project [PROJECT_ID]
標記,指定角色應用於機構層級或專案層級。下列各個範例是在專案層級中建立自訂角色。
在接下來的幾節中,您要在專案層級建立自訂角色。
使用 YAML 檔案建立自訂角色
您可以建立包含自訂角色定義的 YAML 檔案,這個檔案必須按照以下方式建構:
title: [ROLE_TITLE]
description: [ROLE_DESCRIPTION]
stage: [LAUNCH_STAGE]
includedPermissions:
- [PERMISSION_1]
- [PERMISSION_2]
各個預留位置值如下所述:
-
[ROLE-TITLE]
是角色的好記名稱,例如 Role Viewer。
-
[ROLE_DESCRIPTION]
是角色的相關簡短說明,例如 My custom role description。
-
[LAUNCH_STAGE]
表示角色在推出生命週期中的階段,例如 ALPHA、BETA 或 GA。
-
includedPermissions
指定要加入自訂角色中的一或多個權限的清單,例如 iam.roles.get。
- 讓我們開始吧!請執行下列指令,建立角色定義 YAML 檔案:
nano role-definition.yaml
- 在 YAML 檔案中加入這個自訂角色定義:
title: "Role Editor"
description: "Edit access for App Versions"
stage: "ALPHA"
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
-
接著依序按下 CTRL+X 鍵、Y 鍵和 ENTER 鍵,儲存並關閉檔案。
-
執行下列 gcloud
指令:
gcloud iam roles create editor --project $DEVSHELL_PROJECT_ID --file role-definition.yaml
如果角色建立成功,就會傳回下列回應:
Created role [editor].
description: Edit access for App Versions
etag: BwVs4O4E3e4=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
stage: ALPHA
title: Role Editor
點選「Check my progress」,確認目標已達成。
使用 YAML 檔案建立自訂角色
使用標記建立自訂角色
接下來請使用旗標方法建立新的自訂角色。這些旗標的格式與 YAML 檔案類似,因此您可以輕鬆瞭解指令的建構方式。
- 執行下列
gcloud
指令,使用旗標建立新角色:
gcloud iam roles create viewer --project $DEVSHELL_PROJECT_ID \
--title "Role Viewer" --description "Custom role description." \
--permissions compute.instances.get,compute.instances.list --stage ALPHA
輸出內容範例:
Created role [viewer].
description: Custom role description.
etag: BwVs4PYHqYI=
includedPermissions:
- compute.instances.get
- compute.instances.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: ALPHA
title: Role Viewer
點選「Check my progress」,確認目標已達成。
使用標記建立自訂角色
工作 5:列出自訂角色
- 如要列出自訂角色,請執行以下
gcloud
指令,並指定專案層級或機構層級的自訂角色:
gcloud iam roles list --project $DEVSHELL_PROJECT_ID
輸出內容範例:
---
description: Edit access for App Versions
etag: BwVxLgrnawQ=
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
title: Role Editor
---
description: Custom role description.
etag: BwVxLg18IQg=
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
title: Role Viewer
如要列出已刪除的角色,您也可以指定 --show-deleted
標記。
- 如要列出預先定義角色,則執行以下
gcloud
指令:
gcloud iam roles list
工作 6:更新現有自訂角色
這是更新資源中繼資料的常見模式,以自訂角色為例:首先讀取角色的目前狀態,在本機上更新資料,然後傳送已修改的資料以供寫入。如果有兩個以上的獨立程序同時嘗試相同順序,這個模式可能會產生衝突。
例如,如果專案有兩位擁有者同時嘗試對角色執行彼此衝突的變更,有些變更可能會失敗。
Cloud IAM 能透過在自訂角色中使用 etag
屬性來解決這個問題。這個屬性可用於確認自訂角色自上一次要求以來是否變更。當您使用 etag 值對 Cloud IAM 提出要求時,Cloud IAM 會比較要求中的 etag 值和與自訂角色相關聯的現有 etag 值。只有在兩個 etag 值彼此相符時,系統才會執行寫入變更。
您可以透過以下任一方法,使用 gcloud iam roles update
指令更新自訂角色。
- 內含已更新角色定義的 YAML 檔案
- 指定已更新角色定義的旗標
更新自訂角色時,您必須使用 --organization [ORGANIZATION_ID]
或 --project [PROJECT_ID]
標記,指定這個角色應用於機構層級或專案層級。下列各個範例是在專案層級中建立自訂角色。
describe
指令可傳回角色定義,並包含專門用於辨識角色目前版本的 etag 值。您必須在已更新角色定義中提供 etag 值,以確保並行角色變更並未遭到覆寫。
使用 YAML 檔案更新自訂角色
- 執行下列
gcloud
指令來取得角色目前的定義,並將 [ROLE_ID]
替換為 editor。
gcloud iam roles describe [ROLE_ID] --project $DEVSHELL_PROJECT_ID
describe
指令傳回以下輸出內容:
description: [ROLE_DESCRIPTION]
etag: [ETAG_VALUE]
includedPermissions:
- [PERMISSION_1]
- [PERMISSION_2]
name: [ROLE_ID]
stage: [LAUNCH_STAGE]
title: [ROLE_TITLE]
-
複製輸出內容,用於在接下來的步驟中建立新的 YAML 檔案。
-
使用編輯器建立 new-role-definition.yaml
檔案:
nano new-role-definition.yaml
- 貼上前一個指令的輸出內容,然後在
includedPermissions
下方新增以下兩個權限:
- storage.buckets.get
- storage.buckets.list
完成後,YAML 檔案將如下所示:
description: Edit access for App Versions
etag: BwVxIAbRq_I=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
stage: ALPHA
title: Role Editor
-
接著依序按下 CTRL+X 鍵、Y 鍵和 ENTER 鍵,儲存並關閉檔案。
-
接著使用 update
指令來更新檔案。執行下列 gcloud
指令,將 [ROLE_ID]
替換為 editor:
gcloud iam roles update [ROLE_ID] --project $DEVSHELL_PROJECT_ID \
--file new-role-definition.yaml
如果角色更新成功,系統會傳回以下回應:
description: Edit access for App Versions
etag: BwVxIBjfN3M=
includedPermissions:
- appengine.versions.create
- appengine.versions.delete
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/editor
stage: ALPHA
title: Role Editor
點選「Check my progress」,確認目標已達成。
使用 YAML 檔案更新自訂角色
使用標記更新自訂角色
您可以使用相應的標記,更新角色定義的各個部分。如需 SDK 參考文件中所有可用旗標的清單,請參閱 gcloud iam roles update 主題。
使用下列旗標新增或移除權限:
-
--add-permissions
:為角色新增一或多個以半形逗號分隔的權限。
-
--remove-permissions
:移除角色中一或多個以半形逗號分隔的權限。
或者,您可以透過 --permissions [PERMISSIONS]
標記指定新權限,並提供以半形逗號分隔的權限清單來取代現有的權限清單。
- 執行下列
gcloud
指令,使用標記將權限新增到 viewer 角色:
gcloud iam roles update viewer --project $DEVSHELL_PROJECT_ID \
--add-permissions storage.buckets.get,storage.buckets.list
如果角色更新成功,系統會傳回以下回應:
description: Custom role description.
etag: BwVxLi4wTvk=
includedPermissions:
- compute.instances.get
- compute.instances.list
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: ALPHA
title: Role Viewer
點選「Check my progress」,確認目標已達成。
使用標記更新自訂角色
工作 7:停用自訂角色
角色停用後,與角色相關的所有政策繫結都會停用,這代表系統不會授予角色中的權限 (即使您將角色授予使用者)。
如要停用現有自訂角色,最簡單的方式就是使用 --stage
旗標,並將其設為 DISABLED。
- 執行下列
gcloud
指令,停用 viewer 角色:
gcloud iam roles update viewer --project $DEVSHELL_PROJECT_ID \
--stage DISABLED
如果角色更新成功,系統會傳回以下回應:
description: Custom role description.
etag: BwVxLkIYHrQ=
includedPermissions:
- compute.instances.get
- compute.instances.list
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: DISABLED
title: Role Viewer
點選「Check my progress」,確認目標已達成。
停用自訂角色
工作 8:刪除自訂角色
- 您可以使用
gcloud iam roles delete
指令刪除自訂角色。刪除後,角色將處於未啟用狀態,且無法用來建立新的 IAM 政策繫結:
gcloud iam roles delete viewer --project $DEVSHELL_PROJECT_ID
輸出內容範例:
deleted: true
description: Custom role description.
etag: BwVxLkf_epw=
includedPermissions:
- compute.instances.get
- compute.instances.list
- storage.buckets.get
- storage.buckets.list
name: projects/{{{project_0.project_id | Project ID}}}/roles/viewer
stage: DISABLED
title: Role Viewer
系統刪除角色後,現有的繫結仍會存在,但處於停用狀態。角色可以在 7 天內取消刪除。7 天後,這個角色就會進入永久刪除程序,程序將持續進行 30 天。37 天後,角色 ID 即可再次使用。
注意:如果角色將逐步淘汰,請將其 role.stage 屬性變更為 DEPRECATED,然後設定「deprecation_message」,讓使用者知道應使用哪些替代角色,或可從何處瞭解更多資訊。
工作 9:還原自訂角色
- 您可以在 7 天內還原角色。已刪除角色會處於「停用」狀態。如要還原角色,請更新
--stage
旗標:
gcloud iam roles undelete viewer --project $DEVSHELL_PROJECT_ID
點選「Check my progress」,確認目標已達成。
取消刪除自訂角色
恭喜!
在這個實驗室,您建立並管理了 IAM 中的自訂角色。
後續步驟/瞭解詳情
如想進一步瞭解 IAM,請參閱「Cloud Identity and Access Management」。
Google Cloud 教育訓練與認證
協助您瞭解如何充分運用 Google Cloud 的技術。我們的課程會介紹專業技能和最佳做法,讓您可以快速掌握要領並持續進修。我們提供從基本到進階等級的訓練課程,並有隨選、線上和虛擬課程等選項,方便您抽空參加。認證可協助您驗證及證明自己在 Google Cloud 技術方面的技能和專業知識。
使用手冊上次更新日期:2024 年 4 月 15 日
實驗室上次測試日期:2023 年 7 月 13 日
Copyright 2025 Google LLC 保留所有權利。Google 和 Google 標誌是 Google LLC 的商標,其他公司和產品名稱則有可能是其關聯公司的商標。