Acceso seguro a las aplicaciones de SaaS

En esta página, se te guía a través del proceso para proteger tus aplicaciones SaaS a través de la puerta de enlace segura de Chrome Enterprise Premium.

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

Cómo funciona la protección del acceso a las aplicaciones de SaaS

A continuación, se incluye una descripción general de alto nivel sobre cómo una puerta de enlace segura protege tus aplicaciones SaaS:

  1. La configuración del navegador del cliente enruta el tráfico de la aplicación a través de un proxy de puerta de enlace seguro.
  2. La puerta de enlace segura verifica las políticas de acceso adaptado al contexto para autorizar el acceso del cliente (usuario y dispositivo).
  3. Si se permite el acceso del cliente, la puerta de enlace reenvía el tráfico a la aplicación con direcciones IP de origen únicas asignadas a esa puerta de enlace y a esa Google Cloud región. Estas direcciones IP asignadas se reservan exclusivamente para la puerta de enlace que creas y no pueden ser utilizadas por otros usuarios o puertas de enlace. Para controlar el acceso, puedes agregar estas direcciones IP de origen dedicadas a una lista de entidades permitidas en tu aplicación de SaaS.

Antes de comenzar

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

Limitaciones

Una puerta de enlace segura de Chrome Enterprise Premium tiene la siguiente limitación: Una puerta de enlace segura no admite aplicaciones SaaS que solo permiten la conectividad IPv6.

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
    APPLICATION_ID=MY_APPLICATION_ID
    APPLICATION_DISPLAY_NAME="MY_APPLICATION_DISPLAY_NAME"
    HOST_NAME=MY_HOST_NAME

    Reemplaza lo siguiente:

    • MY_PROJECT_ID: Es el ID del proyecto en el que se crea la puerta de enlace segura.
    • MY_APPLICATION_ID: Es el ID de tu aplicación, como github. El nombre puede tener hasta 63 caracteres y puede contener letras minúsculas, números y guiones. El primer carácter debe ser una letra y el último puede ser una letra o un número.
    • MY_APPLICATION_DISPLAY_NAME: Es el nombre legible que se mostrará.
    • MY_HOST_NAME: Es el nombre de host de tu aplicación. Por ejemplo, github.com. El nombre de host puede tener hasta 253 caracteres y debe cumplir con uno de los siguientes formatos:

      • Una dirección IPv4 válida
      • Una dirección IPv6 válida
      • Un nombre de DNS válido
      • Un asterisco (*)
      • Un asterisco (*) seguido de un nombre de DNS válido
  • 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. 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 solo puede contener 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.

Para crear un recurso de puerta de enlace segura, usa uno de los siguientes métodos.

gcloud

Ejecuta el siguiente comando. Para la marca --hubs, especifica una o más regiones de la siguiente lista.

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

REST

Llama al método de la API de Create con los detalles de la puerta de enlace en el cuerpo de la solicitud. Para el objeto hubs, especifica una o más regiones de la siguiente lista.

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

El objeto hubs representa los recursos regionales necesarios para habilitar la conectividad de salida a la aplicación de destino. Puedes tener un concentrador para cada región, y cada concentrador proporciona dos direcciones IP. Puedes especificar las siguientes regiones:

  • 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

Configura una aplicación de SaaS

Después de crear una puerta de enlace segura, puedes configurar tus aplicaciones de SaaS para que la usen y accedan de forma segura.

  1. Obtén las direcciones IP que asigna la puerta de enlace segura para cada centro. Se asignan dos direcciones IP para una región.

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

    A continuación, se muestra un ejemplo de una respuesta GET de una puerta de enlace segura con hubs. En el ejemplo, se crean hubs en las regiones us-central1 y us-east1, y todas las direcciones IP que se devuelven en la respuesta deben permitirse en la aplicación SaaS.

    gcloud

    createTime: 'CREATE_TIME'
    displayName: My security gateway
    hubs:
      us-central1:
        internetGateway:
          assignedIps:
          - IP_ADDRESS_1
          - IP_ADDRESS_2
      us-east1:
        internetGateway:
          assignedIps:
          - IP_ADDRESS_1
          - IP_ADDRESS_2
    name: projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}
    state: RUNNING
    updateTime: 'UPDATE_TIME'
        

    REST

    {
      "securityGateways": [
        {
          "name": "projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}",
          "createTime": "CREATE_TIME",
          "updateTime": "UPDATE_TIME",
          "displayName": "My security gateway",
          "state": "RUNNING",
          "hubs": {
            "us-central1": {
              "internetGateway": {
                "assignedIps": [
                  "IP_ADDRESS_1",
                  "IP_ADDRESS_2",
                ]
              }
            },
            "us-east1": {
              "internetGateway": {
                "assignedIps": [
                  "IP_ADDRESS_1",
                  "IP_ADDRESS_2",
                ]
              }
            }
          }
        }
      ]
    }
        
  2. Agrega las direcciones IP a la lista de IP permitidas de tu aplicación SaaS. Por ejemplo, para una aplicación de GitHub, puedes seguir esta guía: Administra las direcciones IP permitidas para tu organización.

Crea un recurso de aplicación

La siguiente información te guía a través del proceso de configuración de un recurso de aplicación de puerta de enlace segura.

Crea un recurso de aplicación de puerta de enlace segura en Google Cloud

El recurso de aplicación Google Cloud es un subrecurso del recurso de puerta de enlace segura. Llama a la API de Create para crear un recurso de aplicación.

gcloud

gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \
  --project=${PROJECT_ID} \
  --security-gateway=${SECURITY_GATEWAY_ID} \
  --location=global \
  --display-name="${APPLICATION_DISPLAY_NAME}" \
  --endpoint-matchers="hostname=${HOST_NAME},ports=[443]"
      

REST

curl \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-X POST \
-d "{ \"display_name\": \"${APPLICATION_DISPLAY_NAME}\", \"endpoint_matchers\": [{hostname: \"${HOST_NAME}\", ports: [443]}] }" \
"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 se pueda descargar públicamente otorgando a todos los usuarios el rol de Storage Object User 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 subido.

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 para controlar el acceso a nivel de la puerta de enlace segura, lo que afecta a todas las aplicaciones asociadas, o a nivel de la aplicación individual para obtener un control más detallado.

Actualiza una política de acceso de forma segura

El comando setIamPolicy reemplaza toda la política existente por la que proporcionas. Para evitar quitar permisos existentes por accidente, te recomendamos que sigas un patrón de "lectura-modificación-escritura". Esto garantiza que solo agregues información a la política existente, no que la sobrescribas.

  1. Lectura: Primero, obtén la política de acceso actual.

  2. Modificar: Edita el archivo de política de forma local para agregar o cambiar permisos.

  3. Write: Aplica tu archivo de política actualizado.

Obtén la política actual

Recupera la política actual antes de realizar cualquier cambio.

El campo etag de la política actúa como identificador de versión. Evita actualizaciones conflictivas si varios administradores realizan cambios de forma simultánea.

El siguiente comando recupera la política y la guarda en un archivo llamado policy.json.

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}/applications/${APPLICATION_ID}:getIamPolicy" > policy.json

Después de ejecutar el comando, se creará un archivo policy.json que contiene la política actual.

Modifica el archivo de políticas

Abre el archivo policy.json en un editor de texto. Para otorgar acceso a un grupo para usar la puerta de enlace segura, agrega el grupo a la lista members para el rol roles/beyondcorp.securityGatewayUser.

Tu archivo policy.json debería ser similar al siguiente ejemplo:

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
          "group:existing-group@example.com"
        ]
      }
    ],
    "etag": "BwXN8_d-bOM="
  }
}

Para agregar un grupo nuevo, agrega una entrada nueva al array members. Incluye una coma después de la entrada anterior.

En el siguiente ejemplo, se agrega new-group@example.com:

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
          "group:existing-group@example.com",
          "group:new-group@example.com"
        ]
      }
    ],
    "etag": "BwXN8_d-bOM="
  }
}

También puedes agregar otros tipos de miembros, como serviceAccount, user, group, principal y principalSet, en las vinculaciones de políticas. Consulta Principales de IAM para obtener más información.

Aplica la política actualizada

Después de editar y guardar el archivo policy.json, aplícalo al recurso con el comando setIamPolicy. Este comando usa el etag de tu archivo para garantizar que actualices la versión correcta.

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

Agrega una política de acceso condicional

También puedes establecer políticas de acceso con condiciones. Las condiciones especifican requisitos, como que la dirección IP de un usuario se origine en una ubicación específica.

En el siguiente ejemplo, se muestra una política que otorga acceso solo si la dirección IP de origen se encuentra dentro de un nivel de acceso especificado:

{
  "policy": {
    "version": 3,
    "bindings": [
      {
        "role": "roles/beyondcorp.securityGatewayUser",
        "members": [
          "group:group@example.com"
        ],
        "condition": {
          "expression": "request.auth.access_levels.contains('accessPolicies/1234567890/accessLevels/in_us')",
          "title": "Source IP must be in US"
        }
      }
    ],
    "etag": "BwXN8_d-bOM="
  }
}

Para aplicar esta política, sigue los pasos que se describieron anteriormente.

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?