Configura TLS mutua para un balanceador de cargas interno de aplicaciones

En esta página, se muestran ejemplos de configuración de TLS mutua (mTLS) para un balanceador de cargas de aplicaciones interno entre regiones o un balanceador de cargas de aplicaciones interno regional.

Antes de comenzar

Configura la mTLS para el balanceador de cargas

Para que la autenticación de la TLS mutua funcione, después de configurar un balanceador de cargas, debes actualizar el proxy HTTPS de destino mediante el recurso ServerTLSPolicy.

  1. Asegúrate de haber creado el recurso ServerTLSPolicy. Para obtener instrucciones, consulta Crea los recursos de seguridad de red.

  2. Para obtener una lista de todos los proxies HTTPS de destino en tu proyecto, usa el comando gcloud compute target-https-proxies list:

    gcloud compute target-https-proxies list
    

    Toma nota del nombre del proxy HTTPS de destino para conectar el recurso ServerTLSPolicy. Este nombre se denomina TARGET_HTTPS_PROXY_NAME en los siguientes pasos.

  3. Para exportar la configuración de un proxy HTTPS de destino a un archivo, usa el comando gcloud beta compute target-https-proxies export.

    global

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

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml

    regional

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

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml
    • REGION: la región en la que configuraste el balanceador de cargas.
  4. Enumera todos los recursos ServerTlsPolicies en la ubicación especificada del proyecto actual.

    Consola

    1. En la consola de Google Cloud, ve a la página Autenticación de clientes.

      Ir a Autenticación de clientes

    2. Se muestran todos los recursos ServerTlsPolicies.

    gcloud

    Para enumerar todos los recursos de autenticación de clientes (ServerTlsPolicies), usa el comando gcloud network-security server-tls-policies list:

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

    Reemplaza lo siguiente:

    REGION: la región en la que configuraste el balanceador de cargas. Para balanceadores de cargas de aplicaciones internos entre regiones, usa global.

    Ten en cuenta el nombre del recurso ServerTlsPolicies para configurar mTLS. Este nombre se denomina SERVER_TLS_POLICY_NAME en el paso siguiente.

  5. Para agregar el archivo de recursos TARGET_PROXY_FILENAME de ServerTlsPolicy, usa el siguiente comando. Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud.

    echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/PROJECT_ID/locations/REGION/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> TARGET_PROXY_FILENAME
    
  6. Para importar la configuración de un proxy HTTPS de destino desde un archivo, usa el comando gcloud beta compute target-https-proxies import.

    global

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

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml

    regional

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

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: el nombre del proxy de destino.
    • TARGET_PROXY_FILENAME: el nombre de un archivo yaml. Por ejemplo, mtls_target_proxy.yaml
    • REGION: la región en la que configuraste el balanceador de cargas.

Agrega encabezados personalizados mTLS

Con mTLS habilitado, puedes usar encabezados personalizados para pasar información sobre la conexión mTLS al mapa de URL. También puedes habilitar el registro para que se capturen los errores de conexión mTLS en los registros.

Para enumerar todos los mapas de URL en el proyecto, usa el comando gcloud beta compute url-maps list:

   gcloud beta compute url-maps list
   

Toma nota del nombre del mapa de URL para habilitar los encabezados y el registro personalizados. Este nombre se denomina URL_MAP_NAME en el siguiente paso.

global

   gcloud compute url-maps edit URL_MAP_NAME --global
   

A continuación, se muestra un archivo YAML de muestra que indica cómo usar variables en encabezados de solicitud personalizados (requestHeadersToAdd). Puedes usar las mismas variables para enviar encabezados de respuesta personalizados (responseHeadersToAdd).

   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}"
   

regional

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

A continuación, se muestra un archivo YAML de muestra que indica cómo usar variables en encabezados de solicitud personalizados (requestHeadersToAdd). Puedes usar las mismas variables para enviar encabezados de respuesta personalizados (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}"
   

¿Qué sigue?