为区域级外部应用负载均衡器设置双向 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 beta compute target-https-proxies export 命令

    区域级

     gcloud beta compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
         --destination=TARGET_PROXY_FILENAME \
         --region=REGION
     

    替换以下内容:

    • TARGET_HTTPS_PROXY_NAME:目标代理的名称。
    • TARGET_PROXY_FILENAME:yaml 文件的名称。例如 mtls_target_proxy.yaml
    • REGION:您在其中配置了负载均衡器的区域。
  4. 列出当前项目指定位置中的所有 ServerTlsPolicies 资源。

    控制台

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

      前往客户端身份验证

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

    gcloud

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

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

    替换以下内容:

    REGION:您在其中配置了负载均衡器的区域。对于跨区域内部应用负载均衡器,请使用 global

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

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

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

    区域级

       gcloud beta compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
           --source=TARGET_PROXY_FILENAME \
           --region=REGION
       

    替换以下内容:

    • TARGET_HTTPS_PROXY_NAME:目标代理的名称。
    • TARGET_PROXY_FILENAME:yaml 文件的名称。例如 mtls_target_proxy.yaml
    • REGION:您在其中配置了负载均衡器的区域。

添加 mTLS 自定义标头

启用 mTLS 后,您可以使用自定义标头将有关 mTLS 连接的信息传递给网址映射。您还可以启用日志记录,以便在日志中捕获 mTLS 连接失败

如需列出项目中的所有网址映射,请使用 gcloud beta compute url-maps list 命令

   gcloud beta compute url-maps list
   

记下网址映射的名称,以便启用自定义标头和日志记录。此名称在后面的步骤中称为 URL_MAP_NAME

区域级

   gcloud compute url-maps edit URL_MAP_NAME --region=REGION
   

以下示例 YAML 文件展示了如何在自定义请求标头 (requestHeadersToAdd) 中使用变量。您可以使用相同的变量发送自定义响应标头 (responseHeadersToAdd)。

   defaultService: regions/REGION/backendServices/BACKEND_SERVICE_1
      name: regional-lb-map
      region: region/REGION
   headerAction:
      requestHeadersToAdd:
      - headerName: "X-Client-Cert-Present"
        headerValue: "{client_cert_present}"
      - headerName: "X-Client-Cert-Chain-Verified"
        headerValue: "{client_cert_chain_verified}"
      - headerName: "X-Client-Cert-Error"
        headerValue: "{client_cert_error}"
      - headerName: "X-Client-Cert-Hash"
        headerValue: "{client_cert_sha256_fingerprint}"
      - headerName: "X-Client-Cert-Serial-Number"
        headerValue: "{client_cert_serial_number}"
      - headerName: "X-Client-Cert-SPIFFE"
        headerValue: "{client_cert_spiffe_id}"
      - headerName: "X-Client-Cert-URI-SANs"
        headerValue: "{client_cert_uri_sans}"
      - headerName: "X-Client-Cert-DNSName-SANs"
        headerValue: "{client_cert_dnsname_sans}"
      - headerName: "X-Client-Cert-Valid-Not-Before"
        headerValue: "{client_cert_valid_not_before}"
      - headerName: "X-Client-Cert-Valid-Not-After"
        headerValue: "{client_cert_valid_not_after}"
      - headerName: "X-Client-Cert-Issuer-Dn"
        headerValue: "{client_cert_issuer_dn}"
      - headerName: "X-Client-Cert-Subject-Dn"
        headerValue: "{client_cert_subject_dn}"
      - headerName: "X-Client-Cert-Leaf"
        headerValue: "{client_cert_leaf}"
      - headerName: "X-Client-Cert-Chain"
        headerValue: "{client_cert_chain}"
   

后续步骤