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

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

總覽

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

  • Access Context Manager:可讓您建立存取層級,在判斷網頁應用程式的存取權時,要求提供憑證。
  • Identity-Aware Proxy (IAP):驗證使用者對網頁應用程式的存取權。
  • Google Cloud HTTPS 負載平衡器:在使用者和 Web 應用程式之間提供雙向驗證 (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:專案 ID。 Google Cloud

如果您部署的結構較為複雜,且中繼 CA 是由根 CA 簽署,請務必將中繼 CA 新增為 intermediateCAs

方法 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:專案 ID。 Google Cloud

方法 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:專案 ID。 Google Cloud
    • 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 政策附加至目標 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:專案 ID。 Google Cloud
  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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud

建立需要憑證的存取層級

主控台

  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:專案 ID。 Google Cloud
    • 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:專案 ID。 Google Cloud
    • 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. 依序點按「檔案」 >「新增身分偏好設定」
  4. 輸入網址並按一下「新增」。

這會在「鑰匙圈」中建立新的身分偏好設定項目,供您更新。

Edge

請按照 Edge 說明文件中的指示設定 AutoSelectCertificateForUrls Edge 政策。