使用 PingOne AIC 設定員工身分聯盟

本文說明如何設定員工身分聯盟,並以 PingOne Advanced Identity Cloud (AIC) 做為識別資訊提供者 (IdP),以及如何管理Cloud de Confiance的存取權。設定 PingOne AIC IdP 後,聯合使用者就能使用 SAML 2.0 通訊協定,存取 Cloud de Confiance 支援員工身分聯盟的服務。

事前準備

  1. 請確認已設定 Cloud de Confiance 機構。
  2. 將 GOOGLE_CLOUD_UNIVERSE_DOMAIN 環境變數設為 s3nsapis.fr。
  3. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

    gcloud init
  4. 登入時,IdP 必須提供已簽署的驗證資訊:SAML IdP 回應必須經過簽署。
  5. 如要接收貴機構或Cloud de Confiance 產品異動的重要資訊,請務必提供必要聯絡人。詳情請參閱「員工身分聯盟總覽」。

費用

員工身分聯盟是免付費功能。不過,員工身分聯盟詳細稽核記錄會使用 Cloud Logging。如要瞭解 Logging 定價,請參閱「Google Cloud Observability 定價」。

必要的角色

如要取得設定員工身分聯盟所需的權限,請要求管理員授予您組織的 IAM 工作團隊集區管理員 (roles/iam.workforcePoolAdmin) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

如果您在開發或測試環境中設定權限,但不在正式環境中設定,可以授予「身分與存取權管理」擁有者 (roles/owner) 基本角色。這個角色也包含員工身分聯盟的權限。

建立工作團隊身分集區

gcloud

如要建立員工身分集區,請執行下列指令:

gcloud iam workforce-pools create WORKFORCE_POOL_ID \
    --organization=ORGANIZATION_ID \
    --display-name="DISPLAY_NAME" \
    --description="DESCRIPTION" \
    --session-duration=SESSION_DURATION \
    --location=global

更改下列內容:

  • WORKFORCE_POOL_ID:您選擇代表 Cloud de Confiance 工作團隊集區的 ID。集區 ID 在 Cloud de Confiance的所有工作團隊身分集區中,不得重複。如要瞭解如何設定 ID 格式,請參閱 API 說明文件中的「查詢參數」一節。
  • ORGANIZATION_ID:您的 Cloud de Confiance 員工身分集區的組織 ID。員工身分集區適用於機構中的所有專案和資料夾。
  • DISPLAY_NAME:選用。員工身分集區的顯示名稱。
  • DESCRIPTION:選用。員工身分集區 說明。
  • SESSION_DURATION:選用。工作階段持續時間,以附加 s 的數字表示,例如 3600s。工作階段時間決定了從這個工作團隊集區取得的 Cloud de Confiance 存取權杖、控制台 (聯盟) 登入工作階段,以及 gcloud CLI 登入工作階段的有效時間。工作階段持續時間預設為一小時 (3600 秒)。工作階段持續時間值必須介於 15 分鐘 (900 秒) 和 12 小時 (43200 秒) 之間。

控制台

如要建立工作團隊身分集區,請執行下列操作:

  1. 前往 Cloud de Confiance 控制台的「Workforce Identity Pools」(員工身分集區) 頁面:

    前往「Workforce Identity Pools」(員工身分集區) 頁面

  2. 選取員工身分集區的機構。工作人員身分識別集區適用於機構中的所有專案和資料夾。

  3. 點選「建立集區」,然後執行下列操作:

    1. 在「名稱」欄位中,輸入集區的顯示名稱。系統會在您輸入名稱時自動衍生集區 ID,並顯示在「名稱」欄位下方。如要更新集區 ID,請按一下集區 ID 旁的「編輯」。

    2. 選用:在「Description」(說明) 中,輸入集區的說明。

    3. 如要建立員工身分集區,請按「Next」(下一步)。

員工身分集區的工作階段持續時間預設為一小時 (3600 秒)。工作階段持續時間決定了這個工作團隊集區的 Cloud de Confiance 存取權杖、控制台 (聯盟) 和 gcloud CLI 登入工作階段的有效時間。建立集區後,您可以更新集區,設定自訂工作階段持續時間。工作階段持續時間必須介於 15 分鐘 (900 秒) 至 12 小時 (43,200 秒) 之間。

建立 PingOne AIC 應用程式

本節說明如何建立 PingOne AIC 應用程式整合。

建立代管的 IdP

  1. 在「Native Consoles」> Access Management 中,依序前往「Realms」> REALM_NAME >「Dashboard」,然後按一下「SAML Applications」。
  2. 依序點選「新增實體提供者」>「代管」。
  3. 輸入實體 ID。請記下這個值,稍後會用到。

    1. 確認「實體供應商基本網址」值正確無誤。Advanced Identity Cloud 會將這個值用於所有 SAML 2.0 相關端點。
    2. 在「Meta Aliases」部分,於「Identity Provider Meta Alias」屬性中提供適合網址的值。這個別名在信任圈中不得重複。
    3. 點選「建立」。
    4. 在「Assertion Processing」分頁的「Attribute Mapper」部分,將 SAML 屬性名稱對應至本機屬性名稱。SAML 屬性名稱是判斷結果中使用的名稱。
    5. 針對每個對應項目,按一下「新增」或「更新」。
    6. 按一下 [儲存變更]。

使用屬性

本節說明如何使用 SAML 判斷中的屬性。

在下列範例中,SAML 判斷中的屬性會對應至本機屬性:

SAML 屬性 店面屬性
IDPEmail mail
FirstName givenName
groups groups

在屬性對應部分設定必要屬性。稍後在本指南中建立工作團隊身分集區提供者時,您會對應這些屬性。

匯出供應商中繼資料

您可以透過下列任一方式,存取代管供應商的 SAML 2.0 中繼資料:

  • 透過 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

  1. 將 XML 檔案儲存至本機電腦。

將 Google 匯入為遠端 SP

  1. 準備 Cloud de Confiance SP 中繼資料 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.s3nscloud.fr/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID" index="0" isDefault="true"/>
       </md:SPSSODescriptor>
    </md:EntityDescriptor>
    
  2. 你可以透過下列任一方式匯入中繼資料:

    • 在控制台中

      1. 在 PingOne AIC 管理控制台中,前往「SAML Applications」。
      2. 依序點選「新增實體提供者」>「遠端」。
      3. 上傳您剛建立的 Cloud de Confiance 服務供應商中繼資料 XML 檔案。
      4. 點選「建立」。
    • 透過 REST

      1. 將 XML 中繼資料轉換為 base64url 編碼字串。
      2. 取得存取權杖。
      3. 執行下列指令:

        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'
        

建立信任圈 (CoT)

  1. 依序前往「Realms」> REALM_NAME >「Applications」>「Federation」>「Circles of Trust」。
  2. 按一下「新增信任圈」。
  3. 輸入名稱並按一下 [建立]。
  4. 在「信任圈」頁面的「實體供應商」屬性中,選取代管的 IdP 和 Cloud de Confiance 遠端 SP。
  5. 按一下 [儲存變更]。

建立 PingOne AIC 工作團隊身分集區提供者

本節說明如何建立工作團隊身分集區提供者,讓 IdP 使用者存取 Cloud de Confiance。您可以設定供應商使用 SAML 通訊協定。

建立 SAML 工作團隊身分集區提供者

  1. 如要建立 SAML 工作團隊身分集區提供者,請確保識別資訊提供者中繼資料至少包含 SAML 實體 ID、單一登入網址和一組簽署用公開金鑰。詳細步驟如下:

    gcloud

    1. 儲存 PingOne AIC 應用程式的 SAML 中繼資料。

    2. 如要建立 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 範圍內的使用者,才能使用這個員工身分提供者登入。

    控制台

    如要使用 Cloud de Confiance 控制台設定 SAML 提供者,請按照下列步驟操作:

    1. 前往 Cloud de Confiance 控制台的「Workforce Identity Pools」(員工身分集區) 頁面: 前往「Workforce Identity Pools」(員工身分集區)
    2. 在「Workforce Identity Pools」(員工身分集區) 表格中,選取要建立提供者的集區。
    3. 在「供應商」部分,按一下「新增供應商」。
    4. 在「Select a Provider vendor」(選取提供者) 清單中,選取「Generic Identity Provider」(一般身分識別提供者)。
    5. 在「選取驗證通訊協定」中,選取「SAML」。
    6. 在「建立供應商」部分,執行下列操作:
      1. 在「名稱」部分,輸入供應商名稱。
      2. 選用:在「Description」(說明) 中輸入提供者的說明。
      3. 在「IdP metadata file (XML)」中,選取從 PingOne AIC 匯出的中繼資料 XML 檔案。
      4. 如要建立已啟用的供應商,請確認「啟用供應商」已開啟。
      5. 按一下「繼續」。
    7. 在「分享供應商資訊」部分中,按一下「繼續」。
    8. 選用:如要啟用詳細稽核記錄,請在「設定供應商」部分的「詳細記錄」中,點選「啟用屬性值稽核記錄」切換鈕。

      員工身分聯盟詳細稽核記錄會將從 IdP 收到的資訊記錄到 Cloud Logging。詳細的稽核記錄有助於排解工作團隊身分識別集區提供者設定問題。如要瞭解如何透過詳細的稽核記錄排解屬性對應錯誤,請參閱「一般屬性對應錯誤」。如要瞭解 Logging 定價,請參閱「Google Cloud Observability 定價」。

      如要為工作團隊身分集區提供者停用詳細稽核記錄,請在建立提供者時,將「啟用屬性值稽核記錄」切換鈕設為關閉。如要停用詳細稽核記錄,您也可以更新供應商。

    9. 如要建立提供者,請按一下「提交」。

    建立供應商後,系統會將您重新導向至供應商屬性頁面。

    如要設定屬性對應和條件,請按照下列步驟操作:

    1. 系統提示時,請登入外部 IdP,驗證預設屬性對應。
    2. 在提供者屬性頁面,查看及編輯屬性對應和條件:

      1. 如要新增或編輯屬性對應項目,請按照下列步驟操作:

        1. 按一下「新增對應」新增對應,或編輯現有對應。
        2. 在「Google n」欄位中 (n 為數字),選取支援的 Cloud de Confiance金鑰。
        3. 在對應的「SAML n」欄位中,輸入 IdP 屬性名稱或 CEL 運算式,例如:

          google.subject=assertion.subject,
          google.groups=assertion.attributes['https://example.com/aliases'],
          attribute.costcenter=assertion.attributes.costcenter[0]
          
      2. 如要新增屬性條件,請按照下列步驟操作:

        1. 按一下「新增條件」。
        2. 在「屬性條件」欄位中,以 CEL 格式輸入條件,例如 assertion.attributes.ipaddr.startsWith('98.11.12.')。
    3. 如要驗證對應項目,請按一下「儲存並重新擷取權杖」。

    4. 如要完成設定,請按一下「儲存並結束」。

管理 Cloud de Confiance 資源存取權

本節說明如何管理 PingOne AIC 使用者的資源存取權。 Cloud de Confiance

本指南中使用的範例專案,可能與您設定員工身分聯盟時使用的專案不同。

您可以管理單一身分、身分群組或整個集區的角色。詳情請參閱「允許政策的員工主體 ID」。

使用對應的部門屬性

如要為 TEST_PROJECT_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/attribute.department/DEPARTMENT_VALUE"

更改下列內容:

  • TEST_PROJECT_ID:專案 ID。
  • WORKFORCE_POOL_ID:員工身分集區 ID。
  • DEPARTMENT_VALUE:對應的 attribute.department 值。

使用對應群組

如要為 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"

更改下列內容:

  • TEST_PROJECT_ID:專案 ID。
  • WORKFORCE_POOL_ID:員工身分集區 ID。
  • GROUP_ID:對應的 google.groups 聲明中的群組。

登入並測試存取權

在本節中,您將以工作團隊身分集區使用者身分登入,並測試存取權。

登入

控制台 (聯盟) 登入

如要登入 Cloud de Confiance by S3NS 員工身分聯盟控制台 (又稱聯合控制台),請按照下列步驟操作:

  1. 前往控制台 (聯合) 登入頁面。

    前往控制台 (已聯邦)

  2. 輸入提供者名稱,格式如下:
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
  3. 系統提示時,輸入 PingOne AIC 憑證。

Google Cloud CLI 瀏覽器式登入

如要使用瀏覽器登入流程登入 gcloud CLI,請按照下列步驟操作:

執行下列指令,建立登入設定檔:

Linux 和 macOS

gcloud iam workforce-pools create-login-config \
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID \
    --output-file=LOGIN_CONFIG_PATH

Windows (PowerShell)

gcloud iam workforce-pools create-login-config `
    locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID `
    --output-file=LOGIN_CONFIG_PATH

更改下列內容:

  • WORKFORCE_POOL_ID:員工身分聯盟集區 ID。
  • WORKFORCE_PROVIDER_ID:員工身分聯盟供應商 ID。
  • LOGIN_CONFIG_PATH:要寫入登入設定檔的路徑。例如:login-config.json。

登入設定檔包含 gcloud CLI 啟動瀏覽器式驗證流程時使用的端點,並將對象設為工作團隊身分集區提供者中設定的 IdP。檔案不含機密資訊。

登入設定檔內容類似於下列範例:

{
  "universe_domain": "s3nsapis.fr",
  "universe_cloud_web_domain": "cloud.s3nscloud.fr",
  "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.s3nscloud.fr/authorize",
  "token_url": "https://sts.s3nsapis.fr/v1/oauthtoken",
  "token_info_url": "https://sts.s3nsapis.fr/v1/introspect"
}

使用環境變數、有效 gcloud CLI 設定中的屬性,或直接搭配 gcloud auth login 指令,指向登入設定檔:

環境變數

如要搭配環境變數使用登入設定檔,請完成下列操作說明:

  1. 將 CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 環境變數設為登入設定檔的路徑。
  2. 執行下列指令:

    gcloud auth login
  3. gcloud CLI 會參照環境變數來尋找登入設定檔,然後啟動驗證程序。按照瀏覽器流程驗證及授權 gcloud CLI,以便代表您存取資源,執行後續指令。

如要停止使用 gcloud auth login 指令的登入設定檔,請清除 CLOUDSDK_AUTH_LOGIN_CONFIG_FILE 環境變數。

gcloud CLI 設定

如要搭配使用登入設定檔和 gcloud CLI 設定屬性,請完成下列操作說明:

  1. 使用下列指令,將有效 gcloud CLI 設定的 auth/login_config_file 屬性設為登入設定檔的路徑:

    gcloud config set auth/login_config_file LOGIN_CONFIG_PATH
  2. 執行下列指令:

    gcloud auth login
  3. gcloud CLI 會參照設定屬性來尋找登入設定檔,然後啟動驗證程序。按照瀏覽器流程驗證及授權 gcloud CLI,以便代表您存取資源,執行後續指令。

如要停止使用 gcloud auth login 指令的登入設定檔,請使用下列指令取消設定屬性:

gcloud config unset auth/login_config_file

gcloud auth login

如要直接使用登入設定檔搭配 gcloud auth login 指令,請完成下列操作說明:

  • 如果您在建立登入設定檔時使用 --activate 旗標,請執行下列指令:

    gcloud auth login
  • 如果您在建立登入設定檔時未使用 --activate 旗標,請執行下列指令:

    Linux 和 macOS

    gcloud auth login \
        --login-config=LOGIN_CONFIG_PATH

    Windows (PowerShell)

    gcloud auth login `
        --login-config=LOGIN_CONFIG_PATH

    將 LOGIN_CONFIG_PATH 替換為登入設定檔的路徑。

gcloud auth login 指令會將存取憑證儲存在主目錄中。經過驗證的主體會成為有效 gcloud CLI 設定中的有效主體。除非遭到覆寫,否則 gcloud CLI 會使用這些儲存的憑證存取 Cloud de Confiance by S3NS。

gcloud CLI 無頭登入

如要使用 SAML 通訊協定透過 gcloud CLI 登入 PingOne AIC,請按照下列步驟操作:

  1. 讓使用者登入 PingOne AIC 應用程式,並取得 SAML 回應。
  2. 將 PingOne AIC 傳回的 SAML 回應儲存在本機電腦的安全位置。將路徑儲存在環境變數中,例如:SAML_ASSERTION_PATH=/tmp/saml_assertion.xml。
  3. 產生設定檔:

    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。
  4. 產生的設定檔如下所示:

    {
      "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"
    }
    
  5. 如要使用權杖交換登入 gcloud CLI,請執行下列指令:

    gcloud auth login --cred-file=config.json
    

    gcloud,然後以透明方式將您的 PingOne AIC 憑證換成臨時 Cloud de Confiance 存取權杖,讓您對 gcloud發出其他呼叫 Cloud de Confiance。輸出結果會與下列內容相似:

    Authenticated with external account user credentials for: [principal://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/subject/USER_ID].

  6. 如要列出已通過驗證的帳戶和有效帳戶,請執行下列指令:

    gcloud auth list
    

測試存取權

您可以存取獲准使用的 Cloud de Confiance 支援員工身分聯盟的服務。在本指南稍早的內容中,您已為專案 TEST_PROJECT_ID 的特定部門或群組內的所有身分授予「儲存空間管理員」角色。您可以列出 Cloud Storage bucket,測試自己是否具備存取權。

控制台 (聯盟) 登入

如要在控制台 (已聯合) 中驗證存取權,請按照下列步驟操作:

  1. 前往「Cloud Storage」頁面。
  2. 確認您是否能看到專案 TEST_PROJECT_ID 的現有 bucket 清單。

gcloud CLI

如要列出您有權存取的專案 Cloud Storage bucket 和物件,請執行下列指令:

gcloud alpha storage ls --project="TEST_PROJECT_ID"

主體必須具備 gcloud CLI 工作階段中設定專案的 serviceusage.services.use 權限:PROJECT_ID。

後續步驟