總覽

本頁介紹 Cloud 身分與存取權管理的基本概念。

Google Cloud Platform (GCP) 提供的 Cloud IAM 可讓您定義「誰」(身分)「有權存取」(角色)「哪些」資源,藉此控管存取權。

IAM

藉由 Cloud IAM,您可以對特定 GCP 資源授予精細的存取權,避免其他資源被擅自存取。Cloud IAM 可讓您依據最小權限安全原則,只將資源開放給必要的對象存取。

在 Cloud IAM 中,您可以為成員授予存取權。成員有以下幾種類型:

  • Google 帳戶
  • 服務帳戶
  • Google 群組
  • G Suite 網域
  • Cloud Identity 網域

Google 帳戶

Google 帳戶代表開發人員、管理員或任何其他與 GCP 進行互動的人。任何與 Google 帳戶關聯的電子郵件地址都可以視為一個身分,包括 gmail.com 或其他網域。新使用者可前往 Google 帳戶註冊頁面註冊一個 Google 帳戶。

服務帳戶

服務帳戶是一種屬於應用程式,而非屬於個別使用者的帳戶。當您執行由 GCP 託管的程式碼時,您可以指定要用哪個帳戶來執行該程式碼。您可以視需要建立多個服務帳戶,以代表應用程式的不同邏輯元件。如要進一步瞭解如何在應用程式中使用服務帳戶,請參閱開始使用驗證功能

Google 群組

Google 群組是 Google 帳戶和服務帳戶的統稱。每個群組都有與之關聯的專屬電子郵件地址。如要查看與 Google 群組關聯的電子郵件地址,請在任何 Google 群組的首頁上按一下 [關於]。如要進一步瞭解 Google 群組的相關資訊,請參閱 Google 群組首頁。

Google 群組提供了一種對一群使用者同時套用存取權政策的有效方法。您可以一次對一整個群組執行存取權授予和變更作業,省去逐一為個別使用者或服務帳戶執行存取權授予和變更作業的麻煩。您還可以輕鬆為 Google 群組新增成員或移除成員,無需再為了新增或移除使用者而頻繁更新 Cloud IAM 政策。

請注意,Google 群組沒有登入憑證,您無法使用 Google 群組建立身分,並用其要求存取資源。

G Suite 網域

G Suite 網域代表在機構 G Suite 帳戶中所建立之所有 Google 帳戶的虛擬群組。 G Suite 網域代表貴機構的網際網路網域名稱 (如 example.com),當您為 G Suite 網域新增使用者時,系統會在此虛擬群組中為該使用者建立一個新的 Google 帳戶 (如 username@example.com)。

與 Google 群組相同,G Suite 網域無法用於建立身分,但卻是一種便利的權限管理方式。

Cloud Identity 網域

Cloud Identity 網域與 G Suite 網域類似,都代表機構中所有 Google 帳戶的虛擬群組。只是,Cloud Identity 網域使用者無法存取 G Suite 應用程式和功能。如要進一步瞭解相關資訊,請參閱關於 Cloud Identity

allAuthenticatedUsers

allAuthenticatedUsers 的值是一種特殊身分識別,代表任何透過 Google 帳戶進行驗證的服務帳戶和使用者。這個識別包含未連結至 G Suite 或 Cloud Identity 網域的帳戶,例如個人 Gmail 帳戶。未通過驗證的使用者,如匿名訪客,不會具有這個識別碼。

allUsers

allUsers 值是一個特殊識別碼,代表網際網路上的任何使用者,包括已驗證和未驗證的使用者。

已驗證成員嘗試存取資源時,Cloud IAM 會檢查資源的 Cloud IAM 政策,以判定是否允許行動。

本節說明與此授權流程有關的實體和概念。

資源

您可以為使用者授予 GCP 資源的存取權。資源的範例包括專案Compute Engine 執行個體Cloud Storage 值區

像是 Compute Engine 和 Cloud Storage 等部分服務,支援比專案層級還要精細的 Cloud IAM 權限授予方式。例如您可將 Storage 管理員 (roles/storage.admin) 角色授予特定 Cloud Storage 值區的使用者,或是可將 Compute 執行個體管理員 (roles/compute.instanceAdmin) 角色授予特定 Compute Engine 執行個體使用者。

在其他情況下,您可以在專案層級授予 Cloud IAM 權限。然後,該專案中的所有資源便會繼承那些權限。例如若要將存取權授予專案中的所有 Cloud Storage 值區,可以向專案授予存取權,而不是向各個個別值區授予存取權。或是如要向專案中的所有 Compute Engine 執行個體授予存取權,可以向專案授予存取權,而不是向各個個別執行個體授予存取權。

如要進一步瞭解哪些資源可以授予哪些角色的相關資訊,請參閱瞭解角色一文,並參閱特定角色的最低資源欄。

權限

權限決定允許對資源執行的作業。在 Cloud IAM 的世界中,權限會以 <service>.<resource>.<verb> 的格式表示,例如 pubsub.subscriptions.consume

權限通常 (但並非絕對) 與 REST 方法有 1:1 的對應關係。也就是說,每個 GCP 服務對於每個相對應的 REST 方法都有一組關聯的權限。該方法的叫用者需要用這些權限來呼叫該方法。例如 Publisher.Publish() 的呼叫者需要 pubsub.topics.publish 權限。

您不可以直接指派權限給使用者。而是應該為使用者指派一個包含一或多個權限的角色

角色

角色是一組權限。您無法直接指派權限給使用者,而是應該授予使用者一個角色。授予使用者角色,就等於是將該角色包含的所有權限授予該使用者。

角色對應的權限

Cloud IAM 中有三種角色:

  • 原始角色:Google Cloud Platform 控制台中原來就提供的角色將會繼續發揮作用。這些角色包括「擁有者」、「編輯者」和「檢視者」

  • 預先定義的角色:預先定義的角色是指其實施的存取控管層級比原始角色還要精細的 Cloud IAM 角色。例如,預先定義的 Pub/Sub 發布者 (roles/pubsub.publisher) 角色「僅」提供發布 Cloud Pub/Sub 主題相關訊息的權限。

  • 自訂角色:這是您自行建立的角色。預先定義的角色不符合需求時,您可以透過自訂角色來設置必要的權限。

如要瞭解如何指派角色給使用者,請參閱授予、變更及撤銷存取權一文。如要進一步瞭解還有哪些更精細的 Cloud IAM 預先定義角色可供使用,請參閱瞭解角色一文。如要進一步瞭解自訂角色的相關資訊,請參閱瞭解自訂角色建立及管理自訂角色的相關說明。

IAM 政策

政策由一組定義誰擁有哪種類型存取權的陳述式組成;您可以透過建立 Cloud IAM 政策來為使用者授予角色。政策可附加至資源並用於控管該資源的存取情形。

IAM 政策

Cloud IAM 政策可以 IAM Policy 物件表示。IAM Policy 物件由一份繫結列表組成。Binding 可將一份 members 列表繫結至 role

role 是您要指派給成員的角色。role 的指派格式為 roles/<name of the role>。例如,roles/storage.objectAdminroles/storage.objectCreatorroles/storage.objectViewer

members 是一份包含一或多個身分的清單;詳細說明請參閱上文的與身分有關的概念一節。每種成員類型都標有用於識別的前置字串,例如 Google 帳戶 (user:)、服務帳戶 (serviceAccount:)、Google 群組 (group:),或者 G Suite 或 Cloud 身分網域 (domain:)。在下方的程式碼片段範例中,storage.objectAdmin 角色被指派給下列含有適當前置字串的成員:user:alice@example.comserviceAccount:my-other-app@appspot.gserviceaccount.comgroup:admins@example.comdomain:google.comobjectViewer 角色則被指派給 user:bob@example.com

以下程式碼片段顯示 Cloud IAM 政策的結構。

{
  "bindings": [
   {
     "role": "roles/storage.objectAdmin",
     "members": [
       "user:alice@example.com",
       "serviceAccount:my-other-app@appspot.gserviceaccount.com",
       "group:admins@example.com",
       "domain:google.com" ]
   },
   {
     "role": "roles/storage.objectViewer",
     "members": ["user:bob@example.com"]
   }
   ]
}

Cloud IAM 和政策 API

Cloud IAM 提供了一組方法,您可以用這組方法來建立和管理 GCP 資源的存取政策。這些方法由支援 Cloud IAM 的服務發佈,例如,Cloud IAM 方法是由 Resource Manager、Cloud Pub/Sub 和 Cloud Genomics API 等服務發佈。

Cloud IAM 方法包括:

  • setIamPolicy():可讓您設定資源的政策。
  • getIamPolicy():可讓您取得之前設定的政策。
  • testIamPermissions():可讓您測試呼叫者是否具有資源的特定權限。

在支援 Cloud IAM 的服務的說明文件中,您可以找到這些方法的相關 API 參考主題。

政策階層

GCP 資源有階層分明的組織架構,以機構節點作為階層的根節點,在機構之下有專案子項,然後在專案之下又有其他資源。每個資源都只能有一個母項。如要進一步瞭解相關資訊,請參閱 Resource Manager 資源階層主題。

下圖為 GCP 資源階層的範例:

資源階層

您可以在資源階層中的任何一個層級設定 Cloud IAM 政策:機構層級、資料夾層級、專案層級或資源層級。資源會繼承母項資源的政策。若您在機構層級設定了一個政策,其下的所有子項專案都會自動繼承該政策;若您在專案層級設定了一個政策,其下的所有子項資源都會自動繼承該政策。會對資源發揮作用的政策,除了在資源層級設定的政策外,還包括資源從上層階級繼承的政策。

政策繼承是可遞移的;換句話說,資源從專案繼承政策,專案從資料夾繼承政策,資料夾從機構繼承政策。因此,機構層級的政策也適用於資源層級。

在上圖的範例中,topic_a 是位於 example-prod 專案之下的 Cloud Pub/Sub 資源。如果您為 example-prod 的 micah@gmail.com 授予編輯者角色,以及為 topic_a 的 song@gmail.com 授予發佈者角色,就等於是將 topic_a 的編輯者角色和發佈者角色有效地分別授予 micah@gmail.com 和 song@gmail.com。

Cloud IAM 政策階層的路徑規則與 GCP 資源階層相同。若您變更了資源階層,政策階層也會一併變更。例如,將專案移動到機構的動作,將會更新該專案的 Cloud IAM 政策,使其繼承機構的 Cloud IAM 政策。

子項政策無法限制在上層政策授予的存取權。例如,如果您為某位使用者授予專案的編輯者角色,然後又為他授予子項資源的檢視者角色,那麼該使用者將同時擁有專案及子項資源的編輯者角色。

Cloud IAM 支援 GCP 服務

Cloud IAM 會對所有 GCP 服務中的每個 API 方法執行檢查,以確認發送 API 要求的帳戶具有使用資源的適當權限。

在使用 Cloud IAM 之前,您只能授予使用者「擁有者」、「編輯者」或「檢視者」這幾種角色,這些角色只能提供廣泛的專案存取權限,無法讓您依據職務細分存取權限。GCP 服務現已推出更多的預先定義角色,這些角色將為您提供比「擁有者」、「編輯者」或「檢視者」角色更加精準的存取權控管能力。例如,Compute Engine 提供了「執行個體管理員」和「網路管理員」等角色,而 App Engine 則提供了「應用程式管理員」和「服務管理員」等角色。這些都是在原有的「擁有者」、「編輯者」和「檢視者」角色以外,多增加的預先定義角色。

大多數 GCP 服務都可以使用預先定義的角色。詳情請參閱所有預先定義角色的清單。如果您需要更大的權限控管能力,您不妨建立一個自訂角色

您可以用「比專案層級還要精細」的方式授予使用者特定角色,藉此控管資源的存取權。例如,您可以建立 Cloud IAM 存取權控管政策,藉此將「訂閱者」角色授予特定 Cloud Pub/Sub 主題的使用者。所有預先定義角色的清單列出接受每個角色的「最低層級」或最精細的資源類型。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud IAM 說明文件