有了員工身分聯盟,外部識別資訊提供者 (IdP) 的使用者就能透過單一登入 (SSO) 存取 Google Cloud 資源。
什麼是員工身分聯盟?
員工身分聯盟可讓您使用外部識別資訊提供者 (IdP) 驗證員工身分,包括使用者和使用者群組,例如員工、合作夥伴和承包商。使用者之後就能透過 IdP,使用單一登入 (SSO) 存取 Google Cloud 。您可以使用 Identity and Access Management (IAM) 政策,授權員工使用者存取服務 Google Cloud 。
聯盟與同步處理
員工身分聯盟會從 IdP 聯盟身分,因此不會在 Google Cloud中儲存使用者帳戶。因此,員工身分聯盟不需要同步處理,也就是說,您不必使用工具,將 IdP 中的使用者身分同步處理至需要 Google 帳戶的 Google 管理身分。舉例來說,使用 Workforce Identity Federation 時,您不需要使用 Cloud Identity 的 Google Cloud Directory Sync (GCDS)。
員工身分聯盟與 Workload Identity 聯盟
員工身分聯盟會聯合使用者身分,而 Workload Identity 聯盟則會聯合工作負載身分。
詳情請參閱「Workload Identity Federation」。
以屬性為準的存取權
員工身分聯盟擴充了身分識別功能,可支援以屬性為基礎的存取權。 Google Cloud在某些 IdP 中,屬性也稱為「權杖附加資訊」或「聲明」。
使用者通過驗證後,系統會使用從 IdP 收到的屬性,判斷 Google Cloud 資源的存取範圍。
支援的通訊協定
您可以搭配使用員工身分聯盟與支援 OpenID Connect (OIDC) 或 SAML 2.0 的任何 IdP,例如 Microsoft Entra ID、Active Directory Federation Services (AD FS) 和 Okta 等。
基本概念
本節說明員工身分聯盟的重要概念。
工作團隊身分集區
透過員工身分集區,您可以管理員工身分群組和這些身分的 Google Cloud 資源存取權。
集區可讓您執行下列操作:
- 群組使用者身分,例如
employees或partners - 將 IAM 存取權授予整個集區或其中的一部分。
- 連結一或多個 IdP 的身分。
- 為需要類似存取權限的一群使用者定義政策。
- 指定 IdP 專屬設定資訊,包括屬性對應和屬性條件。
- 為第三方身分啟用 Google Cloud CLI 和 API 存取權。
- 將集區內使用者存取權記錄至 Cloud 稽核記錄,並附上集區 ID。
你可以建立多個集區。如需這類做法的範例,請參閱「範例:多個員工身分集區」。
集區是在Google Cloud 機構層級設定,因此請注意下列事項:
- 首次為貴機構設定員工身分聯盟時,請提供集區的專屬名稱。機構中所有集區的名稱皆不得重複,且應清楚說明所含的身分。
- 如果您具備適當的 IAM 權限來查看集區,組織內的所有專案和資料夾都可以依名稱參照該集區。
工作團隊身分集區提供者
員工身分集區提供者是一個實體,會說明 Google Cloud 機構和 IdP 之間的關係。
員工身分聯盟遵循 OAuth 2.0 權杖交換規格 (RFC 8693)。 您將外部身分識別供應商的憑證提供給安全權杖服務,該服務會驗證憑證中的身分,然後傳回短期存取權杖做為交換。 Google Cloud
OIDC 流程類型
對於 OIDC 提供者,員工身分聯盟同時支援授權碼流程和隱含流程。一般認為授權碼流程的安全性最高,因為使用者完成驗證後,權杖會透過獨立的安全後端交易,直接從 IdP 傳回 Google Cloud。因此,程式碼流程交易可以擷取任何大小的權杖,讓您有更多可用的聲明,用於屬性對應和屬性條件。相較之下,在隱含流程中,ID 權杖會從 IdP 傳回瀏覽器。權杖會受到個別瀏覽器網址大小限制。
Google Cloud 員工身分聯盟控制台
員工身分集區中的使用者可以存取員工身分聯盟控制台,也就是控制台 (聯合) Google Cloud 。這些使用者可透過控制台的 UI 存取Google Cloud 支援員工身分聯盟的產品。
SCIM 支援
如果您的 IdP 支援跨網域身分管理系統 (SCIM),您可以設定 IdP,在 Google Cloud中佈建及管理群組。
員工身分聯盟 SCIM 租戶支援在 Gemini Enterprise 中共用。在 IdP 應用程式和員工身分聯盟中設定 SCIM 租戶後,Gemini Enterprise 使用者就能使用群組名稱 (而非物件 ID (UUID)),與群組共用 NotebookLM 筆記本。如要進一步瞭解如何與群組共用記事本,請參閱「與群組共用記事本」。
使用員工身分聯盟 SCIM 支援時,請注意下列事項:
- 設定 SCIM 租戶前,請務必先設定工作團隊身分集區和提供者。
-
每個員工身分集區僅支援一個 SCIM 租戶。如要在同一個員工身分集區中設定新的 SCIM 租戶,請先刪除現有租戶。刪除 SCIM 租戶時,有兩種做法:
- 虛刪除 (預設):刪除 SCIM 租戶後,系統會啟動 30 天的虛刪除期間。這段期間內,系統會隱藏租戶,且無法使用,您也無法在同一個員工身分集區中建立新的 SCIM 租戶。
-
強制刪除:如要永久刪除 SCIM 租戶,請使用 delete 指令搭配
--hard-delete旗標。這項操作無法復原,刪除完成後,您就能在同一個工作團隊身分集區中立即建立新的 SCIM 租戶。
-
使用 SCIM 時,您需要對應工作團隊身分集區提供者和 SCIM 租用戶中的屬性。`google.subject` 屬性必須唯一參照相同身分。您可以使用
--attribute-mapping旗標,在工作團隊身分集區提供者中指定 `google.subject`,並使用--claim-mapping旗標在 SCIM 租戶中指定。以這種方式對應的非專屬身分識別值,可能會導致 Google Cloud將 IdP 中的不同身分識別視為相同身分識別。因此,授予某個使用者或群組身分的存取權,也可能套用至其他身分;撤銷某個身分的存取權,可能不會撤銷所有身分的存取權,導致部分身分仍可存取。 - 如要使用 SCIM 對應群組,請設定 `--scim-usage=enabled-for-groups`。使用 SCIM 對應群組時,系統會忽略員工身分集區供應商中定義的任何群組對應。如要參照 SCIM 管理的群組,對應的屬性為 `google.group`,而非 `google.groups`。`google.groups` 僅參照權杖對應的群組。
- 使用 SCIM 時,透過 `--attribute-mapping` 對應的權杖式屬性仍可用於驗證和主體 ID。
-
設定 Microsoft Entra ID 時,建立工作團隊身分集區提供者時,請勿使用
--extended-attributes旗標。
屬性
IdP 會提供屬性,某些 IdP 會稱之為「權杖附加資訊」。屬性內含使用者的資訊。您可以在屬性對應和屬性條件中使用這些屬性。
屬性對應
您可以使用一般運算語言 (CEL) 對應這些屬性,以供 Google Cloud 使用。
本節說明Google Cloud 提供的必要和選用屬性。
您也可以在 IdP 中定義自訂屬性,供特定 Google Cloud 產品使用,例如 IAM 允許政策。
屬性對應的大小上限為 16 KB。如果屬性對應的大小超過 16 KB 的限制,登入嘗試就會失敗。
屬性如下:
google.subject(必要):驗證使用者的專屬 ID。這通常是 JWT 的主體聲明,因為 Cloud Audit Logs 會將這個欄位的內容記錄為主體。您可以使用這個欄位,為授權決策設定 IAM。建議您不要使用可變動的值,因為如果變更 IdP 使用者目錄中的值,使用者就會失去存取權。長度上限為 127 個位元組。
google.groups(選用):驗證使用者所屬的群組集合。您可以使用部分 CEL 設定邏輯運算式,產生字串陣列。您也可以使用這個欄位,為授權決策設定 IAM。google.groups的限制如下:建議群組名稱不要超過 40 個字元。
如果單一使用者屬於超過 400 個群組,該使用者嘗試登入時會失敗。為減輕這項問題的影響,您必須在聲明中定義較小的群組集,並只對應用於將使用者連結至 Google Cloud的群組。
如果您使用這項屬性在 IAM 中授予存取權,系統會將存取權授予對應群組中的所有成員。因此,建議您確保只有貴機構的授權使用者可以修改對應群組的成員資格。
google.display_name(選用):用於在 Google Cloud 控制台中設定登入使用者名稱的屬性。這項屬性無法用於 IAM 允許政策,也無法用於屬性條件。長度上限為 100 個位元組。
google.profile_photo(選用):使用者縮圖相片的網址。 建議使用 400x400 像素的相片,設定這個屬性後,圖片就會顯示為使用者在 Google Cloud 控制台中的個人資料相片。如果未設定這個值或無法擷取,系統會改為顯示一般使用者圖示。這項屬性無法用於 IAM 允許政策或屬性條件。google.posix_username(選用):符合 POSIX 規範的專屬使用者名稱字串,可用於下列用途:這項屬性無法用於 IAM 允許政策或屬性條件。長度上限為 32 個字元。
google.email(選用):用於將 IdP 中已登入的聯盟使用者電子郵件地址,對應至您使用員工身分聯盟 OAuth 用戶端整合整合的產品。這項屬性無法用於 IAM 允許政策或屬性條件。舉例來說,如要使用 OIDC 通訊協定對應 Okta 的電子郵件地址,請在屬性對應中加入
google.email=assertion.email。支援 OAuth 用戶端整合的產品範例如下: Google Cloud
attribute.KEY(選用):外部 IdP 定義的屬性,存在於使用者的 IdP 權杖中。您可以在 IAM 允許政策中使用自訂屬性,定義授權策略。舉例來說,您可以在 IdP 中選擇定義屬性,例如將使用者的成本中心定義為
costcenter = "1234",然後以以下方式參照主體:principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.costcenter/1234
將 Google Cloud 資源存取權授予這個主體 ID 後,IdP 中設定為將
costcenter屬性設為1234的所有身分,都能存取這些資源。最多可設定 50 項自訂屬性對應規則。每項規則的大小上限為 2048 個字元。
雖然我們未限制您在此對應的屬性,但強烈建議您選擇值穩定的屬性。舉例來說,
attribute.job_description等屬性可能會因多種原因而變更 (例如為了提升可讀性)。建議您改用attribute.role。後者的變更表示指派的責任有所變更,並與授予使用者的存取權變更一致。
你可以使用標準 CEL 函式轉換屬性值。您也可以使用下列自訂函式:
split函式會根據提供的分隔符號值分割字串。舉例來說,如要從電子郵件地址屬性擷取username屬性,方法是將值依@分割並使用第一個字串,請使用下列屬性對應:attribute.username=assertion.email.split("@")[0]join函式會根據提供的分隔符值,合併字串清單。舉例來說,如要填入自訂屬性department,方法是串連字串清單並以.做為分隔符號,請使用下列屬性對應:attribute.department=assertion.department.join(".")
屬性條件
屬性條件是選用的 CEL 運算式,可讓您對 Google Cloud 接受的身分屬性設定限制。
使用屬性條件的好處包括:
- 您可以使用屬性條件,只允許部分外部身分驗證 Google Cloud 專案。舉例來說,您可能只想允許特定團隊中的身分登入,尤其是在使用公開 IdP 時。舉例來說,您可能想允許會計團隊登入,但不允許工程團隊登入。
- 屬性條件可防止用於其他平台的憑證用於 Google Cloud,反之亦然。這有助於避免混淆的代理人問題。 #### 多租戶 IdP 的屬性條件
員工身分聯盟不會維護使用者帳戶目錄,而是實作以聲明為準的身分。因此,如果兩個權杖是由同一個身分提供者 (IdP) 發出,且其聲明對應至相同google.subject值,系統就會假設這兩個權杖識別的是同一位使用者。如要瞭解是哪個 IdP 核發權杖,員工身分聯盟會檢查並驗證權杖的核發者網址。
GitHub 和 Terraform Cloud 等多租戶 IdP 會在所有租戶中使用單一簽發者網址。對於這些供應商,簽發者網址會識別所有 GitHub 或 Terraform Cloud,而非特定 GitHub 或 Terraform Cloud 機構。
使用這些身分提供者時,員工身分聯盟檢查權杖的簽發者網址,確保權杖來自可信來源,且其聲明可信,這還不夠。如果多租戶 IdP 只有一個發行者網址,您必須使用屬性條件,確保只有正確的租戶能存取。
詳細的稽核記錄
詳細的稽核記錄是員工身分聯盟的功能,可將從 IdP 收到的屬性記錄至 Cloud 稽核記錄。
建立工作團隊身分集區供應商時,可以啟用詳細稽核記錄。
如要瞭解如何透過詳細稽核記錄排解屬性對應錯誤,請參閱一般屬性對應錯誤。
JSON 網頁金鑰
工作團隊集區供應商可以存取 IdP 在 jwks_uri 欄位中提供的 JSON Web 金鑰 (JWK) /.well-known/openid-configuration 文件。如果 OIDC 供應商未提供這項資訊,或發行者無法公開存取,您可以在建立或更新 OIDC 供應商時,手動上傳 JWK。
IAM 政策的工作團隊主體 ID
下表列出可授予個別使用者和使用者群組角色的主體 ID。
| 身分 | ID 格式 |
|---|---|
| 工作團隊身分集區中的單一身分 |
principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ATTRIBUTE_VALUE
|
| 群組中的所有員工身分 |
principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/group/GROUP_ID
|
| 具有特定屬性值的所有員工身分 |
principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/attribute.ATTRIBUTE_NAME/ATTRIBUTE_VALUE
|
| 員工身分集區中的所有身分 |
principalSet://iam.googleapis.com/locations/global/workforcePools/POOL_ID/*
|
如需完整的主體 ID 清單,請參閱「主體 ID」。
其他注意事項
本節說明使用員工身分聯盟時的其他注意事項。
限制跨機構存取權
工作團隊身分集區主體無法直接存取所屬機構以外的資源。不過,如果主體在機構內獲得模擬服務帳戶的權限,即可略過這項限制,因為服務帳戶不會受到同等限制。
工作團隊集區使用者專案
大多數 Google Cloud API 會將帳單和配額用量計入專案,而該專案包含 API 要求存取的資源。這些 API 稱為資源型 API。部分 Google Cloud API 會向與用戶端相關聯的專案收費,這類 API 稱為以用戶端為準的 API。用於計費和配額的專案稱為「配額專案」。
建立員工身分聯盟設定檔時,請指定工作團隊集區使用者專案。這個專案用於向應用程式呼叫的 Google API 識別應用程式。除非使用 gcloud CLI 啟動 API 要求,否則工作站集區使用者專案也會做為以用戶端為準的 API 預設配額專案。您必須具備 serviceusage.services.use 權限,這項權限包含在服務使用情形消費者 (roles/serviceusage.serviceUsageConsumer) 角色中,適用於您指定的專案。
如要進一步瞭解配額專案、以資源為準的 API 和以用戶端為準的 API,請參閱「配額專案總覽」。
範例:多個工作團隊身分集區
本節提供範例,說明多個集區的典型用法。
您可以為員工建立一個集區,為合作夥伴建立另一個集區。跨國機構可能會為機構內的不同部門建立個別的集區。集區可進行分散式管理,不同群組可獨立管理各自的集區,且只有集區中的身分可獲得角色。
舉例來說,假設 Enterprise Example Organization 這間公司與 Partner Example Organization Inc 簽約,請對方提供 Google Kubernetes Engine (GKE) DevOps 服務。如要讓合作夥伴範例機構的工作人員提供服務,必須允許他們存取企業範例機構的 Google Kubernetes Engine (GKE) 和其他 Google Cloud 資源。Enterprise Example 機構已有名為 enterprise-example-organization-employees 的員工身分集區。
如要允許 Partner Example Organization 管理 Enterprise Example Organization 資源的存取權,Enterprise Example Organization 會為 Partner Example Organization 員工使用者建立獨立的員工集區,方便 Partner Example Organization 管理。Enterprise Example Organization 會將工作團隊集區提供給 Partner Example Organization 管理員。合作夥伴範例機構的管理員使用自己的 IdP 授予員工存取權。
如要完成這項操作,Enterprise Example Organization 的管理員須執行下列工作:
在 Enterprise Example Organization 的 IdP 中,為 Partner Example Organization 管理員建立身分,例如
partner-organization-admin@example.com。這個 IdP 已在名為enterprise-example-organization-employees的集區中設定。建立名為
example-organization-partner的新工作團隊集區。為
example-organization-partner集區建立下列允許政策:{ "bindings": [ { "role": "roles/iam.workforcePoolEditor", "members": [ "principalSet://iam.googleapis.com/locations/global/workforcePools/enterprise-example-organization-employees/subject/partner-organization-admin@example.com" ] } ] }在 Enterprise Example Organization 的機構中,為
example-organization-partner集區授予資源角色,讓他們存取所需資源。
合作夥伴範例機構的管理員現在可以設定 example-organization-partner 集區,與 IdP 建立連結。然後允許合作夥伴範例機構的工作人員使用合作夥伴範例機構的 IdP 憑證登入。登入後,Partner Example Organization 的工作人員使用者即可存取 Google Cloud 資源,但會受到 Enterprise Example Organization 定義的政策限制。
安全群組最佳做法
在大型企業中,IT 管理員通常會建立安全群組,做為存取控制最佳做法模型的一部分。安全性群組可控管內部資源的存取權。此外,公司通常會為員工建立其他群組,並為合作夥伴建立其他群組,將這項存取權控管模式擴展至雲端資源。這可能會導致深層巢狀群組大量增加,變得難以管理。
貴機構也可能設有政策,限制您可建立的群組數量,以維持使用者目錄層級的合理平坦度。為防止 IAM 政策設定錯誤並限制群組成長,建議使用多個集區,進一步區隔不同機構單位、業務單位和合作夥伴機構的使用者。然後,您可以參照這些集區和集區內含的群組,定義 IAM 政策 (請參閱「設定 IAM」步驟中的範例)。
VPC Service Controls 限制
員工身分聯盟管理功能 (包括員工集區設定 API 和 Security Token Service API) 不支援 VPC Service Controls。不過, Google Cloud 同時支援員工身分聯盟和 VPC Service Controls 的產品,會按照文件說明運作,並接受 VPC Service Controls 政策檢查。此外,您可以在 VPC Service Controls 的輸入或輸出規則中,使用第三方身分,例如員工身分集區使用者和 Workload Identity。
員工身分聯盟和重要聯絡人
使用員工身分聯盟時,您必須提供重要聯絡人,才能接收貴機構或產品異動的重要資訊。Google Cloud Cloud Identity 使用者可透過 Cloud Identity 電子郵件地址聯絡,但員工身分聯盟使用者則透過重要聯絡人聯絡。
使用 Google Cloud 控制台建立或管理員工身分集區時,系統會顯示橫幅,要求您設定「法律」和「停權」類別的重要聯絡人。如果沒有個別聯絡人,也可以在「所有」類別中定義聯絡人。提供聯絡人資訊後,系統就會移除橫幅。
後續步驟
- 如要瞭解如何設定員工身分聯盟,請參閱「設定員工身分聯盟」。如需 IdP 專屬操作說明,請參閱:
- 取得員工身分聯盟的短期權杖
- 管理工作團隊集區提供者
- 刪除員工身分聯盟使用者及其資料
- 查看員工身分聯盟稽核記錄
- 查看支援員工身分聯盟的產品
- 設定使用者對控制台 (聯合) 的存取權