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 dispositivos confiables a aplicaciones web empresariales que se ejecutan en Google Cloud.

Descripción general

La CBA para aplicaciones web usa las funciones de Acceso adaptado al contexto de Chrome Enterprise Premium y laGoogle Cloud conexión en red para proteger el acceso con TLS mutuo (mTLS). A continuación, se indican los componentes principales con los que trabajas para habilitar la CBA en aplicaciones web:

  • Access Context Manager: Te permite crear niveles de acceso que requieren certificados cuando se determina el acceso a las aplicaciones web.
  • Identity-Aware Proxy (IAP): Autentica el acceso de los usuarios a las aplicaciones web.
  • Google Cloud Balanceador de cargas HTTPS: Proporciona autenticación mutua (mTLS) entre los usuarios y las 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

Para verificar que tienes una versión actual de Google Cloud CLI, ejecuta el siguiente comando:

gcloud components update

Configura la mTLS para el balanceador de cargas HTTPS externo

Sigue las instrucciones para configurar el balanceador de cargas externo HTTPS. Toma nota del nombre del proxy HTTPS de destino que se creó, ya que lo necesitarás en un paso posterior.

Crea una configuración de confianza

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

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

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

Método 1

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

  1. Completa los pasos para crear una CA 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: Es la ubicación de la CA.
  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: Es la ruta de acceso a tu certificado intermedio codificado en PEM.
      • SECOND_IM_CERT_PATH: Es la ruta de acceso a tu segundo certificado intermedio codificado en 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. La configuración de confianza contiene un almacén de confianza, que incluye el certificado raíz y dos certificados intermedios.

    4. Importa la configuración de confianza en Google Cloud Certificate Manager:

      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: ID del proyecto de Google Cloud

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

Método 2

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

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

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: Es la ruta de acceso a tu certificado intermedio codificado en PEM.
    • SECOND_IM_CERT_PATH: Es la ruta de acceso a tu segundo certificado intermedio codificado en 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. La configuración de confianza contiene un almacén de confianza, que incluye el certificado raíz y dos certificados intermedios.

  4. Importa la configuración de confianza en Google Cloud Certificate Manager:

    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: ID del proyecto de Google Cloud

Método 3

Si usas el 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. La Verificación de extremos implementa automáticamente un certificado autofirmado emitido por Google en tus dispositivos, por lo que 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: ID del proyecto de Google Cloud
    • TRUST_CONFIG_NAME: Es la configuración de confianza 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 de cliente de MTLS.

  2. Importa el archivo YAML de la política de TLS del servidor al proyecto 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 Google Cloud ID del proyecto.

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

Cómo adjuntar 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 Google Cloud de destino.

  1. Exporta tu proxy HTTPS de destino existente a un archivo local:

    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: 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: ID del proyecto de Google Cloud
    • SERVER_TLS_POLICY_NAME: Es la política de TLS del servidor.
  3. Actualiza el proxy HTTPS de destino importando 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: 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 expresión en el campo Condiciones de tu nivel de acceso personalizado para usar la vinculación de certificación de PKI durante la autenticación:

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

    Aquí, TLS_POLICY_FULL_RESOURCE_PATH1 y TLS_POLICY_FULL_RESOURCE_PATH2 son las rutas de acceso que representan varios parámetros de configuración de confianza: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

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

    Reemplaza lo siguiente:

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

    Si usaste un certificado autofirmado emitido por Google (método 3), agrega la siguiente expresión en el campo Condiciones de tu nivel de acceso personalizado para usar la vinculación de certificados 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 la 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.
  • FILE: Es un archivo YAML que contiene la siguiente expresión:

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

    Aquí, TLS_POLICY_FULL_RESOURCE_PATH1 y TLS_POLICY_FULL_RESOURCE_PATH2 son las rutas de acceso que representan varios parámetros de configuración de confianza: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

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

    Reemplaza lo siguiente:

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

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

Si no tienes una configuración de confianza porque usas un certificado autofirmado con la verificación de extremos (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, IAP proporciona la aplicación de políticas basadas en principales para proteger tus aplicaciones web de dispositivos que no son de confianza.

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

  1. Si no configuraste IAP, sigue las instrucciones para hacerlo.
  2. Ve a IAP para adjuntar el nivel de acceso que creaste anteriormente:
    Ir a IAP
  3. Selecciona el recurso que deseas proteger con CBA y, luego, haz clic en 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 que seleccione el certificado automáticamente

Para que tu navegador seleccione automáticamente el certificado cuando determine el acceso, completa los pasos correspondientes a tu 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 el navegador Chrome esté administrado por la Administración en la nube para el navegador Chrome o la política de grupo de Windows:

  2. Agrega la política AutoSelectCertificateForUrls:

    1. En la Consola del administrador, ve a Dispositivos > Chrome > Configuración > Configuración de usuarios y navegadores > Certificados de cliente.
    2. Selecciona una organización.
    3. Agrega una política de 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 Endpoint Verification:

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

Safari

Configura la preferencia de identidad:

  1. Abre la app Acceso a Llavero y, luego, selecciona Todos los ítems.
  2. Selecciona el certificado que deseas configurar.
  3. Haz clic en File > New Identity Preference.
  4. Ingresa la URL y haz clic en Agregar.

Esto crea una nueva entrada de preferencia de identidad en tu Llavero que puedes actualizar.

Edge

Configura la política de AutoSelectCertificateForUrls Edge siguiendo las instrucciones de la documentación de Edge.