本文說明如何使用 PingOne Advanced Identity Cloud (AIC) 做為識別資訊提供者 (IdP) 設定員工身分聯盟,以及如何管理Google Cloud的存取權。設定 PingOne AIC IdP 後,聯合使用者就能使用 SAML 2.0 通訊協定,存取 Google Cloud 支援員工身分聯盟的服務。
事前準備
- 請務必設定 Google Cloud 機構。
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
- 在「Native Consoles」> Access Management 中,依序前往「Realms」> REALM_NAME > Dashboard,然後點選「SAML Applications」。
- 依序點選「新增實體提供者」>「代管」。
輸入實體 ID。請記下這個值,稍後會用到。
- 確認「實體供應商基本網址」值正確無誤。Advanced Identity Cloud 會將這個值用於所有 SAML 2.0 相關端點。
- 在「Meta Aliases」部分,於「Identity Provider Meta Alias」屬性中提供適合網址的值。這個別名在信任圈中不得重複。
- 點選「建立」。
- 在「Assertion Processing」(聲明處理) 分頁的「Attribute Mapper」(屬性對應器) 部分中,將 SAML 屬性名稱對應至本機屬性名稱。SAML 屬性名稱是斷言中使用的名稱。
- 按一下每個對應的「新增」或「更新」。
- 按一下 [儲存變更]。
透過 REST
執行下列指令:
curl --output METADATA_XML \ "https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM"使用瀏覽器
在瀏覽器中開啟租戶環境的中繼資料網址,下載 XML 檔案:
https://TENANT_ENV_FQDN/am/ExportSamlMetadata?entityid=ENTITY_ID&realm=/REALM- 將 XML 檔案儲存至本機電腦。
準備 Google Cloud 服務供應商中繼資料 XML。使用下列範本,並替換預留位置值:
<?xml version="1.0" encoding="UTF-8"?> <md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" entityID="https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID"> <md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</md:NameIDFormat> <md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat> <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://auth.cloud.google/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" index="0" isDefault="true"/> </md:SPSSODescriptor> </md:EntityDescriptor>請使用下列任一方式匯入中繼資料:
在控制台中
- 在 PingOne AIC 管理控制台中,前往「SAML Applications」。
- 依序點選「新增實體提供者」>「遠端」。
- 上傳您剛建立的 Google Cloud 服務供應商中繼資料 XML 檔案。
- 點選「建立」。
透過 REST
- 將 XML 中繼資料轉換為 base64url 編碼字串。
- 取得存取權杖。
執行下列指令:
curl --request POST \ --header 'authorization: Bearer ACCESS_TOKEN' \ --header 'Content-Type: application/json' \ --header 'Accept-API-Version: resource=1.0' \ --data-raw '{"standardMetadata": "BASE64URL_ENCODED_METADATA"}' \ 'https://TENANT_ENV_FQDN/am/json/realms/root/realms/alpha/realm-config/saml2/remote?_action=importEntity'
- 依序前往「Realms」> REALM_NAME >「Applications」>「Federation」>「Circles of Trust」。
- 按一下「新增信任圈」。
- 輸入名稱並按一下 [建立]。
- 在「Circle of Trust」頁面的「Entity Providers」屬性中,選取代管的 IdP 和 Google Cloud 遠端 SP。
- 按一下 [儲存變更]。
如要建立 SAML 工作團隊身分識別集區提供者,請確保識別資訊提供者中繼資料至少包含 SAML 實體 ID、單一登入網址和一組簽署用公開金鑰。詳細步驟如下:
gcloud
儲存 PingOne AIC 應用程式的 SAML 中繼資料。
如要建立 SAML 工作團隊身分集區提供者,請執行下列指令:
gcloud iam workforce-pools providers create-saml WORKFORCE_PROVIDER_ID \ --workforce-pool="WORKFORCE_POOL_ID" \ --display-name="DISPLAY_NAME" \ --description="DESCRIPTION" \ --idp-metadata-path="XML_METADATA_PATH" \ --attribute-mapping="ATTRIBUTE_MAPPING" \ --attribute-condition="ATTRIBUTE_CONDITION" \ --location=global更改下列內容:
WORKFORCE_PROVIDER_ID:供應商 ID。WORKFORCE_POOL_ID:員工身分集區 ID。DISPLAY_NAME:顯示名稱。DESCRIPTION:說明。XML_METADATA_PATH:從 PingOne AIC 匯出的 XML 格式中繼資料檔案路徑。ATTRIBUTE_MAPPING:屬性對應,例如google.subject=assertion.subject,google.groups=assertion.attributes.groups,attribute.department=assertion.attributes.department[0]。ATTRIBUTE_CONDITION:選用的屬性條件,例如,如要將ipaddr屬性限制在特定 IP 範圍內,可以設定assertion.ipaddr.startsWith('98.11.12.')條件。
詳情請參閱「屬性對應」。
這項指令會將 SAML 判斷中的
subject、groups和department分別指派給google.subject、google.groups和attribute.department屬性。屬性條件也會確保只有特定 IP 範圍內的使用者,才能使用這個員工身分提供者登入。
控制台
如要使用 Google Cloud 控制台設定 SAML 供應商,請執行下列操作:
- 前往 Google Cloud 控制台的「Workforce Identity Pools」(員工身分集區) 頁面: 前往「Workforce Identity Pools」(員工身分集區)
- 在「Workforce Identity Pools」(員工身分集區) 表格中,選取要建立提供者的集區。
- 在「供應商」部分中,按一下「新增供應商」。
- 在「Select a Provider vendor」(選取提供者) 清單中,選取「Generic Identity Provider」(一般身分識別提供者)。
- 在「選取驗證通訊協定」中,選取「SAML」。
- 在「建立供應商」部分,執行下列操作:
- 在「名稱」部分,輸入供應商名稱。
- 選用:在「Description」(說明) 中輸入供應商說明。
- 在「IdP metadata file (XML)」中,選取從 PingOne AIC 匯出的中繼資料 XML 檔案。
- 確認已啟用「Enabled provider」(已啟用供應商)。
- 按一下「繼續」。
- 在「分享供應商資訊」部分中,按一下「繼續」。
在「設定供應商」部分,完成下列步驟:
- 在「屬性對應」中,輸入
google.subject的 CEL 運算式 (例如assertion.subject)。 選用:如要輸入其他對應,請按一下「新增對應」,然後輸入其他對應,例如:
google.subject=assertion.subject, google.groups=assertion.attributes['https://example.com/aliases'], attribute.costcenter=assertion.attributes.costcenter[0]選用:如要新增屬性條件,請按一下「新增條件」,然後輸入代表屬性條件的 CEL 運算式。舉例來說,如要將
ipaddr屬性限制在特定 IP 範圍,可以設定assertion.attributes.ipaddr.startsWith('98.11.12.')條件。這個範例條件可確保只有 IP 位址開頭為98.11.12.的使用者,才能使用這個員工身分提供者登入。
- 在「屬性對應」中,輸入
如要啟用詳細稽核記錄,請在「詳細記錄」中,點按「啟用屬性值稽核記錄」切換鈕。
如要建立提供者,請按一下「Submit」(提交)。
TEST_PROJECT_ID:專案 ID。WORKFORCE_POOL_ID:員工身分集區 ID。DEPARTMENT_VALUE:對應的attribute.department值。TEST_PROJECT_ID:專案 ID。WORKFORCE_POOL_ID:員工身分集區 ID。GROUP_ID:對應google.groups聲明中的群組。-
前往主控台 (聯合) 登入頁面。
-
輸入提供者名稱,格式如下:
locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
系統提示時,請輸入 PingOne AIC 憑證。 WORKFORCE_POOL_ID:工作團隊集區 IDPROVIDER_ID:供應商 IDLOGIN_CONFIG_FILE_PATH:您指定的設定檔路徑,例如login.json-
如果您在建立設定檔時使用
--activate旗標,或使用gcloud config set auth/login_config_file啟動設定檔,gcloud CLI 會自動使用您的設定檔:gcloud auth login
-
如要指定設定檔位置登入,請執行下列指令:
gcloud auth login --login-config=LOGIN_CONFIG_FILE_PATH
-
如要使用環境變數指定設定檔位置,請將
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE設為設定路徑。 -
如果您在建立設定檔時使用了
--activate旗標,或是使用gcloud config set auth/login_config_file啟用了設定檔,則必須執行下列指令來取消設定:gcloud config unset auth/login_config_file
-
清除
CLOUDSDK_AUTH_LOGIN_CONFIG_FILE環境變數 (如果已設定)。 - 讓使用者登入 PingOne AIC 應用程式,並取得 SAML 回應。
- 將 PingOne AIC 傳回的 SAML 回應儲存在本機電腦的安全位置。將路徑儲存在環境變數中,例如:
SAML_ASSERTION_PATH=/tmp/saml_assertion.xml。 產生設定檔:
gcloud iam workforce-pools create-cred-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \ --subject-token-type=urn:ietf:params:oauth:token-type:saml2 \ --credential-source-file=SAML_ASSERTION_PATH \ --workforce-pool-user-project=PROJECT_ID \ --output-file=config.json更改下列內容:
SAML_ASSERTION_PATH:SAML 聲明檔案的路徑。PROJECT_ID:專案 ID。
產生的設定檔類似於下列內容:
{ "type": "external_account", "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID", "subject_token_type": "urn:ietf:params:oauth:token-type:saml2", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "SAML_ASSERTION_PATH" }, "workforce_pool_user_project": "PROJECT_ID" }如要使用權杖交換登入 gcloud CLI,請執行下列指令:
gcloud auth login --cred-file=config.jsongcloud,然後以透明方式將您的 PingOne AIC 憑證換成臨時 Google Cloud 存取權杖,讓您對gcloud發出其他呼叫 Google Cloud。輸出結果會與下列內容相似:Authenticated with external account user credentials for: [principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].如要列出已通過驗證的帳戶和有效帳戶,請執行下列指令:
gcloud auth list- 刪除員工身分聯盟使用者及其資料。
- 瞭解哪些 Google Cloud 產品支援員工身分聯盟。
- 設定使用者對控制台的存取權 (聯盟)。
建立代管 IdP
使用屬性
本節說明如何使用 SAML 判斷提示中的屬性。
在下列範例中,SAML 判斷中的屬性會對應至本機屬性:
| SAML 屬性 | 區域屬性 |
|---|---|
IDPEmail |
mail |
FirstName |
givenName |
groups |
groups |
在屬性對應部分設定必要屬性。在本指南稍後建立工作團隊身分集區提供者時,您會對應這些屬性。
匯出供應商中繼資料
您可以透過下列任一方式,存取代管供應商的 SAML 2.0 中繼資料:
將 Google 匯入為遠端 SP
建立信任圈 (CoT)
建立 PingOne AIC 工作團隊身分集區提供者
本節說明如何建立員工身分集區提供者,讓 IdP 使用者存取 Google Cloud。您可以設定提供者使用 SAML 通訊協定。
建立 SAML 工作團隊身分集區提供者
管理 Google Cloud 資源存取權
本節說明如何管理 PingOne AIC 使用者的 Google Cloud 資源存取權。
本指南中使用的範例專案,可能與您用來設定員工身分聯盟的專案不同。
您可以管理單一身分、身分群組或整個集區的角色。詳情請參閱「在 IAM 政策中代表員工身分集區使用者」。
使用對應的部門屬性
如要將「儲存空間管理員」角色 (roles/storage.admin) 授予 TEST_PROJECT_ID 專案中特定部門的所有身分,請執行下列指令:
gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
--role="roles/storage.admin" \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/attribute.department/DEPARTMENT_VALUE"
更改下列內容:
使用對應群組
如要為 TEST_PROJECT_ID 專案的 GROUP_ID 群組內所有身分授予「儲存空間管理員」角色 (roles/storage.admin),請執行下列指令:
gcloud projects add-iam-policy-binding TEST_PROJECT_ID \
--role="roles/storage.admin" \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/group/GROUP_ID"
更改下列內容:
登入並測試存取權
在本節中,您將以工作團隊身分集區使用者身分登入,並測試存取權。
登入
控制台 (聯盟) 登入
如要登入 Google Cloud 員工身分聯盟控制台 (又稱聯合控制台),請按照下列步驟操作:
Google Cloud CLI 瀏覽器式登入
如要使用瀏覽器登入流程登入 gcloud CLI,請按照下列步驟操作:
如要建立登入設定檔,請執行下列指令。如有需要,可以新增 --activate 旗標,將檔案設為 gcloud CLI 的預設檔案。這樣一來,您之後執行 gcloud auth login 時,就不必每次都指定設定檔路徑。
gcloud iam workforce-pools create-login-config \ locations/global/workforcePools/WORKFORCE_POOL_ID/providers/PROVIDER_ID \ --output-file=LOGIN_CONFIG_FILE_PATH
更改下列內容:
這個檔案包含 gcloud CLI 用於啟用瀏覽器式驗證流程的端點,並將目標對象設為工作團隊身分集區提供者中設定的 IdP。檔案不含機密資訊。
輸出看起來類似以下內容:
{ "type": "external_account_authorized_user_login_config", "audience": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID", "auth_url": "https://auth.cloud.google/authorize", "token_url": "https://sts.googleapis.com/v1/oauthtoken", "token_info_url": "https://sts.googleapis.com/v1/introspect" }
如要停止讓
gcloud auth login 自動使用這個設定檔,可以執行 gcloud config unset auth/login_config_file 取消設定。
如要使用瀏覽器型登入驗證進行驗證,可以採用下列其中一種方法:
如要停止使用登入設定檔,請按照下列步驟操作:
gcloud CLI 無頭登入
如要使用 SAML 通訊協定透過 gcloud CLI 登入 PingOne AIC,請按照下列步驟操作:
測試存取權
您可以存取獲准存取的 Google Cloud 支援員工身分聯盟的服務。在本指南稍早的內容中,您已為專案 TEST_PROJECT_ID 的特定部門或群組內的所有身分授予 Storage Admin 角色。您可以列出 Cloud Storage 值區,測試自己是否具備存取權。
控制台 (聯盟) 登入
如要在主控台 (已啟用同盟) 中驗證存取權,請按照下列步驟操作:
gcloud CLI
如要列出您有權存取的專案 Cloud Storage bucket 和物件,請執行下列指令:
gcloud alpha storage ls --project="TEST_PROJECT_ID"
主體必須具備 gcloud CLI 工作階段中設定的專案權限:serviceusage.services.usePROJECT_ID。