本頁說明如何為網路應用程式啟用憑證式存取權 (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 核發的憑證建立信任設定。
- 完成建立根 CA 的步驟。
擷取 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 位置。
擷取
pemCaCertificates
欄位中傳回的根憑證。 憑證是BEGIN CERTIFICATE
和END CERTIFICATE
標記之間的字串,且包含這兩個標記。將 PEM 格式的根憑證儲存至檔案。
建立信任設定:
設定下列環境變數:
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 編碼中繼憑證的路徑。
準備信任設定 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')
建立信任設定 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
的信任設定。信任設定包含一個信任儲存庫,其中包含根憑證和兩個中繼憑證。將信任設定匯入 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 部署作業和現有憑證,建立信任設定。
這類信任設定會假設基本信任存放區具有代表根憑證的單一信任錨點。未指定任何中繼憑證。
建立信任設定:
設定下列環境變數:
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 編碼中繼憑證的路徑。
準備信任設定 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')
建立信任設定 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
的信任設定。信任設定包含一個信任儲存庫,其中包含根憑證和兩個中繼憑證。將信任設定匯入 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,可以略過這個步驟。
如要完成這項工作,您必須具備下列權限:
certificatemanager.trustconfigs.use
在您為這個「ServerTlsPolicy
」建立的信任設定中- 目標專案的
networksecurity.serverTlsPolicies.create
Google Cloud
建立伺服器 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 用戶端驗證模式。將伺服器 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
權限。
將現有的目標 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
將
ServerTlsPolicy
附加至目標 HTTPS Proxy 設定:如要完成這項工作,您必須具備下列權限:
- 在您為目標 HTTPS Proxy 建立的
ServerTlsPolicy
上按一下networksecurity.serverTlsPolicies.use
compute.targetHttpsProxies.update
目標 Google Cloud 專案
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 政策。
- 在您為目標 HTTPS Proxy 建立的
從本機檔案匯入新設定,更新目標 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),請在自訂存取層級的「條件」欄位中新增下列運算式,以便在驗證時使用 PKI 認證繫結:
certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true
其中 TLS_POLICY_FULL_RESOURCE_PATH1 和 TLS_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_PATH1 和 TLS_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 政策:
- 如果尚未設定 IAP,請按照操作說明設定 IAP。
- 前往 IAP 附加您先前建立的存取層級:
前往 IAP - 選取要以 CBA 保護的資源,然後按一下「設定」。
- 在「Access Levels」(存取層級) 欄位中,輸入您建立的存取層級名稱。
如要使用 Google Cloud CLI 在 IAP 中設定 CBA 政策,請參閱 Google Cloud CLI 說明文件。
設定瀏覽器自動選取憑證
如要讓瀏覽器在判斷存取權時自動選取憑證,請完成適用於您瀏覽器的步驟。
Chrome
設定 AutoSelectCertificateForURLs
Chrome 政策,讓 Chrome 在 mTLS 握手期間使用正確的憑證。
確認 Chrome 瀏覽器是由 Chrome 瀏覽器雲端管理服務或 Windows 群組原則管理:
- Windows、macOS、Linux:完成設定受管理 Chrome 設定檔的步驟。
- Chrome:將裝置註冊到企業。
新增
AutoSelectCertificateForUrls
政策:
詳情請參閱政策結構定義的說明文件。以下是使用端點驗證憑證的政策設定範例:
{
"pattern":"https://[*.].mysite.com",
"Filter":{
"ISSUER":{
"CN":"Google Endpoint Verification"
}
}
}
Safari
設定身分偏好設定:
- 開啟「鑰匙圈存取」應用程式,然後選取「所有項目」。
- 選取要設定的憑證。
- 依序點按「檔案」 >「新增身分偏好設定」。
- 輸入網址並按一下「新增」。
這會在「鑰匙圈」中建立新的身分偏好設定項目,供您更新。
Edge
請按照 Edge 說明文件中的指示設定 AutoSelectCertificateForUrls
Edge 政策。