使用 PingFederate 設定員工身分聯盟

本文說明如何使用 PingFederate 識別資訊提供者 (IdP) 設定員工身分聯盟,以及如何管理Cloud de Confiance by S3NS的存取權。設定 PingFederate 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. 如要設定使用 SAML 2.0 通訊協定的 PingFederate 應用程式,請在 PingFederate 中執行下列步驟:

    1. 設定 PingFederate IdP 的 SAML 2.0 實體 ID。詳情請參閱「指定同盟資訊」。
    2. 建立 SAML 2.0 SP 連線,請參閱「選擇 SP 連線類型」,然後執行下列操作:

      1. 在「連線類型」中,選取「瀏覽器單一登入設定檔」和「SAML 2.0 通訊協定」
      2. 在「匯入中繼資料」中,選取「無」
    3. 在「一般資訊」中,將「合作夥伴的實體 ID (連線 ID)」設為下列值:

      https://iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
      
    4. 在「SAML Profiles」中,啟用「SP-initiated SSO」。如果您打算使用 IdP 啟動的單一登入 (SSO) 服務,也可以啟用這項功能。

    5. 在「Attribute Contract」中,定義要傳遞至判斷的自訂屬性 (例如電子郵件和群組)。這些屬性可用於 Cloud de Confiance ,稍後建立存取權管理政策。

    6. 在「屬性合約履行」中,確認 SAML_SUBJECT 已對應至每個使用者都有專屬值的欄位。舉例來說,電子郵件地址通常是每位使用者專屬且不會變更,而且經常在 Cloud de Confiance 存取權管理政策中用於參照特定使用者。

    7. 如要設定控制台 (同盟) 登入,請在「Assertion Consumer Service URL」中新增下列端點網址:

      https://auth.cloud.s3nscloud.fr/signin-callback/locations/global/workforcePools/WORKFORCE_POOL_ID/providers/WORKFORCE_PROVIDER_ID
      

      更改下列內容:

      • WORKFORCE_POOL_ID:先前建立的員工集區 ID。
      • WORKFORCE_PROVIDER_ID:稍後建立的員工身分提供者 ID。
    8. 將這個端點的「Binding」設為「POST」

    9. 如要啟用主控台 (同盟) 登入,請在「Allowable SAML Bindings」中選取「Redirect」

    10. 在「Signature Policy」部分,選取「Sign Response As Required」

    11. 儲存並啟用連結。

    使用屬性

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

    使用屬性合約,在產生的 SAML 判斷中指定自訂屬性。設定屬性後,您可以在 Cloud de Confiance by S3NS 中使用這些屬性建立存取權管理政策。如要進一步瞭解屬性合約,請參閱 PingFederate 伺服器說明文件中的「屬性合約」。

    舉例來說,在本指南中,我們使用 PingOne 做為 PingFederate 的資料存放區,並使用 PingOne 資料存放區中的「user attributes」,對應 emailfirstNamegroups 屬性合約,如下所示:

    屬性合約
    email email
    firstName name.given
    groups memberOfGroupIDs

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

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

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

    1. 如要設定 SAML 應用程式,請按照下列步驟操作:

      gcloud

      如要建立 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:PingFederate 中 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 判斷中的 subjectgroupsdepartment 分別指派給 google.subjectgoogle.groupsattribute.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. 在「IDP metadata file (XML)」中,選取 PingFederate 的中繼資料 XML 檔案。
        3. 按一下「繼續」
      7. 在「分享供應商資訊」部分中,按一下「繼續」
      8. 在「設定供應商」部分,完成下列步驟:

        1. 在「屬性對應」中,輸入 google.subject 的 CEL 運算式 (例如 assertion.subject)。
        2. 選用:如要輸入其他對應,請按一下「新增對應」,然後輸入其他對應,例如:

          google.subject=assertion.subject,
          google.groups=assertion.attributes['https://example.com/aliases'],
          attribute.costcenter=assertion.attributes.costcenter[0]
          
      9. 如要啟用詳細稽核記錄,請在「詳細記錄」中,點按「啟用屬性值稽核記錄」切換鈕。

      10. 如要建立提供者,請按一下「Submit」(提交)

    管理 Cloud de Confiance 資源存取權

    本節說明如何管理 PingFederate 使用者的 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. 系統提示時,請輸入 PingFederate 憑證。

    gcloud 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 登入 PingFederate,請按照下列步驟操作:

    1. 讓使用者登入 PingFederate 應用程式,並取得 SAML 回應。
    2. 將 PingFederate 傳回的 SAML 回應儲存在本機電腦的安全位置。將路徑儲存在環境變數中,例如:SAML_ASSERTION_PATH=/path/to/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,然後以透明方式將您的 PingFederate 憑證換成臨時存取權杖,讓您對 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 的特定部門或群組內所有身分授予 Storage Admin 角色。您可以列出 Cloud Storage 值區,測試自己是否具備存取權。

    控制台 (聯盟) 登入

    如要在主控台 (已聯合) 中驗證存取權,請執行下列步驟:

    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.usePROJECT_ID

    後續步驟