Acceso seguro a aplicaciones de SaaS

En esta página se explica cómo proteger tus aplicaciones SaaS a través de la pasarela segura de Chrome Enterprise Premium.

Una pasarela segura de Chrome Enterprise Premium funciona como un proxy directo, aplica un framework de acceso de confianza cero y ofrece un control granular y contextual sobre quién accede a tus aplicaciones SaaS.

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

A continuación, se ofrece un resumen general de cómo protege una pasarela segura tus aplicaciones SaaS:

  1. La configuración del navegador del lado del cliente dirige el tráfico de la aplicación a través de un proxy de pasarela seguro.
  2. La pasarela segura comprueba las políticas de acceso contextual para autorizar el acceso de los clientes (usuarios y dispositivos).
  3. Si se permite, la pasarela reenvía el tráfico a la aplicación mediante direcciones IP de origen únicas asignadas a esa pasarela y a esa Google Cloud región. Para controlar el acceso, puedes añadir estas direcciones IP de origen dedicadas a una lista de permitidas en tu aplicación SaaS.

Antes de empezar

Antes de configurar la pasarela segura, comprueba que tienes lo siguiente:

Limitaciones

Una pasarela segura de Chrome Enterprise Premium tiene la siguiente limitación: una pasarela segura no admite aplicaciones SaaS que solo permitan la conectividad IPv6.

Configurar el entorno de shell

Para simplificar el proceso de configuración e interactuar con las APIs de pasarela 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

    Haz los cambios siguientes:

    • MY_PROJECT_ID: ID del proyecto en el que se crea la pasarela segura.
    • MY_APPLICATION_ID: 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: el nombre legible por humanos que se va a mostrar.
    • MY_HOST_NAME: el nombre de host de tu aplicación. Por ejemplo, github.com. El nombre de host puede tener hasta 253 caracteres y debe cumplir 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 pasarela segura

    SECURITY_GATEWAY_ID=MY_SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="MY_SECURITY_GATEWAY_DISPLAY_NAME"

    Haz los cambios siguientes:

    • MY_SECURITY_GATEWAY_ID: ID de la pasarela segura. El ID 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_SECURITY_GATEWAY_DISPLAY_NAME: nombre legible por humanos de la pasarela segura. El nombre puede tener hasta 63 caracteres y solo puede contener caracteres imprimibles.

Crear una pasarela segura

Una pasarela 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 pasarela segura, utilice uno de los siguientes métodos.

gcloud

Ejecuta el siguiente comando: En el caso de la marca --hubs, especifique una o varias 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 Create con los detalles de la pasarela en el cuerpo de la solicitud. En el objeto hubs, especifica una o varias 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}"
      

hubs representa los recursos regionales necesarios para habilitar la conectividad de salida a la aplicación de destino. Puedes tener un centro por región y cada centro proporciona dos direcciones IP. Puede 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

Configurar una aplicación SaaS

Después de crear una pasarela segura, puedes configurar tus aplicaciones SaaS para que la usen y así acceder de forma segura.

  1. Obtén las direcciones IP asignadas por la pasarela segura a cada centro. Se asignan dos direcciones IP a 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 respuesta GET de una pasarela segura con hubs. En el ejemplo, se crean hubs en las regiones us-central1 y us-east1, y todas las direcciones IP devueltas 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. Añade las direcciones IP a la lista de permitidos de tu aplicación SaaS. Por ejemplo, en el caso de una aplicación de GitHub, puedes seguir esta guía: Gestionar las direcciones IP permitidas de tu organización.

Crear un recurso de aplicación

La siguiente información te guía por el proceso de configuración de un recurso de aplicación de pasarela segura.

Crea un recurso de aplicación de pasarela segura en Google Cloud

El recurso de aplicación es un subrecurso del recurso de pasarela segura. Google Cloud Crea un recurso de aplicación llamando a la API Create.

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

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}\"}] }" \
"https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications?application_id=${APPLICATION_ID}"
      

Configurar el modo proxy de Google Chrome

Para enrutar el tráfico del recurso de la aplicación a través de la pasarela segura, configura Chrome aplicando un archivo PAC en los ajustes de Chrome de la consola de administración de Google.

  1. Crea o actualiza un archivo PAC.

    • Si vas a crear tu primera aplicación, crea un archivo pac_config.js con el siguiente archivo PAC de ejemplo.

    • Si va a crear una segunda aplicación o una posterior, actualice su archivo pac_config.js y añada los dominios de su nueva aplicación a la matriz de sitios, tal 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 que no es específico de una pasarela segura, combina los archivos PAC añadiendo los dominios de tu aplicación a la matriz 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 concediendo a todos los usuarios el rol Usuario de objeto de Storage en el segmento.

  3. Para verificar que el archivo subido sea siempre la versión más reciente, puede ajustar su comportamiento de almacenamiento en caché configurando el encabezado Cache-Control en no-cache. Esta opció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 el artículo Encabezado Cache-Control.

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

Actualizar la configuración del modo proxy

  1. Ve a la consola de administración de Google.
  2. Haz clic en Dispositivos > Chrome > Configuración.
  3. Selecciona una unidad organizativa o un grupo y, a continuación, haz clic en Modo proxy.
  4. En la página Modo proxy, seleccione Utilizar siempre el proxy de configuración automática especificado a continuación e introduzca la URL del archivo PAC de Cloud Storage.

Configurar una política de acceso

Puedes aplicar una política de acceso para controlar el acceso a nivel de la pasarela segura, lo que afecta a todas las aplicaciones asociadas, o a nivel de aplicación individual para tener un control más detallado.

Actualizar una política de acceso de forma segura

El comando setIamPolicy sustituye toda la política actual por la que proporciones. Para evitar que se eliminen permisos por error, te recomendamos que sigas un patrón de lectura, modificación y escritura. De esta forma, te aseguras de que solo añades contenido a la política actual y no la sobrescribes.

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

  2. Modificar: edita el archivo de política de forma local para añadir o cambiar permisos.

  3. Escritura: aplica el archivo de política actualizado.

Obtener la política actual

Recupera la política actual antes de hacer cambios.

El campo etag de la política actúa como identificador de versión. Evita que se produzcan conflictos si varios administradores hacen cambios simultáneamente.

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

  • Obtén la política de una pasarela segura:

    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}:getIamPolicy" > policy.json
  • Obtener la política de una aplicación concreta:

    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 crea un archivo policy.json que contiene la política actual.

Modificar el archivo de políticas

Abre el archivo policy.json en un editor de texto. Para conceder acceso a un grupo para usar la pasarela segura, añade el grupo a la lista members del rol roles/beyondcorp.securityGatewayUser.

Tu 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 añadir un grupo, añade una entrada nueva a la matriz members. Incluye una coma después de la entrada anterior.

En el siguiente ejemplo se añade 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 añadir 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.

Aplicar 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 asegurarse de que actualizas la versión correcta.

  • Aplica la política a una pasarela segura:

    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}:setIamPolicy"
  • Aplica la política a una aplicación concreta:

    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"

Añadir una política de acceso condicional

También puedes definir políticas de acceso con condiciones. Las condiciones especifican los requisitos, como que la dirección IP de un usuario proceda de una ubicación concreta.

En el siguiente ejemplo se muestra una política que concede acceso solo si la dirección IP de origen está 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 han descrito anteriormente.

Instalar la extensión Chrome Enterprise Premium

La extensión Chrome Enterprise Premium es una parte integral de una pasarela segura y ayuda con la autenticación. Instala la extensión para todos los usuarios de la pasarela segura. Para obtener información sobre cómo implementar la extensión, consulta el artículo Ver y configurar aplicaciones y extensiones.

  1. Ve a la consola de administración de Google.
  2. Haz clic en Navegador Chrome > Aplicaciones y extensiones.
  3. Haz clic en la pestaña Usuarios y navegadores.
  4. Para añadir una extensión de Chrome, haz clic en el botón +.
  5. Busca ekajlcmdfcigmdbphhifahdfjbkciflj y, a continuación, fuerza la instalación en todos los usuarios de la unidad organizativa o el grupo.
  6. Haz clic en la extensión instalada y, a continuación, 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 de usuario final

Una vez completada la configuración, se concederá o denegará el acceso a la aplicación SaaS protegida a los usuarios finales en función de la política de acceso aplicada a la aplicación.

Acceder a la aplicación en Chrome

La extensión Chrome Enterprise Premium es necesaria para dirigir el tráfico a través de la pasarela segura. La extensión gestiona la autenticación entre el usuario y la pasarela segura. La extensión se instala automáticamente a través de la política de dominio.

Cuando los usuarios acceden a la aplicación SaaS que has configurado, su tráfico pasa por la pasarela segura, que comprueba si cumplen la política de acceso. Si los usuarios superan las comprobaciones de la política de acceso, se les concede acceso a la aplicación.

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

Siguientes pasos