En esta página se describe cómo habilitar el acceso basado en certificados (CBA) para tus aplicaciones web. Puedes usar la autenticación basada en certificados para proteger el acceso desde dispositivos de confianza a aplicaciones web empresariales que se ejecutan en Google Cloud.
Información general
La autenticación basada en certificados para aplicaciones web usa las funciones de acceso contextual de Chrome Enterprise Premium y laGoogle Cloud red para proteger el acceso mediante TLS mutuo (mTLS). Estos son los principales componentes con los que trabajas para habilitar la autenticación basada en certificados en aplicaciones web:
- Administrador de contextos de acceso: te permite crear niveles de acceso que requieren certificados al determinar el acceso a aplicaciones web.
- Identity-Aware Proxy (IAP): autentica el acceso de los usuarios a las aplicaciones web.
- Google Cloud Balanceador de carga HTTPS: proporciona autenticación mutua (mTLS) entre usuarios y aplicaciones web.
- Política de Chrome Enterprise: proporciona autenticación mutua (mTLS) entre usuarios y aplicaciones web al usar el navegador Chrome.
Antes de empezar
Comprueba que tienes una versión actual de la CLI de Google Cloud ejecutando el siguiente comando:
gcloud components update
Configurar mTLS para el balanceador de carga HTTPS externo
Sigue las instrucciones para configurar el balanceador de carga externo HTTPS. Anota el nombre del proxy HTTPS de destino que se crea, ya que lo necesitarás en un paso posterior.
Crear 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 de destino Google Cloud .
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 Verificación de endpoints (método 3).
Método 1
Usa un certificado emitido por Google para crear una configuración de confianza.
- Sigue los pasos para crear una AC raíz.
Obtén el contenido del archivo PEM:
gcloud privateca roots describe ROOT_CA_ID \ --pool=POOL_ID \ --location=CA_LOCATION \ --format='value(pemCaCertificates)'
Haz los cambios siguientes:
- ROOT_CA_ID: el ID del certificado raíz.
- POOL_ID: ID del grupo de certificados raíz.
- CA_LOCATION: la ubicación de la autoridad de certificación.
Obtén el certificado raíz, que se devuelve en el campo
pemCaCertificates
. El certificado es la cadena que se encuentra entre los marcadoresBEGIN CERTIFICATE
yEND CERTIFICATE
, e incluye ambos marcadores.Guarda el certificado raíz en formato PEM en un archivo.
Crea una configuración de confianza:
Define las siguientes variables de entorno:
ROOT_PEM_FILE=TRUST_ANCHOR_PATH INT_PEM_FILE1=IM_CERT_PATH INT_PEM_FILE2=SECOND_IM_CERT_PATH
Haz los cambios siguientes:
- TRUST_ANCHOR_PATH: la ruta a tu ancla de confianza codificada en PEM.
- IM_CERT_PATH: la ruta a tu certificado intermedio codificado en PEM.
- SECOND_IM_CERT_PATH: la ruta a tu segundo certificado intermedio codificado en PEM.
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')
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.Importa la configuración de confianza en Google Cloud Gestor de certificados:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --project=GCP_PROJECT \ --source=${PWD?}/trust_config.yaml
Haz los cambios siguientes:
- TRUST_CONFIG_NAME: el nombre de tu configuración de confianza.
- GCP_PROJECT: el Google Cloud ID de proyecto.
Si implementas una estructura más compleja con CA intermedias firmadas por la raíz, asegúrate de añadir tus intermedias como intermediateCAs
.
Método 2
Usa tu propia implementación de PKI con certificados para crear una configuración de confianza.
Este tipo de configuración de confianza presupone un almacén de confianza básico con un único anclaje de confianza que representa un certificado raíz. No se ha especificado ningún certificado intermedio.
Crea una configuración de confianza:
Define las siguientes variables de entorno:
ROOT_PEM_FILE=TRUST_ANCHOR_PATH INT_PEM_FILE1=IM_CERT_PATH INT_PEM_FILE2=SECOND_IM_CERT_PATH
Haz los cambios siguientes:
- TRUST_ANCHOR_PATH: la ruta a tu ancla de confianza codificada en PEM.
- IM_CERT_PATH: la ruta a tu certificado intermedio codificado en PEM.
- SECOND_IM_CERT_PATH: la ruta a tu segundo certificado intermedio codificado en PEM.
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')
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.Importa la configuración de confianza en Google Cloud Gestor de certificados:
gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \ --project=GCP_PROJECT \ --source=${PWD?}/trust_config.yaml
Haz los cambios siguientes:
- TRUST_CONFIG_NAME: el nombre de tu configuración de confianza.
- GCP_PROJECT: el Google Cloud ID de proyecto.
Método 3
Si usas el navegador Chrome y quieres usar un certificado autofirmado con la verificación de endpoints, sigue las instrucciones de esta sección.
Sigue las instrucciones para implementar la verificación de los puntos de conexión en tu organización. Endpoint Verification implementa automáticamente un certificado autofirmado emitido por Google en tus dispositivos, por lo que no tienes que crear una configuración de confianza.
Crear una política de TLS para habilitar mTLS en un balanceador de carga externo
Si has usado el método 3, puedes saltarte este paso.
Para completar esta tarea, debes tener los siguientes permisos:
certificatemanager.trustconfigs.use
en la configuración de confianza que has creado para esteServerTlsPolicy
networksecurity.serverTlsPolicies.create
en el proyecto Google Cloud de destino
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
Haz los cambios siguientes:
- SERVER_TLS_POLICY_NAME: nombre de la política TLS del servidor.
- GCP_PROJECT: el Google Cloud ID de proyecto.
- TRUST_CONFIG_NAME: la configuración de confianza que has creado en un paso anterior.
Para obtener información sobre las opciones de validación de clientes de
clientValidationMode
, consulta Modos de validación de clientes de MTLS.Importa el archivo YAML de la política 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
Sustituye GCP_PROJECT por el Google Cloud ID del proyecto.
Una vez que hayas creado una política de TLS, no podrás modificarla. Si quieres modificar una política de TLS, elimínala y crea otra.
Asociar una política de TLS a una política HTTPS de destino
Para completar esta tarea, debes tener el permiso compute.targetHttpsProxies.get
en el proyecto de destino Google Cloud .
Exporte el proxy HTTPS de destino 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
Haz los cambios siguientes:
- TARGET_HTTPS_PROXY_NAME: el proxy HTTPS de destino.
- GCP_PROJECT: el Google Cloud ID de proyecto.
Añade
ServerTlsPolicy
a la configuración del proxy HTTPS de destino:Para completar esta tarea, debes tener los siguientes permisos:
networksecurity.serverTlsPolicies.use
en elServerTlsPolicy
que has creado para el proxy HTTPS de destinocompute.targetHttpsProxies.update
en el proyecto de destino Google Cloud
echo "serverTlsPolicy: //networksecurity.googleapis.com/projects/GCP_PROJECT/locations/global/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> xlb-mtls-target-proxy.yaml
Haz los cambios siguientes:
- GCP_PROJECT: el Google Cloud ID de proyecto.
- SERVER_TLS_POLICY_NAME: la política de TLS del servidor.
Actualiza el proxy HTTPS de destino importando la nueva configuración del archivo local:
gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \ --project=GCP_PROJECT \ --global \ --source=${PWD?}/xlb-mtls-target-proxy.yaml
Haz los cambios siguientes:
- TARGET_HTTPS_PROXY_NAME: el proxy HTTPS de destino.
- GCP_PROJECT: el Google Cloud ID de proyecto.
Crear un nivel de acceso que requiera certificados
Consola
- Sigue las instrucciones para crear un nivel de acceso personalizado.
Añade la siguiente expresión a tu nivel de acceso personalizado:
Si has creado una configuración de confianza (método 1 o 2), añade la siguiente expresión en el campo Condiciones de tu nivel de acceso personalizado para usar la vinculación de atestación de PKI al autenticarte:
certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true
Donde TLS_POLICY_FULL_RESOURCE_PATH1 y TLS_POLICY_FULL_RESOURCE_PATH2 son las rutas que representan varias configuraciones de confianza:
certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME
.Debe proporcionar al menos una ruta de configuración de confianza.
Haz los cambios siguientes:
- GCP_PROJECT: el Google Cloud ID de proyecto.
- TRUST_CONFIG_NAME: el nombre de tu configuración de confianza.
Si has usado un certificado autofirmado emitido por Google (método 3), añade la siguiente expresión al campo Condiciones de tu nivel de acceso personalizado para usar la vinculación del certificado al autenticarte:
certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
gcloud
Si has creado una configuración de confianza (método 1 o 2), ejecuta el siguiente comando para crear un nivel de acceso personalizado que use la vinculación de certificación de PKI al autenticarte:
gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
--title=TITLE \
--custom-level-spec=FILE \
--description=DESCRIPTION \
--policy=POLICY_NAME
Haz los cambios siguientes:
- ACCESS_LEVEL_NAME: nombre único del nivel de acceso.
- TITLE: 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
Donde TLS_POLICY_FULL_RESOURCE_PATH1 y TLS_POLICY_FULL_RESOURCE_PATH2 son las rutas que representan varias configuraciones de confianza:
certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME
.Debe proporcionar al menos una ruta de configuración de confianza.
Haz los cambios siguientes:
- GCP_PROJECT: el Google Cloud ID de proyecto.
- TRUST_CONFIG_NAME: el nombre de tu configuración de confianza.
DESCRIPTION: descripción detallada del nivel de acceso.
POLICY_NAME: la política de acceso de tu organización.
Si no tienes una configuración de confianza porque estás usando un certificado autofirmado con Endpoint Verification (método 3), añade la siguiente expresión a tu nivel de acceso personalizado:
certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
Implementar obligatoriamente el acceso basado en certificados mediante Identity-Aware Proxy (IAP)
En la arquitectura de CBA para aplicaciones web, IAP proporciona una política basada en el principal para proteger tus aplicaciones web de dispositivos que no sean de confianza.
Sigue estos pasos para habilitar las compras en la aplicación y configurar la política de CBA:
- Si no has configurado IAP, sigue las instrucciones para hacerlo.
- Ve a IAP para adjuntar el nivel de acceso que has creado anteriormente:
Ir a IAP - Seleccione el recurso que quiera proteger con la autenticación basada en certificados y, a continuación, haga clic en Configuración.
- En el campo Niveles de acceso, introduce el nombre del nivel de acceso que has creado.
Para usar Google Cloud CLI y configurar una política de autenticación basada en certificados en IAP, consulta la documentación de Google Cloud CLI.
Configurar el navegador para que seleccione automáticamente el certificado
Para que tu navegador seleccione automáticamente el certificado al determinar el acceso, sigue los pasos correspondientes a tu navegador.
Chrome
Configura la política de Chrome AutoSelectCertificateForURLs
para que Chrome use el certificado correcto durante el handshake de mTLS.
Asegúrate de que el navegador Chrome esté gestionado por Gestión en la nube del navegador Chrome o por la directiva de grupo de Windows:
- Windows, macOS y Linux: sigue los pasos para configurar un perfil de Chrome gestionado.
- Chrome: registra el dispositivo en la empresa.
Añade la política
AutoSelectCertificateForUrls
:- En la consola de administración, ve a Dispositivos > Chrome > Configuración > Configuración de usuario y de navegador > Certificados de cliente.
- Selecciona una organización.
- Añada una política
AutoSelectCertificateForUrls
para la URL de su 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 la política. A continuación, se muestra un ejemplo de configuración de una 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:
- Abre la aplicación Acceso a Llaveros y selecciona Todos los elementos.
- Selecciona el certificado que quieras configurar.
- Haz clic en Archivo > Nueva preferencia de identidad.
- Introduce la URL y haz clic en Añadir.
De esta forma, se creará una nueva entrada de preferencia de identidad en tu llavero que podrás actualizar.
Edge
Define la política de AutoSelectCertificateForUrls
Edge siguiendo las instrucciones de la documentación de Edge.