Acceso seguro a aplicaciones web privadas

En este documento, se describe cómo configurar una puerta de enlace segura de Chrome Enterprise Premium para proteger el acceso a tus aplicaciones web privadas.

Una puerta de enlace segura de Chrome Enterprise Premium funciona como un proxy de reenvío, aplica un marco de trabajo de acceso de confianza cero y ofrece un control detallado y adaptado al contexto sobre quién accede a tus aplicaciones web privadas.

Cómo funciona la protección del acceso a aplicaciones web privadas

Al establecer un túnel seguro y aplicar políticas de acceso adaptado al contexto, la puerta de enlace segura mantiene privadas las aplicaciones privadas y protegidas de la exposición a Internet pública. Una configuración del navegador del cliente dirige el tráfico de estas aplicaciones a través del extremo del proxy de la puerta de enlace segura. Luego, la puerta de enlace segura aplica la política de acceso pertinente y, si se permite, enruta la solicitud a la aplicación de destino.

La puerta de enlace segura puede proteger aplicaciones web privadas alojadas en los siguientes entornos:

  • Google Cloud project: La puerta de enlace segura puede acceder directamente a las aplicaciones que se ejecutan en tu red de VPC Google Cloud .

  • NoGoogle Cloud (centros de datos locales o otras nubes): Primero debes establecer una conexión entre tu red de VPC privada enGoogle Cloud y la red que no es deGoogle Cloud . Esto se suele hacer con Cloud VPN o Cloud Interconnect. Luego, la puerta de enlace segura usa la conexión para enviar el tráfico a tu red de VPC privada, que, a su vez, lo enruta al entorno que no es deGoogle Cloud .

Antes de comenzar

Antes de configurar la puerta de enlace segura, verifica que tengas lo siguiente:

Configura tu entorno de shell

Para optimizar el proceso de configuración y, luego, interactuar con las APIs de la puerta de enlace segura, define las siguientes variables de entorno en tu shell de trabajo.

  • Parámetros generales

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=MY_PROJECT_ID

    Reemplaza lo siguiente:

    • MY_PROJECT_ID: Es el ID del proyecto en el que se crea la puerta de enlace segura.
  • Parámetros de puerta de enlace seguros

    SECURITY_GATEWAY_ID=MY_SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="MY_SECURITY_GATEWAY_DISPLAY_NAME"

    Reemplaza lo siguiente:

    • MY_SECURITY_GATEWAY_ID: Es el ID de la puerta de enlace segura que deseas crear. El ID puede tener hasta 63 caracteres y puede contener letras en minúscula, números y guiones. El primer carácter debe ser una letra y el último puede ser una letra o un número.
    • MY_SECURITY_GATEWAY_DISPLAY_NAME: Es el nombre legible de la puerta de enlace segura. El nombre puede tener hasta 63 caracteres y puede incluir caracteres imprimibles.

Crea una puerta de enlace segura

Una puerta de enlace segura de Chrome Enterprise Premium es un componente fundamental para establecer conexiones seguras con tus aplicaciones. Asigna un proyecto y una red dedicados, lo que proporciona aislamiento y seguridad.

gcloud

gcloud beta beyondcorp security-gateways create ${SECURITY_GATEWAY_ID} \
  --project=${PROJECT_ID} \
  --location=global \
  --display-name="${SECURITY_GATEWAY_DISPLAY_NAME}"
      

REST

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d '{ "display_name": "MY_SECURITY_GATEWAY_DISPLAY_NAME" }' \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways?security_gateway_id=${SECURITY_GATEWAY_ID}"
      

Configura una aplicación web privada

Antes de definir recursos de aplicaciones específicos en la puerta de enlace segura, debes configurar los permisos y la configuración de red necesarios para habilitar la conectividad y el enrutamiento adecuado.

Otorga permisos a la cuenta de servicio.

Para enviar tráfico correctamente a tu red de VPC, la puerta de enlace de seguridad necesita ciertos permisos de IAM otorgados a su cuenta de servicio delegada. Esto permite que la puerta de enlace segura llegue a tus aplicaciones privadas, ya sea que estén alojadas dentro de una Google Cloud VPC o en un entorno que no sea deGoogle Cloud y que esté conectado a través de Cloud VPN o Cloud Interconnect.

  1. Obtén los detalles de tu puerta de enlace segura para identificar el correo electrónico de la cuenta de servicio delegada. El correo electrónico se encuentra en el campo delegatingServiceAccount de la respuesta.

    gcloud

    gcloud beta beyondcorp security-gateways describe ${SECURITY_GATEWAY_ID} \
       --project=${PROJECT_ID} \
       --location=global
                   

    REST

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
                   
  2. Configura variables de entorno para la cuenta de servicio y tu proyecto de VPC de destino.
    DELEGATING_SERVICE_ACCOUNT="security-gateway@my-gateway-service-account.iam.gserviceaccount.com" # Replace with actual value
          
  3. Otorga el rol de IAM roles/beyondcorp.upstreamAccess a la cuenta de servicio de delegación en tu proyecto de VPC privada.
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
       --role=roles/beyondcorp.upstreamAccess \
       --member=serviceAccount:${DELEGATING_SERVICE_ACCOUNT}
        
    Reemplaza PRIVATE_VPC_PROJECT_ID por el ID del proyecto de la red de VPC en la que se implementa la app web privada o en la que se configura Cloud VPN o Interconnect.

Espera aproximadamente dos minutos para que la política de Identity and Access Management surta efecto después de que otorgues el rol.

Configura el enrutamiento de red y las reglas de firewall

Para permitir que el tráfico de la puerta de enlace segura llegue a tus aplicaciones web privadas, configura las reglas de firewall, el enrutamiento de red y la configuración de DNS.

Reglas de firewall para aplicaciones en Google Cloud

Si tu aplicación web privada está alojada dentro de tu red de Google Cloud VPC, por ejemplo, en una VM de Compute Engine, un servicio de Google Kubernetes Engine con una IP interna o detrás de un balanceador de cargas TCP/UDP interno, configuraGoogle Cloud reglas de firewall de VPC. Esto permite el tráfico de entrada de TCP desde los rangos de IP de la puerta de enlace segura: 34.158.8.0/21 y 136.124.16.0/20.

Reglas de firewall para aplicaciones en entornos que no son deGoogle Cloud

Si tu aplicación web privada reside en un centro de datos local o en la red de otro proveedor de servicios en la nube, y está conectada a tu VPC de Google Cloudcon Cloud VPN o Cloud Interconnect, configura reglas de firewall en tu firewall local o los controles de seguridad de red equivalentes, como grupos de seguridad y ACL de red, en el otro entorno de nube. Esto permite el tráfico de entrada de TCP desde los rangos de IP de la puerta de enlace segura.

Configura el enrutamiento desde entornos que no son deGoogle Cloud a una puerta de enlace segura

Para facilitar la comunicación bidireccional de las aplicaciones privadas alojadas en entornos que no son deGoogle Cloud , como locales o en otras nubes, tu red externa debe crear una ruta de retorno a los siguientes rangos de IP de la puerta de enlace segura: 34.158.8.0/21 y 136.124.16.0/20.

Verifica que tu red privada pueda acceder a los rangos de IP de la puerta de enlace segura a través de Cloud VPN o Cloud Interconnect:

  • Enrutamiento dinámico: Si usas enrutamiento dinámico, como el Protocolo de Puerta de Enlace Fronteriza (BGP) con Cloud Router, verifica que tu Cloud Router en Google Cloud anuncie de forma explícita los rangos de IP de la puerta de enlace segura a tu dispositivo BGP local. Si bien el BGP intercambia dinámicamente muchas rutas, los rangos de IP de la puerta de enlace segura requieren un anuncio explícito.

  • Enrutamiento estático: Si usas rutas estáticas, debes agregar manualmente rutas para cada uno de los rangos de IP de la puerta de enlace segura en el equipo de tu red local, como el router o el firewall. Estas rutas estáticas deben especificar que el tráfico destinado a los rangos de IP de la puerta de enlace segura se debe enviar a través de la conexión de Cloud VPN o Cloud Interconnect.

    Cuando se usa el enrutamiento estático, Cloud VPN debe estar en una de las siguientes regiones admitidas:

    • africa-south1
    • asia-east1
    • asia-south1
    • asia-south2
    • asia-southeast1
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west8
    • europe-west9
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-west1

Configuración de DNS para la resolución segura de nombres de host privados de la puerta de enlace

Para que la puerta de enlace segura resuelva los nombres de host de tu aplicación privada, tu red de VPCGoogle Cloud debe poder resolver los nombres de host con Cloud DNS. La configuración específica de Cloud DNS depende de dónde se alojen de forma autorizada tus registros DNS privados:

  • Aplicaciones dentro de Google Cloud que usan zonas privadas de Cloud DNS: Si tus aplicaciones privadas están alojadas en Google Cloud y sus registros de DNS se administran dentro de las zonas privadas de Cloud DNS que están asociadas con tu red de VPC, verifica que las zonas estén configuradas correctamente y que se pueda acceder a ellas. La puerta de enlace segura usa las capacidades de resolución de Cloud DNS existentes de tu VPC.

  • Aplicaciones en entornos que no son deGoogle Cloud o que usan servidores DNS externos: Si tus aplicaciones privadas se encuentran en entornos que no son deGoogle Cloud(locales o en otras nubes) o si sus registros DNS se administran con servidores DNS externos a las zonas privadas de Cloud DNS de tu VPC, debes configurar Cloud DNS para que reenvíe las consultas de estos dominios privados. Por lo general, esto implica crear zonas de reenvío de Cloud DNS dentro de tu VPC. Estas zonas dirigirán las consultas de DNS para tus dominios privados especificados a tus servidores DNS privados autorizados, como los locales o los de otras nubes.

Para obtener instrucciones detalladas sobre la configuración de DNS, consulta Crea una zona de reenvío.

Crea un recurso de aplicación

Para proporcionar acceso a una aplicación web privada, debes establecer la aplicación dentro del marco de trabajo de la puerta de enlace segura creando un recurso de aplicación. Este recurso define cómo la puerta de enlace segura identifica el tráfico de tu aplicación (según el nombre de host) y a dónde enruta ese tráfico.

  1. Ejecuta el siguiente comando para establecer las variables de entorno requeridas:
       APPLICATION_ID=MY_APPLICATION_ID
       APP_DISPLAY_NAME="MY_APP_DISPLAY_NAME"
       HOST_NAME=MY_HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=MY_PRIVATE_NETWORK_RESOURCE_NAME
       
    Reemplaza lo siguiente:
    • MY_APPLICATION_ID: Es un ID único para el recurso de la aplicación.
    • MY_APP_DISPLAY_NAME: Es el nombre legible que se mostrará.
    • MY_HOST_NAME: Es el nombre de host principal al que acceden los usuarios (por ejemplo, private.local).
    • MY_PRIVATE_NETWORK_RESOURCE_NAME: Es el nombre completo del recurso de la red de VPC (por ejemplo, projects/my-project/global/networks/my-network).
  2. Crea el recurso de la aplicación.

    gcloud

    Ejecuta el siguiente comando para crear el recurso de la aplicación.

    gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \
      --project=${PROJECT_ID} \
      --security-gateway=${SECURITY_GATEWAY_ID} \
      --location=global \
      --display-name="${APP_DISPLAY_NAME}" \
      --endpoint-matchers="hostname=${HOST_NAME}" \
      --upstreams=network=name="${PRIVATE_NETWORK_RESOURCE_NAME}"
            

    Para especificar una región de salida (por ejemplo, cuando se usan rutas estáticas), agrega la marca --egress-regions:

    gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \
      --project=${PROJECT_ID} \
      --security-gateway=${SECURITY_GATEWAY_ID} \
      --location=global \
      --display-name="${APP_DISPLAY_NAME}" \
      --endpoint-matchers="hostname=${HOST_NAME}" \
      --upstreams=network=name="${PRIVATE_NETWORK_RESOURCE_NAME}",egressPolicy=regions=us-central1
            

    Reemplaza us-central1 por la región Google Cloud (como europe-west1 o asia-northeast1) que se alinea con tu configuración de enrutamiento estático regional. Si no tienes requisitos específicos de enrutamiento estático regional, puedes omitir la política de salida de tu configuración.

    REST

    Para crear un recurso de aplicación con la API, completa los siguientes pasos:

    1. Crea un archivo llamado application.json.

      {
      "display_name": "MY_APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "MY_HOST_NAME"}
      ],
      "upstreams": [{
         "network": {
            "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      Para especificar una región de salida (por ejemplo, cuando se usan rutas estáticas), agrega un egress_policy a la configuración upstream:

      {
      "display_name": "MY_APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "MY_HOST_NAME"}
      ],
      "upstreams": [{
         "network": {
            "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      Reemplaza us-central1 por la región Google Cloud (como europe-west1 o asia-northeast1) que se alinea con tu configuración de enrutamiento estático regional. Si no tienes requisitos específicos de enrutamiento estático regional, puedes omitir la política de salida de tu configuración.

    2. Llama al método de la API Create.

      curl \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -X POST \
      -d @application.json \
      "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
                

Cómo configurar el modo de proxy de Google Chrome

Para enrutar el tráfico del recurso de la aplicación a través de la puerta de enlace segura, configura Chrome aplicando un archivo PAC en la configuración de Chrome en la Consola del administrador de Google.

  1. Crea o actualiza un archivo PAC.

    • Si es la primera vez que creas una aplicación, crea un archivo pac_config.js con el siguiente archivo PAC de ejemplo.

    • Si creas una segunda aplicación o una posterior, actualiza tu archivo pac_config.js existente y agrega los dominios de tu nueva aplicación al array de sitios, como se muestra en el siguiente ejemplo de archivo PAC.

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["MY_HOST_NAME"];
    
     for (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }

    Si usas un archivo PAC existente que no es específico para una puerta de enlace segura, combina los archivos PAC agregando los dominios de tu aplicación al array de sitios.

  2. Sube el archivo para que se pueda descargar públicamente. Por ejemplo, puedes subir el archivo a Cloud Storage y hacer que todos los usuarios puedan descargarlo de forma pública otorgándoles el rol de Usuario de objetos de Storage en el bucket.

  3. Para verificar que el archivo subido sea siempre la versión más reciente, puedes ajustar su comportamiento de almacenamiento en caché configurando el encabezado Cache-Control en no-cache. Este parámetro de configuración impide que los navegadores y los servidores intermedios almacenen una copia del archivo, de modo que Chrome siempre descargue la versión más reciente.

    Para obtener más información sobre Cache-Control y cómo afecta al almacenamiento en caché del navegador, consulta Encabezado Cache-Control.

  4. Copia la URL pública del archivo cargado.

Actualiza la configuración del modo de proxy

  1. Ve a la Consola del administrador de Google.
  2. Haz clic en Devices -> Chrome -> Settings.
  3. Selecciona una unidad organizativa o un grupo y, luego, haz clic en Modo de proxy.
  4. En la página Modo de proxy, selecciona Usar siempre la configuración automática de proxy que se especifica a continuación y, luego, ingresa la URL del archivo PAC de Cloud Storage.

Configura una política de acceso

Puedes aplicar una política de acceso a nivel de la puerta de enlace segura o de la aplicación:

  • Recurso de puerta de enlace segura: Aplica una política a nivel de la puerta de enlace segura para controlar el acceso a todas las aplicaciones asociadas.
  • Aplicación individual: Para obtener un control más detallado, puedes aplicar una política de acceso a una aplicación individual.
  1. Crea un archivo en formato JSON llamado setIamPolicy.json y agrega lo siguiente.

    {
     "policy": {
       object (POLICY)
     }
    }

    Reemplaza POLICY por una política de permisos de IAM. El etag de la política debe ser el mismo que el etag de la política activa, que puedes obtener llamando al método getIamPolicy.

  2. Para permitir que un grupo específico use la puerta de enlace segura, otórgale el rol roles/beyondcorp.securityGatewayUser.

    {
     "policy": {
       "version": 3,
       "bindings": [
         {
           "role": "roles/beyondcorp.securityGatewayUser",
           "members": [
                   "group:"
           ]
         }
       ],
       "etag": "AA1jlb"
     }
    }

    Para obtener más identificadores, como serviceAccount, user, group, principal y principalSet, en las vinculaciones de políticas, consulta Principal de IAM.

  3. Aplica la política de acceso en la puerta de enlace segura especificada en el archivo JSON llamando a la API de setIamPolicy.

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:setIamPolicy"

    Para aplicar la política de acceso en una aplicación, usa el siguiente comando:

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -X POST \
    -d @setIamPolicy.json \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_NAME}:setIamPolicy"

También puedes establecer políticas de acceso con niveles de acceso como condición, como se muestra en el siguiente ejemplo.

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
                "group:"
        ],
        "condition": {
                "expression": "'accessPolicies/1234567890/accessLevels/in_us' in request.auth.access_levels",
                "title": "Source IP must be in US"
        }
      }
    ],
    "etag": "A1jlb"
  }
}'

Instala la extensión de Chrome Enterprise Premium

La extensión de Chrome Enterprise Premium es una parte integral de una puerta de enlace segura y ayuda con la autenticación. Instala la extensión para todos los usuarios de la puerta de enlace segura. Para obtener información sobre la implementación de la extensión, consulta Cómo ver y configurar apps y extensiones.

  1. Ve a la Consola del administrador de Google.
  2. Haz clic en Navegador Chrome -> Apps y extensiones.
  3. Haz clic en la pestaña Usuarios y navegadores.
  4. Para agregar una extensión de Chrome, haz clic en el botón +.
  5. Busca ekajlcmdfcigmdbphhifahdfjbkciflj y, luego, fuerza la instalación para todos los usuarios de la unidad organizativa o el grupo.
  6. Haz clic en la extensión instalada y, luego, ve al campo Política de extensiones y proporciona el siguiente valor JSON:

    {
     "securityGateway": {
       "Value": {
         "authentication": {},
         "context": { "resource": "projects/MY_PROJECT_ID/locations/global/securityGateways/MY_SECURITY_GATEWAY_ID" }
       }
     }
    }

Experiencia del usuario final

Cuando se completa la configuración, se otorga o deniega el acceso a los usuarios finales que acceden a la aplicación SaaS protegida según la política de acceso aplicada a la aplicación.

Cómo acceder a la aplicación en Chrome

Se requiere la extensión de Chrome Enterprise Premium para dirigir el tráfico a través de la puerta de enlace segura. La extensión controla la autenticación entre el usuario y la puerta de enlace segura. La extensión se instala automáticamente a través de la política del dominio.

Cuando los usuarios acceden a la aplicación de SaaS que configuraste, su tráfico pasa por la puerta de enlace segura, que verifica si cumplen con la política de acceso. Si los usuarios pasan las verificaciones de la política de acceso, se les otorga acceso a la aplicación.

Cuando la política de autorización rechaza el acceso del navegador a la aplicación, los usuarios reciben un mensaje de Access denied.

¿Qué sigue?