为全球外部应用负载均衡器设置双向 TLS

本页面介绍如何为全球外部应用负载均衡器配置双向 TLS (mTLS)。

准备工作

为负载均衡器设置 mTLS

要使双向 TLS 身份验证正常运行,在设置负载均衡器后,您需要使用 ServerTLSPolicy 资源更新目标 HTTPS 代理。

  1. 确保您已创建 ServerTLSPolicy 资源。如需了解相关说明,请参阅创建网络安全资源

  2. 如需列出项目中的所有目标 HTTPS 代理,请使用 gcloud compute target-https-proxies list 命令

    gcloud compute target-https-proxies list
    

    记下目标 HTTPS 代理的名称,用于附加 ServerTLSPolicy 资源。此名称在后面的步骤中称为 TARGET_HTTPS_PROXY_NAME

  3. 如需将目标 HTTPS 代理的配置导出到文件,请使用 gcloud compute target-https-proxies export 命令

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
       --global \
       --destination=xlb-mtls-target-proxy.yaml
    
  4. 列出当前项目指定位置中的所有 ServerTlsPolicies 资源。

    控制台

    1. 在 Google Cloud 控制台中,进入客户端身份验证页面。

    前往客户端身份验证

    1. 系统会显示所有 ServerTlsPolicies 资源。

    gcloud

    如需列出所有客户端身份验证 (ServerTlsPolicies) 资源,请使用 gcloud network-security server-tls-policies list 命令

    gcloud network-security server-tls-policies list \
     --location=global
    

    记下 ServerTlsPolicies 资源的名称,用于配置 mTLS。此名称在下一步中称为 SERVER_TLS_POLICY_NAME

  5. 如需附加 ServerTlsPolicy 资源文件 xlb-mtls-target-proxy.yaml,请使用以下命令。将 PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/global/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> xlb-mtls-target-proxy.yaml
  6. 如需从文件导入目标 HTTPS 代理的配置,请使用 gcloud compute target-https-proxies import 命令

    gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
       --global \
       --source=xlb-mtls-target-proxy.yaml
    

添加 mTLS 自定义标头

启用 mTLS 后,您可以使用自定义请求标头将 mTLS 连接的相关信息传递给后端服务。您还可以启用日志记录,以便在日志中捕获 mTLS 连接失败

  1. 如需列出项目中的所有后端服务,请使用 gcloud compute backend-services list 命令

    gcloud compute backend-services list
    

    记下后端服务的名称,用于启用自定义标头和日志记录。此名称在后面的步骤中称为 BACKEND_SERVICE

  2. 如需更新后端服务,请使用 gcloud compute backend-services update 命令

    gcloud compute backend-services update BACKEND_SERVICE \
      --global \
      --enable-logging \
      --logging-sample-rate=1 \
      --custom-request-header='X-Client-Cert-Present:{client_cert_present}' \
      --custom-request-header='X-Client-Cert-Chain-Verified:{client_cert_chain_verified}' \
      --custom-request-header='X-Client-Cert-Error:{client_cert_error}' \
      --custom-request-header='X-Client-Cert-Hash:{client_cert_sha256_fingerprint}' \
      --custom-request-header='X-Client-Cert-Serial-Number:{client_cert_serial_number}' \
      --custom-request-header='X-Client-Cert-SPIFFE:{client_cert_spiffe_id}' \
      --custom-request-header='X-Client-Cert-URI-SANs:{client_cert_uri_sans}' \
      --custom-request-header='X-Client-Cert-DNSName-SANs:{client_cert_dnsname_sans}' \
      --custom-request-header='X-Client-Cert-Valid-Not-Before:{client_cert_valid_not_before}' \
      --custom-request-header='X-Client-Cert-Valid-Not-After:{client_cert_valid_not_after}'
    

后续步骤