Habilita el acceso basado en certificados para las aplicaciones web

En esta página, se describe cómo habilitar el acceso basado en certificados (CBA) para tus aplicaciones web. Puedes usar la CBA para proteger el acceso desde servicios a aplicaciones web empresariales que se ejecutan en Google Cloud.

Descripción general

CBA para aplicaciones web usa las funciones de acceso adaptado al contexto de Chrome Enterprise Premium y las herramientas de redes de Google Cloud para asegurar el acceso con TLS (mTLS) A continuación, se muestran los componentes principales con los que trabajas para habilitar la CBA para aplicaciones web:

  • Access Context Manager: Te permite crear niveles de acceso que requieran certificados cuando se determine el acceso a las aplicaciones web.
  • Identity-Aware Proxy (IAP): autentica el acceso de los usuarios a las aplicaciones web.
  • Balanceador de cargas HTTPS de Google Cloud: proporciona autenticación mutua (mTLS) entre a usuarios y aplicaciones web.
  • Política de Chrome Enterprise: Proporciona autenticación mutua (mTLS) entre los usuarios y las aplicaciones web cuando se usa el navegador Chrome.

Antes de comenzar

Ejecuta el siguiente comando para verificar que tienes una versión actual de Google Cloud CLI:

gcloud components update

Configura la mTLS para el balanceador de cargas HTTPS externo

Sigue las instrucciones para realizar la configuración. el balanceador de cargas externo HTTPS. Anota el nombre del proxy HTTPS de destino que ya que lo necesitarás en un paso posterior.

Crea una configuración de confianza

Crea una configuración de confianza para para representar tu tipo de infraestructura de clave pública (PKI).

Para completar esta tarea, debes contar con la certificatemanager.trustconfigs.create permiso en el proyecto de destino de Google Cloud.

Puedes crear una configuración de confianza usando un certificado emitido por Google (método 1), tu propio certificado (método 2) o un certificado autofirmado con verificación de extremos (método 3).

Método 1

Usa un certificado emitido por Google para crear una configuración de confianza.

  1. Completa los pasos para Crear una AC raíz.
  2. Recupera el contenido del archivo PEM:

    gcloud privateca roots describe ROOT_CA_ID \
        --pool=POOL_ID \
        --location=CA_LOCATION \
        --format='value(pemCaCertificates)'
    

    Reemplaza lo siguiente:

    • ROOT_CA_ID: Es el ID del certificado raíz.
    • POOL_ID: Es el ID del grupo de certificados raíz.
    • CA_LOCATION: La ubicación de la AC.
  3. Recupera el certificado raíz que se muestra en el campo pemCaCertificates. El certificado es la cadena entre los marcadores BEGIN CERTIFICATE y END CERTIFICATE, y los incluye a ambos.

  4. Guarda el certificado raíz en formato PEM en un archivo.

  5. Crea una configuración de confianza:

    1. Configura las siguientes variables de entorno:

      ROOT_PEM_FILE=TRUST_ANCHOR_PATH
      INT_PEM_FILE1=IM_CERT_PATH
      INT_PEM_FILE2=SECOND_IM_CERT_PATH
      

      Reemplaza lo siguiente:

      • TRUST_ANCHOR_PATH: Es la ruta de acceso a tu ancla de confianza codificada en PEM.
      • IM_CERT_PATH: la ruta de acceso a tu certificado intermedio con codificación PEM.
      • SECOND_IM_CERT_PATH: Es la ruta de acceso a tu segundo certificado intermedio con codificación PEM.
    2. Prepara el contenido del archivo YAML de configuración de confianza:

      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. Crea el archivo YAML de configuración de confianza:

      cat << EOF > trust_config.yaml
      name: "${TRUST_CONFIG_NAME?}"
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT?}"
        intermediateCas:
        - pemCertificate: "${INT_1?}"
        - pemCertificate: "${INT_2?}"
       EOF
      

      Este archivo YAML define una configuración de confianza llamada TRUST_CONFIG_NAME. El la configuración de confianza contiene un almacén de confianza, que incluye certificado y dos certificados intermedios.

    4. Importa la configuración de confianza en el Administrador de certificados de Google Cloud:

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
        --project=GCP_PROJECT \
        --source=${PWD?}/trust_config.yaml
      

      Reemplaza lo siguiente:

      • TRUST_CONFIG_NAME: Es el nombre de tu configuración de confianza.
      • GCP_PROJECT: El ID del proyecto de Google Cloud.

Si implementas una estructura más compleja con AC intermedias firmadas por la raíz, asegúrate de agregar tus AC intermedias como intermediateCAs.

Método 2

Usa tu propia implementación de PKI con certificados existentes para crear una configuración de confianza.

Este tipo de configuración de confianza supone un almacén de confianza básico con una sola configuración de confianza ancla que representa un certificado raíz. No se aceptan certificados intermedios especificada.

Crea una configuración de confianza:

  1. Configura las siguientes variables de entorno:

    ROOT_PEM_FILE=TRUST_ANCHOR_PATH
    INT_PEM_FILE1=IM_CERT_PATH
    INT_PEM_FILE2=SECOND_IM_CERT_PATH
    

    Reemplaza lo siguiente:

    • TRUST_ANCHOR_PATH: Es la ruta de acceso a tu ancla de confianza codificada en PEM.
    • IM_CERT_PATH: la ruta de acceso a tu certificado intermedio con codificación PEM.
    • SECOND_IM_CERT_PATH: Es la ruta de acceso a tu segundo código PEM con codificación PEM. certificado intermedio.
  2. Prepara el contenido del archivo YAML de configuración de confianza:

    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. Crea el archivo YAML de configuración de confianza:

    cat << EOF > trust_config.yaml
    name: "${TRUST_CONFIG_NAME?}"
    trustStores:
    - trustAnchors:
      - pemCertificate: "${ROOT?}"
      intermediateCas:
      - pemCertificate: "${INT_1?}"
      - pemCertificate: "${INT_2?}"
    EOF
    

    Este archivo YAML define una configuración de confianza llamada TRUST_CONFIG_NAME. El la configuración de confianza contiene un almacén de confianza, que incluye certificado y dos certificados intermedios.

  4. Importa la configuración de confianza en el Administrador de certificados de Google Cloud:

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
      --project=GCP_PROJECT \
      --source=${PWD?}/trust_config.yaml
    

    Reemplaza lo siguiente:

    • TRUST_CONFIG_NAME: Es el nombre de tu configuración de confianza.
    • GCP_PROJECT: El ID del proyecto de Google Cloud.

Método 3

Si usas un navegador Chrome y deseas usar un certificado autofirmado con la Verificación de extremos, sigue las instrucciones de esta sección.

Sigue las instrucciones para implementar Endpoint Verification en tu organización. Endpoint Verification implementa automáticamente un certificado firmado por Google en tus dispositivos, y no tienes que crear una configuración de confianza.

Crea una política de TLS para habilitar la mTLS en tu balanceador de cargas externo

Si usaste el método 3, puedes omitir este paso.

Para completar esta tarea, debes tener los siguientes permisos:

  1. Crea el archivo YAML de la política de TLS del servidor:

    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
    

    Reemplaza lo siguiente:

    • SERVER_TLS_POLICY_NAME: Es el nombre de la política de TLS del servidor.
    • GCP_PROJECT: El ID del proyecto de Google Cloud.
    • TRUST_CONFIG_NAME: Es la configuración de confianza que que creaste en un paso anterior.

    Para obtener información sobre las opciones de validación del cliente para clientValidationMode, consulta Modos de validación del cliente de MTLS.

  2. Importa el archivo YAML de la política de TLS del servidor al proyecto de Google Cloud:

    gcloud network-security server-tls-policies import ${SERVER_TLS_POLICY_NAME?} \
      --project=GCP_PROJECT \
      --source=${PWD?}/server_tls_policy.yaml \
      --location=global
    

    Reemplaza GCP_PROJECT por el ID del proyecto de Google Cloud.

Después de crear una política de TLS, no puedes modificarla. Si deseas realizar cambios en una política de TLS existente, bórrala y crea una nueva.

Adjunta una política de TLS a una política de HTTPS de destino

Para completar esta tarea, debes tener el permiso compute.targetHttpsProxies.get en el proyecto de Google Cloud de destino.

  1. Exporta tu proxy HTTPS de destino existente a una ubicación local archivo:

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --destination=${PWD?}/xlb-mtls-target-proxy.yaml
    

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: Es el proxy HTTPS de destino.
    • GCP_PROJECT: El ID del proyecto de Google Cloud.
  2. Agrega ServerTlsPolicy a la configuración del proxy HTTPS de destino:

    Para completar esta tarea, debes tener los siguientes permisos:

    echo "serverTlsPolicy:
    //networksecurity.googleapis.com/projects/GCP_PROJECT/locations/global/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> xlb-mtls-target-proxy.yaml
    

    Reemplaza lo siguiente:

    • GCP_PROJECT: El ID del proyecto de Google Cloud.
    • SERVER_TLS_POLICY_NAME: Es la política de TLS del servidor.
  3. Para actualizar el proxy HTTPS de destino, importa la configuración nueva desde el archivo local:

    gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --source=${PWD?}/xlb-mtls-target-proxy.yaml
    

    Reemplaza lo siguiente:

    • TARGET_HTTPS_PROXY_NAME: Es el proxy HTTPS de destino.
    • GCP_PROJECT: El ID del proyecto de Google Cloud.

Crea un nivel de acceso que requiera certificados

Console

  1. Sigue las instrucciones para crear un nivel de acceso personalizado.
  2. Agrega la siguiente expresión a tu nivel de acceso personalizado:

    Si creaste una configuración de confianza (método 1 o método 2), agrega la siguiente información: en el campo Condiciones de tu nivel de acceso personalizado para que la use Vinculación de certificación de PKI durante la autenticación:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true
    

    En el que TLS_POLICY_FULL_RESOURCE_PATH1 y TLS_POLICY_FULL_RESOURCE_PATH2 son las rutas de acceso que representan varias configuraciones de confianza: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

    Debes proporcionar al menos una ruta de configuración de confianza.

    Reemplaza lo siguiente:

    • GCP_PROJECT: El ID del proyecto de Google Cloud.
    • TRUST_CONFIG_NAME: Es el nombre de tu configuración de confianza.

    Si usaste un certificado firmado por Google y autofirmado (método 3), agrega la siguiente expresión en el campo Condiciones de tu nivel de acceso personalizado para usar la vinculación de certificado durante la autenticación:

    certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
    

gcloud

Si creaste una configuración de confianza (método 1 o método 2), ejecuta el siguiente comando para crear un nivel de acceso personalizado que use vinculación de certificación de PKI durante la autenticación:

gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
    --title=TITLE \
    --custom-level-spec=FILE \
    --description=DESCRIPTION \
    --policy=POLICY_NAME

Reemplaza lo siguiente:

  • ACCESS_LEVEL_NAME: Es un nombre único para el nivel de acceso.
  • TITLE: Es un título legible por humanos.
  • FILE: Un archivo YAML que contiene la siguiente expresión:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true

    En el que TLS_POLICY_FULL_RESOURCE_PATH1 y TLS_POLICY_FULL_RESOURCE_PATH2 son las rutas de acceso que representan varias configuraciones de confianza: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

    Debes proporcionar al menos una ruta de configuración de confianza.

    Reemplaza lo siguiente:

    • GCP_PROJECT: El ID del proyecto de Google Cloud.
    • TRUST_CONFIG_NAME: Es el nombre de tu configuración de confianza.
  • DESCRIPTION: Es una descripción con formato largo del nivel de acceso.

  • POLICY_NAME: La política de acceso de tu organización.

Si no tienes una configuración de confianza porque usas un certificado autofirmado con Endpoint Verification (método 3), agrega la siguiente expresión a tu nivel de acceso personalizado:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

Aplica el acceso basado en certificados con Identity-Aware Proxy (IAP)

En la arquitectura de CBA para aplicaciones web, el IAP proporciona la aplicación forzosa de políticas basadas en el principal para proteger tus aplicaciones web de dispositivos no confiables.

Completa los siguientes pasos para habilitar IAP y configurar la política de CBA:

  1. Si no tienes configurados los IAP, sigue las instrucciones para configurarlos.
  2. Ve a IAP para adjuntar el nivel de acceso que creaste antes:
    Ir a IAP
  3. Selecciona el recurso que deseas proteger con CBA y, luego, haz clic en Settings (Configuración).
  4. En el campo Niveles de acceso, ingresa el nombre del nivel de acceso que creaste.

Para usar Google Cloud CLI y configurar una política de CBA en el IAP, consulta la documentación de Google Cloud CLI.

Configura el navegador para seleccionar automáticamente el certificado

Para que el navegador seleccione automáticamente el certificado al determinar el acceso, haz lo siguiente: completa los pasos del navegador.

Chrome

Configura la política de Chrome AutoSelectCertificateForURLs para que Chrome use el certificado correcto durante el protocolo de enlace mTLS.

  1. Asegúrate de que la Administración en la nube para el navegador Chrome o la directiva de grupo de Windows administren el navegador Chrome:

  2. Agrega la política AutoSelectCertificateForUrls:

    1. En la Consola del administrador, ve a Dispositivos > Chrome > Configuración > Usuarios y Configuración del navegador > Certificados de cliente.
    2. Selecciona una organización.
    3. Agrega una política AutoSelectCertificateForUrls para la URL de tu aplicación web y la información del certificado raíz.

Para obtener más información, consulta la documentación sobre el esquema de políticas. A continuación, se muestra un ejemplo de configuración de política que usa el certificado de la Verificación de extremos:

{
  "pattern":"https://[*.].mysite.com",
  "Filter":{
    "ISSUER":{
      "CN":"Google Endpoint Verification"
    }
  }
}

Safari

Configura la preferencia de identidad:

  1. Abre la app Acceso a llaveros y selecciona Todos los elementos.
  2. Selecciona el certificado que quieres configurar.
  3. Haz clic en Archivo > Nueva preferencia de identidad.
  4. Ingresa la URL y haz clic en Agregar.

Esto creará una nueva entrada de preferencia de identidad en tu llavero que podrás actualizar.

Edge

Para establecer la política perimetral de AutoSelectCertificateForUrls, sigue las instrucciones que se indican a continuación. en la documentación de Edge.