為網頁應用程式啟用以憑證為依據的存取權

本頁說明如何為您的網頁應用程式啟用以憑證為基礎的存取權 (CBA)。您可以使用 CBA,確保從信任裝置存取在 Google Cloud上執行的企業網頁應用程式。

總覽

網頁應用程式專用的憑證式存取權會使用 Chrome Enterprise Premium 情境感知存取權功能和Google Cloud 網路,透過雙向 TLS (mTLS) 保護存取權。以下是您用來為網頁應用程式啟用 CBA 的主要元件:

  • Access Context Manager:讓您在決定網頁應用程式的存取權時,建立需要憑證的存取層級。
  • Identity-Aware Proxy (IAP):驗證使用者對網頁應用程式的存取權。
  • Google Cloud HTTPS 負載平衡器:在使用者和網頁應用程式之間提供相互傳輸層安全性 (mTLS)。
  • Chrome Enterprise 政策:在使用 Chrome 瀏覽器時,為使用者和網頁應用程式提供相互驗證 (mTLS)。

事前準備

請執行下列指令,確認您使用的是最新版的 Google Cloud CLI

gcloud components update

為外部 HTTPS 負載平衡器設定 mTLS

請按照操作說明設定 HTTPS 外部負載平衡器。請記下已建立的目標 HTTPS Proxy 名稱,因為後續步驟會用到。

建立信任設定

建立信任設定,代表您的公用金鑰基礎架構 (PKI) 類型。

如要完成這項工作,您必須在目標 Google Cloud 專案中具備 certificatemanager.trustconfigs.create 權限。

您可以使用 Google 核發的憑證 (方法 1)、自己的憑證 (方法 2),或是自行簽署的憑證搭配端點驗證 (方法 3) 建立信任設定。

方法 1

使用 Google 核發的憑證建立信任設定。

  1. 完成建立根 CA 的步驟。
  2. 擷取 PEM 檔案內容:

    gcloud privateca roots describe ROOT_CA_ID \
        --pool=POOL_ID \
        --location=CA_LOCATION \
        --format='value(pemCaCertificates)'
    

    更改下列內容:

    • ROOT_CA_ID:根憑證 ID。
    • POOL_ID:根憑證集區 ID。
    • CA_LOCATION:CA 位置。
  3. 擷取根憑證,並在 pemCaCertificates 欄位中傳回。憑證是 BEGIN CERTIFICATEEND CERTIFICATE 標記之間的字串,且包含這兩個標記。

  4. 將根憑證儲存為 PEM 格式的檔案。

  5. 建立信任設定:

    1. 設定下列環境變數:

      ROOT_PEM_FILE=TRUST_ANCHOR_PATH
      INT_PEM_FILE1=IM_CERT_PATH
      INT_PEM_FILE2=SECOND_IM_CERT_PATH
      

      更改下列內容:

      • TRUST_ANCHOR_PATH:PEM 編碼信任錨點的路徑。
      • IM_CERT_PATH:PEM 編碼中繼憑證的路徑。
      • SECOND_IM_CERT_PATH:第二個 PEM 編碼中繼憑證的路徑。
    2. 準備信任設定 YAML 檔案的內容:

      ROOT=$(cat ROOT_PEM_FILE | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      INT_1=$(cat INT_PEM_FILE1 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      INT_2=$(cat INT_PEM_FILE2 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      
    3. 建立信任設定 YAML 檔案:

      cat << EOF > trust_config.yaml
      name: "${TRUST_CONFIG_NAME?}"
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT?}"
        intermediateCas:
        - pemCertificate: "${INT_1?}"
        - pemCertificate: "${INT_2?}"
       EOF
      

      這個 YAML 檔案會定義名為 TRUST_CONFIG_NAME 的信任設定。信任設定包含一個信任儲存庫,其中包含根憑證和兩個中繼憑證。

    4. 將信任設定匯入 Google Cloud Certificate Manager:

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
        --project=GCP_PROJECT \
        --source=${PWD?}/trust_config.yaml
      

      更改下列內容:

      • TRUST_CONFIG_NAME:信任設定的名稱。
      • GCP_PROJECT: Google Cloud 專案 ID。

如果您部署的是更複雜的結構,且其中包含由根 CA 簽署的中繼 CA,請務必以 intermediateCAs 的形式新增中繼 CA。

方法 2

使用自己的 PKI 部署作業搭配現有憑證,建立信任設定。

這類信任設定會假設基本信任存放區含有單一信任錨點,代表根憑證。未指定中繼憑證。

建立信任設定:

  1. 設定下列環境變數:

    ROOT_PEM_FILE=TRUST_ANCHOR_PATH
    INT_PEM_FILE1=IM_CERT_PATH
    INT_PEM_FILE2=SECOND_IM_CERT_PATH
    

    更改下列內容:

    • TRUST_ANCHOR_PATH:PEM 編碼信任錨點的路徑。
    • IM_CERT_PATH:PEM 編碼中繼憑證的路徑。
    • SECOND_IM_CERT_PATH:第二個 PEM 編碼中繼憑證的路徑。
  2. 準備信任設定 YAML 檔案的內容:

    ROOT=$(cat ROOT_PEM_FILE | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    INT_1=$(cat INT_PEM_FILE1 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    INT_2=$(cat INT_PEM_FILE2 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
  3. 建立信任設定 YAML 檔案:

    cat << EOF > trust_config.yaml
    name: "${TRUST_CONFIG_NAME?}"
    trustStores:
    - trustAnchors:
      - pemCertificate: "${ROOT?}"
      intermediateCas:
      - pemCertificate: "${INT_1?}"
      - pemCertificate: "${INT_2?}"
    EOF
    

    這個 YAML 檔案會定義名為 TRUST_CONFIG_NAME 的信任設定。信任設定包含一個信任儲存庫,其中包含根憑證和兩個中繼憑證。

  4. 將信任設定匯入 Google Cloud Certificate Manager:

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
      --project=GCP_PROJECT \
      --source=${PWD?}/trust_config.yaml
    

    更改下列內容:

    • TRUST_CONFIG_NAME:信任設定的名稱。
    • GCP_PROJECT: Google Cloud 專案 ID。

方法 3

如果您使用 Chrome 瀏覽器,並想搭配端點驗證使用自行簽署的憑證,請按照本節中的操作說明進行。

請按照操作說明為貴機構部署端點驗證。端點驗證會自動將 Google 核發的自行簽署憑證部署至您的裝置,您不必建立信任設定。

建立 TLS 政策,在外部負載平衡器上啟用 mTLS

如果您使用的是方法 3,請略過這個步驟。

如要完成這項工作,您必須具備下列權限:

  1. 建立伺服器的傳輸層安全標準 (TLS) 政策 YAML 檔案:

    cat << EOF > server_tls_policy.yaml
    name: "SERVER_TLS_POLICY_NAME"
    mtlsPolicy:
      clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
      clientValidationTrustConfig: projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME
    EOF
    

    更改下列內容:

    • SERVER_TLS_POLICY_NAME:伺服器 TLS 政策的名稱。
    • GCP_PROJECT: Google Cloud 專案 ID。
    • TRUST_CONFIG_NAME:您在上一個步驟中建立的信任設定。

    如要瞭解 clientValidationMode 的用戶端驗證選項,請參閱「MTLS 用戶端驗證模式」。

  2. 將伺服器 TLS 政策 YAML 匯入 Google Cloud 專案:

    gcloud network-security server-tls-policies import ${SERVER_TLS_POLICY_NAME?} \
      --project=GCP_PROJECT \
      --source=${PWD?}/server_tls_policy.yaml \
      --location=global
    

    GCP_PROJECT 替換為 Google Cloud 專案 ID。

建立 TLS 政策後,就無法修改。如要變更現有的 TLS 政策,請刪除現有 TLS 政策並建立新的政策。

將 TLS 政策附加至目標 HTTPS 政策

如要完成這項工作,您必須在目標 Google Cloud 專案中具備 compute.targetHttpsProxies.get 權限。

  1. 將現有的目標 HTTPS Proxy 匯出至本機檔案:

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --destination=${PWD?}/xlb-mtls-target-proxy.yaml
    

    更改下列內容:

    • TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy。
    • GCP_PROJECT: Google Cloud 專案 ID。
  2. ServerTlsPolicy 附加至目標 HTTPS Proxy 設定:

    如要完成這項工作,您必須具備下列權限:

    echo "serverTlsPolicy:
    //networksecurity.googleapis.com/projects/GCP_PROJECT/locations/global/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> xlb-mtls-target-proxy.yaml
    

    更改下列內容:

    • GCP_PROJECT: Google Cloud 專案 ID。
    • SERVER_TLS_POLICY_NAME:伺服器 TLS 政策。
  3. 從本機檔案匯入新設定,以更新目標 HTTPS Proxy:

    gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --source=${PWD?}/xlb-mtls-target-proxy.yaml
    

    更改下列內容:

    • TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy。
    • GCP_PROJECT: Google Cloud 專案 ID。

建立需要憑證的存取層級

主控台

  1. 請按照操作說明建立自訂存取層級
  2. 將下列運算式新增至自訂存取層級:

    如果您已建立信任設定 (方法 1 或方法 2),請在自訂存取層級的「條件」欄位中加入下列運算式,以便在驗證時使用 PKI 認證繫結:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true
    

    其中 TLS_POLICY_FULL_RESOURCE_PATH1TLS_POLICY_FULL_RESOURCE_PATH2 是代表多個信任設定的路徑:certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME

    您必須提供至少一個信任設定路徑。

    更改下列內容:

    • GCP_PROJECT: Google Cloud 專案 ID。
    • TRUST_CONFIG_NAME:信任設定的名稱。

    如果您使用的是 Google 核發的自行簽署憑證 (方法 3),請在自訂存取層級的「條件」欄位中新增下列運算式,以便在驗證時使用憑證繫結:

    certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
    

gcloud

如果您已建立信任設定 (方法 1 或方法 2),請執行下列指令,建立自訂存取層級,在驗證時使用 PKI 認證繫結:

gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
    --title=TITLE \
    --custom-level-spec=FILE \
    --description=DESCRIPTION \
    --policy=POLICY_NAME

更改下列內容:

  • ACCESS_LEVEL_NAME:存取層級的專屬名稱。
  • TITLE:使用者可理解的標題。
  • FILE:包含下列運算式的 YAML 檔案:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true

    其中 TLS_POLICY_FULL_RESOURCE_PATH1TLS_POLICY_FULL_RESOURCE_PATH2 是代表多個信任設定的路徑:certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME

    您必須提供至少一個信任設定路徑。

    更改下列內容:

    • GCP_PROJECT: Google Cloud 專案 ID。
    • TRUST_CONFIG_NAME:信任設定的名稱。
  • DESCRIPTION:存取層級的詳細說明。

  • POLICY_NAME:貴機構的存取權政策。

如果您使用端點驗證 (方法 3) 的自簽署憑證,則沒有信任設定,請將下列運算式新增至自訂存取層級:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

使用 Identity-Aware Proxy (IAP) 強制執行以憑證為基礎的存取權

在網頁應用程式架構的 CBA 中,IAP 會提供以原則為準的政策執行機制,保護網頁應用程式免受不受信任的裝置攻擊。

完成下列步驟即可啟用 IAP 並設定 CBA 政策:

  1. 如果您尚未設定 IAP,請按照操作說明設定 IAP。
  2. 前往 IAP 附加先前建立的存取層級
    前往 IAP
  3. 選取要使用 CBA 保護的資源,然後按一下「設定」
  4. 在「Access Levels」(存取層級) 欄位中輸入您建立的存取層級名稱

如要使用 Google Cloud CLI 在 IAP 中設定 CBA 政策,請參閱 Google Cloud CLI 說明文件

設定瀏覽器自動選取憑證

如要讓瀏覽器在決定存取權時自動選取憑證,請完成瀏覽器的步驟。

Chrome

設定 AutoSelectCertificateForURLs Chrome 政策,讓 Chrome 在 mTLS 握手期間使用正確的憑證。

  1. 確認 Chrome 瀏覽器是由 Chrome 瀏覽器雲端管理或 Windows 群組政策管理:

  2. 新增 AutoSelectCertificateForUrls 政策:

    1. 管理控制台中,依序前往「裝置」>「Chrome」>「設定」>「使用者與瀏覽器設定」>「用戶端憑證」
    2. 選取機構。
    3. 為網頁應用程式網址和根憑證資訊新增 AutoSelectCertificateForUrls 政策。

詳情請參閱政策結構定義的說明文件。以下是使用端點驗證提供的憑證的政策設定範例:

{
  "pattern":"https://[*.].mysite.com",
  "Filter":{
    "ISSUER":{
      "CN":"Google Endpoint Verification"
    }
  }
}

Safari

設定身分偏好設定:

  1. 開啟「鑰匙圈存取」應用程式,然後選取「所有項目」
  2. 選取要設定的憑證。
  3. 依序點選「File」 >「New Identity Preference」
  4. 輸入網址並按一下「新增」。

這項操作會在 Keychain 中建立新的身分識別偏好設定項目,您可以更新這項設定。

Edge

按照 Edge 說明文件中的操作說明設定 AutoSelectCertificateForUrls Edge 政策。