Proteger aplicaciones ajenas a Google Cloud con el conector de aplicaciones

En esta página se describe cómo configurar y usar el conector de aplicaciones de Chrome Enterprise Premium para proteger aplicaciones que no sean deGoogle Cloud .

Información general

Puedes usar el conector de aplicaciones de Chrome Enterprise Premium para proporcionar identidad y acceso contextual a aplicaciones HTTPS que se ejecutan en entornos que no son deGoogle Cloud. El conector de aplicaciones de Chrome Enterprise Premium es una interfaz segura y autenticada entre el plano de implementación de Chrome Enterprise Premium y las aplicaciones que se ejecutan en otras nubes y en entornos locales.

Una de las ventajas de usar el conector de aplicaciones de Chrome Enterprise Premium es que no tienes que abrir firewalls ni configurar conexiones de Cloud VPN de sitio a sitio.

Arquitectura

A continuación, se muestra un diagrama de arquitectura general que representa los componentes principales del conector de aplicaciones de Chrome Enterprise Premium.

Componentes de los conectores de aplicaciones de Chrome Enterprise Premium

Los componentes del conector de aplicaciones de Chrome Enterprise Premium se rigen por tres recursos de API principales: conectores de aplicaciones, conexiones de aplicaciones y pasarelas de aplicaciones.

Conectores de aplicaciones
Un recurso de conector define un agente remoto de conector de aplicaciones único. Los agentes remotos del conector de aplicaciones se implementan en entornos empresariales remotos, como otras nubes y entornos locales. Los agentes remotos inician y mantienen sesiones de túnel a Google Cloud, reciben tráfico deGoogle Cloudy reenvían tráfico a los endpoints de aplicaciones remotas en el mismo entorno.
Conexiones de aplicaciones
Un recurso de conexión define una conexión lógica desdeGoogle Cloud hasta un endpoint de aplicación específico que se identifica mediante la dirección IP y el puerto o el nombre de dominio completo y el puerto. Un recurso de conexión coordina un conjunto de pasarelas de conectores de aplicaciones gestionadas que se asignan a un endpoint de aplicación determinado. Las pasarelas se gestionan enGoogle Cloud y finalizan las sesiones de túnel de los agentes remotos cuando ya no son necesarias.
App Gateways

Una pasarela de aplicaciones es un servicio gestionado que ofrece Google. Los agentes remotos del conector de aplicaciones se conectan a una o varias pasarelas que permiten que los conectores de aplicaciones y las conexiones de aplicaciones reenvíen el tráfico de los usuarios finales a los agentes remotos. El tráfico de las conexiones de aplicaciones alojadas en la misma pasarela de aplicaciones se enruta a través de una infraestructura virtual común.

Cuando conectas una aplicación mediante el conector de aplicaciones, las pasarelas de aplicaciones se crean y gestionan automáticamente. También puedes crear pasarelas de aplicaciones adicionales si quieres organizar los recursos de conexiones de aplicaciones en grupos. Las pasarelas de aplicaciones ofrecen la flexibilidad de agrupar o segregar las conexiones de aplicaciones para permitir el aislamiento de las aplicaciones.

Cada pasarela de aplicaciones puede admitir un rendimiento total de hasta 1 Gbps y hasta 200.000 conexiones simultáneas. Te recomendamos que crees pasarelas específicas para las aplicaciones críticas que requieran un alto rendimiento. Puedes asignar un máximo de 10 aplicaciones por pasarela.

Para admitir hasta 200.000 conexiones simultáneas y un rendimiento total de hasta 1 Gbps, te recomendamos que uses una VM dedicada de 8 núcleos y 8 GB de memoria para ejecutar el agente remoto del conector de aplicaciones. Por ejemplo, puedes dedicar dos agentes remotos de conector de aplicaciones en un clúster de alta disponibilidad con 8 núcleos y 8 GB de memoria cada uno para admitir una aplicación web de alto rendimiento (app1.examplecompany.com) con una pasarela de aplicaciones dedicada (app_gateway1). Crea otro clúster de 2 VMs, cada una con 8 núcleos y 8 GB de memoria, para admitir una combinación de 10 aplicaciones de bajo uso con otra pasarela de aplicaciones dedicada (app_gateway2).

Los recursos de conector de aplicaciones, conexión de aplicaciones y pasarela de aplicaciones son regionales. Solo puedes usarlos en un contexto regional. Por ejemplo, no puedes asignar un conector de aplicación de la región A a una conexión de aplicación o una pasarela de aplicación creadas en la región B.

Antes de empezar

Solo puedes usar el conector de aplicaciones de Chrome Enterprise Premium con aplicaciones HTTPS. Además, los balanceadores de carga HTTPS no usan la extensión de indicador del nombre de servidor (SNI) para las conexiones al backend. Para obtener más información, consulta Cifrado del balanceador de carga a los back-ends.

Para usar el conector de aplicaciones de Chrome Enterprise Premium, debes tener lo siguiente:

Cada agente de conector de aplicaciones de Chrome Enterprise Premium requiere una máquina virtual Linux que ejecute Docker. Recomendamos las siguientes distribuciones de Linux:

  • Debian 10.7 (buster)
  • Red Hat Enterprise Linux Server 7.8 (Maipo) x86_64
  • Ubuntu 16.04 o versiones posteriores

En cuanto al hardware de la VM Linux, recomendamos un mínimo de 2 CPUs con 2 GB de RAM.

Puedes configurar y habilitar el conector de aplicaciones mediante gcloud y la API, o bien mediante la Google Cloud consola. Para usar gcloud y las APIs, sigue estos pasos. Para usar la consola Google Cloud , ve a Configurar el conector de aplicaciones mediante la consola Google Cloud .

Configurar el Google Cloud proyecto

Para configurar un Google Cloud proyecto que se pueda usar con el conector de la aplicación Chrome Enterprise Premium, debes habilitar la API Chrome Enterprise Premium. Para habilitar la API, sigue estos pasos:

CLI de gcloud

Antes de completar los pasos que se indican a continuación, asegúrate de que tienes instalado el SDK de la CLI de gcloud.

  1. Define la variable de entorno necesaria ejecutando el siguiente comando:

    PROJECT_ID=my-project
    

    Sustituye my-project por el Google Cloud ID del proyecto.

  2. Habilita la API ejecutando el siguiente comando:

    gcloud config set project $PROJECT_ID
    gcloud services enable beyondcorp.googleapis.com
    

API

  1. Obtén un token de acceso y define las variables de entorno y los alias necesarios ejecutando los siguientes comandos:

    PROJECT_NUMBER=my-project-number
    ACCESS_TOKEN=my-access-token
    

    Sustituye my-project por el Google Cloud ID del proyecto.

  2. Configura un alias para usar tu token de acceso:

    alias gcurl="curl -H 'Authorization: Bearer ${ACCESS_TOKEN}' -H 'Content-Type: application/json'"
    

  3. Habilita la API ejecutando el siguiente comando:

    gcurl https://serviceusage.googleapis.com/v1/projects/${PROJECT_NUMBER}/services/beyondcorp.googleapis.com:enable -d "{}"
    

Instalar un agente remoto del conector de aplicaciones

Debes implementar una VM de agente remoto de conector de aplicaciones para cada entorno de red que aloje una aplicación que quieras proteger con Chrome Enterprise Premium. Debes tener una máquina virtual dedicada o cualquier servidor Bare Metal con Docker instalado para cada agente remoto que crees.

Para crear un agente remoto, sigue estos pasos:

  1. Crea una instancia de VM en tu entorno de aplicación.
    1. Asegúrate de que el cortafuegos de red de la máquina virtual del agente remoto permita todo el tráfico saliente que se inicie en el puerto 443 para el intervalo de IPs IAP-TCP 35.235.240.0/20. Consulta la sección sobre cómo verificar la configuración del cortafuegos para otros dominios en los que el cortafuegos de la máquina virtual de agente remoto debería permitir que llegue tráfico saliente.
  2. Instala el agente remoto:

    1. Verifica que tu DNS esté configurado correctamente y que puedas acceder a la aplicación mediante curl.
    2. Instala Docker Engine.
      1. Opcional: Si utilizas un proxy, comprueba que el daemon de Docker esté configurado correctamente.
    3. Opcional: Si usas un proxy, comprueba que las variables de entorno de proxy HTTP y HTTPS estén definidas y usen el esquema http://.
    4. Ejecuta el siguiente comando en la VM del agente remoto para instalar el agente remoto:
      curl https://raw.githubusercontent.com/GoogleCloudPlatform/beyondcorp-applink/main/bash-scripts/install-beyondcorp-runtime -o ./install-beyondcorp-runtime && chmod +x ./install-beyondcorp-runtime && ./install-beyondcorp-runtime
      
    5. Para añadir el alias bce-connctl a tu shell, ejecuta el siguiente comando:
       source ~/.bce_alias
       
    6. Define las variables de entorno necesarias ejecutando los siguientes comandos:

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      
      Sustituye lo siguiente:

      • my-project: el ID del proyecto. Google Cloud
      • us-central1: la región en la que se desplegarán la conexión y las pasarelas.
      • my-connector: el nombre del conector.
    7. Registra el conector con uno de los siguientes tipos de credenciales:

    Cuenta de servicio

    1. Registra el conector ejecutando el siguiente comando en la CLI de bce-connctl:

      bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME
      

    2. Sigue las instrucciones que aparecen en pantalla para copiar y pegar la secuencia de comandos de registro en tus proyectos de Google Cloud mediante Cloud Shell o la CLI de gcloud, y termina de registrar tu conector. Para ejecutar la secuencia de comandos de registro, debes tener permisos de Owner en el proyecto.

      Cuando se complete la secuencia de comandos de registro, el tiempo de ejecución sincronizará automáticamente la configuración del conector.

    Identidad federada

    1. Sigue la guía de federación de identidades de carga de trabajo para conceder a tu identidad externa acceso a Google Cloudmediante la suplantación de la cuenta de servicio.
    2. Descarga la configuración de la biblioteca de cliente y coloca el archivo en la VM del agente remoto en /var/beyondcorp/credentials/credentials.json.
      1. Si usas una instancia de AWS EC2 como VM del agente remoto, haz una de las siguientes acciones:
        1. Haz que IMDSv2 sea opcional en la instancia EC2.
        2. Añade la siguiente línea al objeto credential_source en el archivo de configuración de la biblioteca de cliente:
          "imdsv2_session_token_url": "http://169.254.169.254/latest/api/token"
          
    3. En la VM del agente remoto, ejecuta los siguientes comandos en la CLI de bce-connctl:
      bce-connctl config set project $PROJECT_ID
      bce-connctl config set region $REGION
      bce-connctl config set connector $CONNECTOR_NAME
      
    4. Ejecuta el siguiente comando para reiniciar el agente y que recoja las credenciales:
      sudo systemctl restart beyondcorp
      
    5. En tu endpoint de Cloud Shell o de gcloud CLI, define la variable de entorno necesaria ejecutando el siguiente comando:
      SERVICE_ACCOUNT=my-service-account
      
      Sustituye lo siguiente:
      • my-service-account: la Google Cloud cuenta de servicio asociada a la identidad externa.
    6. Asigna el rol BeyondCorp Connection Agent a la cuenta de servicio Google Cloud ejecutando el siguiente comando:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role="roles/beyondcorp.connectionAgent"
      
    7. Ejecuta el siguiente comando para crear el recurso del conector de la aplicación Google Cloud .

      gcloud alpha beyondcorp app connectors create $CONNECTOR_NAME \
          --project=$PROJECT_ID \
          --location=$REGION \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --display-name=$CONNECTOR_NAME
      

      Una vez creado el recurso del conector de aplicaciones, el tiempo de ejecución del agente remoto sincroniza automáticamente la configuración del conector.

  3. Verifica la instalación del agente remoto:

    1. Ejecuta el siguiente comando para asegurarte de que el servicio se está ejecutando:
      sudo systemctl status beyondcorp
      
    2. El agente remoto consta de tres contenedores Docker: bce-control-runtime, bce-logagent y bce-connector. Comprueba que los tres contenedores se estén ejecutando con el siguiente comando:
      docker ps --filter name=bce
      
    3. Opcional: Puedes consultar los archivos de registro de los contenedores Docker ejecutando el siguiente comando:
      docker logs -f CONTAINER_NAME
      
      Sustituye CONTAINER_NAME por el nombre del contenedor Docker.

Conectar una aplicación remota a una VPC

CLI de gcloud

Antes de completar los pasos que se indican a continuación, asegúrate de que tienes instalado el SDK de la CLI de gcloud y de que has iniciado sesión con una cuenta que tenga el rol beyondcorp.admin.

  1. Define las variables de entorno necesarias ejecutando los siguientes comandos:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Haz los cambios siguientes:

    • my-connector: el nombre del conector, definido en un paso anterior.
    • my-connection: un nombre único para la conexión.
    • my-project: el ID del proyecto. Google Cloud
    • us-central1: la región en la que se desplegarán la conexión y las pasarelas.
    • APP_HOST: la dirección IP local o un FQDN que aloja tu aplicación.
    • APP_PORT: número de puerto con el que se va a establecer la conexión con tu aplicación.
  2. Para crear una conexión entre tu aplicación y tu VPC, ejecuta el siguiente comando:

    gcloud alpha beyondcorp app connections create $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --application-endpoint=$APP_ENDPOINT \
        --type=tcp \
        --connectors=$CONNECTOR_NAME \
        --display-name=$CONNECTION_NAME
    

    Ten en cuenta que este paso puede tardar varios minutos en completarse.

  3. Después de crear la conexión, ejecuta los siguientes comandos para obtener los URIs de la pasarela:

    GATEWAY_URI="$(gcloud alpha beyondcorp app connections describe $CONNECTION_NAME --project=$PROJECT_ID --location=$REGION --format='get(gateway.uri)')"
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/bce-ps7}"
    

    El GATEWAY_URI_L7 se usa para crear una regla de reenvío. El conector de aplicaciones de Chrome Enterprise Premium usa Private Service Connect para vincular el proyecto de consumidor a los recursos gestionados en proyectos gestionados por Google.

API

  1. Define las variables de entorno necesarias ejecutando los siguientes comandos:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    PROJECT_ID=my-project
    REGION=us-central1
    APP_HOST=my-app-host
    APP_PORT=my-app-port
    

    Haz los cambios siguientes:

    • my-connector: el nombre del conector, definido en un paso anterior.
    • my-connection: un nombre único para la conexión.
    • my-project: el ID del proyecto. Google Cloud
    • us-central1: la región en la que se desplegarán la conexión y las pasarelas.
    • my-app-host: la dirección IP local o un FQDN que aloje tu aplicación.
    • my-app-port: número de puerto con el que se va a establecer la conexión con tu aplicación.
  2. Para crear una conexión entre tu aplicación y tu VPC, ejecuta el siguiente comando:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
        'application_endpoint': \
        { \
            'host': '${APP_HOST}', \
            'port': '${APP_PORT}' \
        }, \
        'type': 'TCP_PROXY', \
        'display_name': '${CONNECTION_NAME}' \
    }"
    

    Ten en cuenta que este paso puede tardar varios minutos en completarse.

  3. Después de crear la conexión, ejecuta los siguientes comandos para obtener los URIs de la pasarela:

    GATEWAY_URI=$(gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${REGION}/appConnections/${CONNECTION_NAME} | jq -r '.gateway.uri')
    GATEWAY_URI_L7="${GATEWAY_URI/bce-psc/'bce-ps7'}"
    

    El GATEWAY_URI_L7 se usa para crear una regla de reenvío. El conector de aplicaciones de Chrome Enterprise Premium usa Private Service Connect para vincular el proyecto de consumidor a los recursos gestionados en proyectos gestionados por Google.

Configurar un balanceador de carga de aplicación externo

Solo puedes conectar aplicaciones HTTPS a un balanceador de carga de aplicaciones externo. No se admiten aplicaciones HTTP.

CLI de gcloud

Antes de completar los pasos que se indican a continuación, asegúrate de que tienes instalado el SDK de la CLI de gcloud y de que has iniciado sesión con una cuenta que tenga el rol beyondcorp.admin.

  1. Define las variables de entorno necesarias ejecutando los siguientes comandos:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Sustituye lo siguiente:

    • web-app: el prefijo añadido a los nombres de todos los recursos del balanceador de carga.
    • my-project: el ID del proyecto. Google Cloud
    • us-central1: la región en la que se implementarán la conexión y las pasarelas.
    • app.example.com: el nombre de dominio de tu aplicación.
  2. Crea un grupo de endpoints de red (NEG) con el siguiente comando:

    gcloud beta compute network-endpoint-groups create $LB_PREFIX-neg \
        --region=$REGION \
        --network-endpoint-type=private-service-connect \
        --psc-target-service=$GATEWAY_URI_L7
    

    Marcas posibles

    • Define la marca --network para especificar el nombre de la red de los endpoints de red del NEG. Si no se especifica, se usa la red del proyecto predeterminado.
    • Define la marca --subnet para especificar el nombre de la subred de los endpoints de red del NEG. Si no se especifica, el endpoint de red puede pertenecer a cualquier subred de la región en la que se cree el grupo de endpoints de red.
  3. Crea un servicio de backend basado en NEG y conéctalo a una vinculación de servicio de Private Service Connect ejecutando los siguientes comandos:

    gcloud beta compute backend-services create $LB_PREFIX-backend-service \
        --global \
        --protocol=HTTPS \
        --load-balancing-scheme=EXTERNAL_MANAGED
    
    gcloud beta compute backend-services add-backend $LB_PREFIX-backend-service \
        --global \
        --network-endpoint-group=$LB_PREFIX-neg \
        --network-endpoint-group-region=$REGION
    
  4. Crea un certificado gestionado por Google para tu dominio ejecutando los siguientes comandos:

    gcloud compute addresses create $LB_PREFIX-static-ip \
        --ip-version=IPV4 \
        --global
    gcloud compute ssl-certificates create $LB_PREFIX-ssl-cert \
        --domains=$DOMAIN_NAME \
        --global
    
    LB_IP="$(gcloud compute addresses describe $LB_PREFIX-static-ip --global --format='value(address)')"
    
  5. Crea un balanceador de carga de aplicación externo basado en el backend del paso anterior ejecutando los siguientes comandos:

    gcloud compute url-maps create $LB_PREFIX-map-https \
        --default-service=$LB_PREFIX-backend-service
    
    gcloud compute target-https-proxies create $LB_PREFIX-https-lb-proxy \
        --url-map=$LB_PREFIX-map-https \
        --ssl-certificates=$LB_PREFIX-ssl-cert
    
    gcloud beta compute forwarding-rules create "$LB_PREFIX-https-lb-forwarding-rule" \
        --global \
        --target-https-proxy=$LB_PREFIX-https-lb-proxy \
        --address=$LB_IP \
        --ports=443 \
        --load-balancing-scheme=EXTERNAL_MANAGED
    

    Una vez creado el balanceador de carga de aplicación externo, se podrá acceder a tu aplicación a través de Internet mediante esa dirección IP.

  6. Una vez creado el balanceador de carga de aplicaciones externo, debes asociar su dirección IP al nombre de dominio para que Google Cloud pueda aprovisionar un certificado SSL. Sigue las instrucciones de tu proveedor de DNS para asociar la dirección IP con el nombre de DNS. Ejecuta el siguiente comando para comprobar el estado del aprovisionamiento:

    1. Muestra la dirección IP que se debe configurar en el proveedor de DNS:
      echo "Load Balancer ip address - $LB_IP"
      
    2. Después de configurar el DNS, comprueba si el nombre de dominio se resuelve en la dirección IP ejecutando el siguiente comando:
      dig $DOMAIN_NAME
      
    3. Para obtener el estado del aprovisionamiento, ejecuta el siguiente comando:
    gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
    

    Una vez aprovisionado el certificado SSL, deberías poder acceder a tu aplicación mediante el nombre DNS.

API

  1. Define las variables de entorno necesarias ejecutando los siguientes comandos:

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Sustituye lo siguiente:

    • web-app: el prefijo añadido a los nombres de todos los recursos del balanceador de carga.
    • my-project: el ID del proyecto. Google Cloud
    • us-central1: la región en la que se implementarán la conexión y las pasarelas.
    • app.example.com: el nombre de dominio de tu aplicación.
  2. Crea un grupo de endpoints de red (NEG) con el siguiente comando:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups \
    -d "{ \
        'name': '${LB_PREFIX}-neg', \
        'network_endpoint_type': 'private-service-connect', \
        'psc_target_service': '${GATEWAY_URI_L7}' \
    }"
    

    Campos opcionales:

    • Define el campo network para especificar la URL de la red de los endpoints de la red en el NEG. Si no se especifica, se usa la red del proyecto predeterminado.
    • Defina el campo subnetwork para especificar la URL de la subred de los endpoints de red del NEG. Si no se especifica, el endpoint de red puede pertenecer a cualquier subred de la región en la que se cree el grupo de endpoints de red.
  3. Crea un servicio de backend basado en NEG y conéctalo a una vinculación de servicio de Private Service Connect ejecutando los siguientes comandos:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices \
    -d "{ \
        'name': '${LB_PREFIX}-backend-service', \
        'service_protocol': 'HTTPS', \
        'port_name': 'https', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    
    gcurl -X PATCH https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service \
    -d "{ \
        'backends': \
        [{ \
            'group': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/regions/${REGION}/networkEndpointGroups/${LB_PREFIX}-neg' \
        }] \
    }"
    
  4. Crea un certificado gestionado por Google para tu dominio ejecutando los siguientes comandos:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses \
    -d "{ \
        'name': '${LB_PREFIX}-static-ip', \
        'ip_version': 'IPV4' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates \
    -d "{ \
        'name': '${LB_PREFIX}-ssl-cert', \
        'managed': \
        { \
            'domains': '${DOMAIN_NAME}' \
        }, \
        'type': 'MANAGED' \
    }"
    
    LB_IP=$(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/addresses/${LB_PREFIX}-static-ip | jq -r '.address')
    
  5. Crea un balanceador de carga de aplicación externo basado en el backend del paso anterior ejecutando los siguientes comandos:

    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps \
    -d "{ \
        'name': '${LB_PREFIX}-map-https', \
        'default_service': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/backendServices/${LB_PREFIX}-backend-service' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-proxy', \
        'url_map': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/urlMaps/${LB_PREFIX}-map-https', \
        'ssl_certificate': 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert' \
    }"
    
    gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/forwardingRules \
    -d "{ \
        'name': '${LB_PREFIX}-https-lb-forwarding-rule', \
        target: 'https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/targetHttpsProxies/${LB_PREFIX}-https-lb-proxy', \
        'ip_address': '${LB_IP}', \
        'port_range': '443-443', \
        'load_balancing_scheme': 'EXTERNAL_MANAGED' \
    }"
    

    Una vez creado el balanceador de carga de aplicación externo, se podrá acceder a tu aplicación a través de Internet mediante esa dirección IP.

  6. Una vez creado el balanceador de carga de aplicaciones externo, debes asociar su dirección IP al nombre de dominio para que Google Cloud pueda aprovisionar un certificado SSL. Sigue las instrucciones de tu proveedor de DNS para asociar la dirección IP con el nombre de DNS. Ejecuta el siguiente comando para comprobar el estado del aprovisionamiento:

    1. Muestra la dirección IP que se debe configurar en el proveedor de DNS:
      echo "Load Balancer ip address - $LB_IP"
      
    2. Después de configurar el DNS, comprueba si el nombre de dominio se resuelve en la dirección IP ejecutando el siguiente comando:
      dig $DOMAIN_NAME
      
    3. Para obtener el estado del aprovisionamiento, ejecuta el siguiente comando:
    echo $(gcurl https://www.googleapis.com/compute/v1/projects/${PROJECT_NUMBER}/global/sslCertificates/${LB_PREFIX}-ssl-cert \
    | jq -r '.name + " " + .managed.status + " " + (.managed.domainStatus | keys[]) + "=" + .managed.domainStatus[]')
    

    Una vez aprovisionado el certificado SSL, deberías poder acceder a tu aplicación mediante el nombre DNS.

Habilitar Identity-Aware Proxy

Sigue la documentación de Identity-Aware Proxy (IAP) para configurar Identity-Aware Proxy. Después de configurar IAP, habilita IAP para el servicio de backend siguiendo estos pasos:

  1. Ve a la página de IAP:
    IAP

  2. En RECURSOS HTTPS, busca $LB_PREFIX-backend-service. Para habilitar IAP en este recurso, haz clic en el interruptor de la columna IAP. En la ventana Activar IAP que aparece, marca la casilla para confirmar los requisitos de configuración de este recurso y haz clic en ACTIVAR para confirmar que quieres que IAP proteja tu recurso.

  3. Para permitir que los usuarios accedan a tu aplicación, debes asignarles el rol Usuario de aplicación web protegida con IAP en el proyecto. Para ello, sigue estos pasos:

    1. Seleccione la casilla $LB_PREFIX-backend-service.
    2. En el panel de información, selecciona AÑADIR PRINCIPAL y, a continuación, introduce las direcciones de correo de los grupos o las personas que deban tener acceso a tu aplicación.
    3. En la lista desplegable Seleccionar un rol, selecciona Cloud IAP > Usuario de aplicación web protegida por IAP y, a continuación, haz clic en Guardar.

Tu aplicación local ya debería estar publicada en Internet y protegida por Chrome Enterprise Premium.

Configurar el conector de aplicaciones con la Google Cloud consola

Sigue los procedimientos de esta sección para implementar el conector de aplicaciones de Chrome Enterprise Premium mediante la consola de Google Cloud .

Introduce los detalles de tu solicitud

Añade los detalles de tu aplicación siguiendo estos pasos:

  1. En la consola de Google Cloud , ve a la página IAP.
    Ir a IAP

  2. Haz clic en el botón CONECTAR NUEVA APLICACIÓN y, a continuación, selecciona Conectar mediante conector de aplicación.

  3. En Nombre de la aplicación, escribe el nombre de la aplicación que quieras proteger.

  4. En URL de la aplicación para usuarios externos, introduce una URL accesible públicamente para que tus usuarios puedan acceder a tu aplicación.

  5. Haz clic en Siguiente.

Configurar la conexión a Google Cloud

Sigue estos pasos para establecer la conectividad entre Google Cloud y tu entorno que no sea deGoogle Cloud .

  1. Haz clic en el botón CREATE APP CONNECTOR (CREAR CONECTOR DE APLICACIÓN) e introduce la siguiente información:

    • Nombre del conector de aplicaciones: nombre del conector.
    • Región: la región en la que se van a implementar las pasarelas de conexión y el conector.
  2. Haz clic en el botón CREAR.

  3. Sigue las instrucciones del panel Aprovisionar una máquina virtual para implementar el agente remoto en tu VM.

  4. Haz clic en el botón PROBAR ESTADO DE LA CONEXIÓN para probar la conexión.

  5. Configura el conector que has creado en el paso anterior introduciendo la siguiente información en ¿Dónde puede encontrar Google Cloud tu aplicación?:

    • Nombre de host interno: la dirección IP local o el nombre de dominio completo que aloja tu aplicación.
    • Puerto: número de puerto al que conectarse a tu aplicación.

Conceder acceso a tu aplicación (opcional)

  1. En Nuevos principales, introduce uno o varios de los siguientes elementos:

    • Correo electrónico de la cuenta de Google: usuario@gmail.com
    • Grupo de Google: admins@googlegroups.com
    • Cuenta de servicio: servidor@example.gserviceaccount.com
    • Dominio de Google Workspace: example.com
    • Cualquiera: escribe allUsers para que todos los usuarios tengan acceso
    • Todas las cuentas de Google: allAuthenticatedUsers para otorgar acceso a todos los usuarios que hayan iniciado sesión en una cuenta de Google
  2. Selecciona uno o varios niveles de acceso y, a continuación, haz clic en SIGUIENTE.

Publica la aplicación

  1. Para publicar tu aplicación, haz clic en el botón PUBLICAR APLICACIÓN DE FORMA SEGURA.

  2. Después de publicar tu aplicación y recibir la confirmación Aplicación publicada de forma segura, debes crear un registro DNS para dirigir la URL externa de tu aplicación a la dirección IP del proxy. Sigue estos pasos:

    • En la sección PASO 2: Actualizar DNS, copia la dirección IP del campo Dirección IP. Usa la dirección para crear un registro DNS siguiendo las instrucciones de tu proveedor de DNS sobre cómo asociar la dirección IP con el nombre DNS.
  3. Una vez que hayas creado el registro DNS, haz clic en el botón PROBAR para probarlo. Deberías recibir una confirmación de que la prueba de DNS se ha superado.

  4. Haz clic en LISTO.

Habilitar IAP

  1. Ve a la página de IAP.
    Ir a IAP

  2. En la lista de recursos, busca tu aplicación y, a continuación, selecciona el botón de la columna Compras en la aplicación.

  3. En el cuadro de diálogo Activar compras en la aplicación que aparece, marca la casilla He leído los requisitos de configuración y he configurado mi servicio backend tal como se especifica en la documentación y, a continuación, haz clic en ACTIVAR.

Tu aplicación local ya debería estar publicada en Internet y protegida por Chrome Enterprise Premium.

Crear una pasarela de aplicación (opcional)

Las pasarelas de aplicaciones se crean y gestionan implícitamente cuando conectas una aplicación mediante el conector de aplicaciones. También puedes crear tus propias pasarelas de aplicaciones para organizar los recursos de conexión de aplicaciones en grupos. El tráfico de las conexiones de aplicaciones alojadas en diferentes pasarelas de aplicaciones se enruta a través de una infraestructura virtual independiente.

Para crear y especificar una pasarela de aplicación, sigue estos pasos.

CLI de gcloud

  1. Define las variables de entorno necesarias ejecutando el siguiente comando:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Haz los cambios siguientes:

    • CONNECTOR_NAME: el nombre del conector, definido en un paso anterior.
    • CONNECTION_NAME: un nombre único para la conexión.
    • GATEWAY_NAME: el nombre de la pasarela de la aplicación.
    • PROJECT_ID: el ID del proyecto. Google Cloud
    • REGION: la región en la que se va a implementar la pasarela de aplicación, como us-central1.
    • APP_HOST: la dirección IP local o un FQDN que aloja tu aplicación.
    • APP_PORT: número de puerto con el que se va a establecer la conexión con tu aplicación.
  2. Crea una pasarela de aplicación ejecutando el siguiente comando:

    gcloud beta beyondcorp app gateways create $GATEWAY_NAME \
    --project=$PROJECT_ID --location=$REGION --display-name=$GATEWAY_NAME
    
  3. Especifica una pasarela de aplicaciones en una llamada de creación de conexión ejecutando el siguiente comando:

    gcloud beta beyondcorp app connections create $CONNECTION_NAME \
    --project=$PROJECT_ID \
    --location=$REGION \
    --application-endpoint=$APP_ENDPOINT \
    --type=tcp \
    --connectors=$CONNECTOR_NAME \
    --display-name=$CONNECTION_NAME \
    --app-gateway=$GATEWAY_NAME
    

API

  1. Define las variables de entorno necesarias ejecutando el siguiente comando:

    CONNECTOR_NAME=CONNECTOR_NAME
    CONNECTION_NAME=CONNECTION_NAME
    GATEWAY_NAME=GATEWAY_NAME
    PROJECT_ID=PROJECT_ID
    REGION=REGION
    APP_ENDPOINT=APP_HOST:APP_PORT
    

    Haz los cambios siguientes:

    • CONNECTOR_NAME: el nombre del conector, definido en un paso anterior.
    • CONNECTION_NAME: un nombre único para la conexión.
    • GATEWAY_NAME: el nombre de la pasarela de la aplicación.
    • PROJECT_ID: el ID del proyecto. Google Cloud
    • REGION: la región en la que se va a implementar la pasarela de aplicación, como us-central1.
    • APP_HOST: la dirección IP local o un FQDN que aloja tu aplicación.
    • APP_PORT: número de puerto con el que se va a establecer la conexión con tu aplicación.
  2. Crea una pasarela de aplicación ejecutando el siguiente comando:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appGateways?app_gateway_id=${GATEWAY_NAME} \
    -d "{ \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    }"
    
  3. Especifica una pasarela de aplicaciones en una llamada de creación de conexión ejecutando el siguiente comando:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections?app_connection_id=${CONNECTION_NAME} \
    -d "{ \
    'application_endpoint': \
    { \
    'host': '${APP_HOST}', \
    'port': '${APP_PORT}' \
    }, \
    'gateway': { 'app_gateway' : 'projects/${PROJECT_ID}/locations/${REGION}/appGateways/${GATEWAY_NAME}'}, \
    'connectors':['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    'type': 'TCP_PROXY', \
    'display_name': '${CONNECTION_NAME}' \
    

Pasos siguientes

Solución de problemas

No encuentro los recursos que he creado anteriormente

Si usas la versión 392.0.0 o una posterior de la CLI de gcloud, utiliza los nuevos recursos predeterminados del conector de aplicaciones AppConnector y AppConnection. Por ejemplo, gcloud alpha beyondcorp app connectors y gcloud alpha beyondcorp app connections hacen referencia a los nuevos recursos.

Para acceder a los recursos antiguos creados con una versión de gcloud CLI anterior a la 392.0.0, usa la palabra clave legacy. Por ejemplo, gcloud alpha beyondcorp app legacy connectors y gcloud alpha beyondcorp app legacy connections hacen referencia a los recursos antiguos.

Las configuraciones que usen recursos antiguos seguirán funcionando por ahora, pero quedarán obsoletas en el futuro.

  • Sigue los procedimientos que se indican en esta guía para configurar nuevos recursos.
  • Si tu configuración usa recursos antiguos, usa la palabra clave legacy para localizarlos y eliminarlos. Vuelve a crear los recursos siguiendo los procedimientos que se indican en este documento.
  • Si tienes una configuración incompleta que usa recursos antiguos, usa la palabra clave legacy para localizar esos recursos y eliminarlos. Vuelve a crear los recursos siguiendo los procedimientos que se indican en este documento.

Errores de TLS/SSL

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

El navegador muestra el error ERR_SSL_VERSION_OR_CIPHER_MISMATCH u otros errores similares de TLS/SSL y no redirige a la página de inicio de sesión.

  • Verifica el estado de los certificados en la página de detalles del balanceador de carga. Google Cloud

    NOTA: El aprovisionamiento de un certificado gestionado por Google puede tardar hasta 60 minutos.

TLS error

El navegador muestra el error upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: TLS error u otros errores similares de TLS o SSL después de redirigir a la página de inicio de sesión.

  • Verifica que el endpoint de la aplicación que se usa en la conexión sea HTTPS.
  • Verifica que se pueda acceder al endpoint de la aplicación desde la VM del agente remoto mediante curl:

    curl https://$APP_ENDPOINT
    

    Es posible que tengas que usar la marca -k si el certificado de tu aplicación está autofirmado.

Verificar la configuración del cortafuegos

Asegúrate de que los cortafuegos entre el agente remoto e Internet permitan las conexiones salientes a los siguientes dominios:

Tipo de conexión Domain (Dominio) Port (Puerto)
TCP raw.githubusercontent.com 443
TCP gcr.io 443
TCP *.googleapis.com 443
TCP tunnel.cloudproxy.app 443
TCP *.tunnel.cloudproxy.app 443
TCP accounts.google.com 443
TCP oauth2.googleapis.com 443

Cambiar los conectores asociados a una conexión

gcloud

  1. Define las variables de entorno necesarias ejecutando el siguiente comando:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    REGION=us-central1
    PROJECT_ID=my-project
    

    Haz los cambios siguientes:

    • my-connector: el nombre del conector. También puede ser una lista separada por comas, como connector1,connector2.
    • my-connection: el nombre de la conexión que se va a actualizar.
    • us-central1: la región en la que se implementa la conexión.
    • my-project: el ID del proyecto. Google Cloud
  2. Para cambiar los conectores asociados a una conexión, ejecuta el siguiente comando:

    gcloud alpha beyondcorp app connections update $CONNECTION_NAME \
        --project=$PROJECT_ID \
        --location=$REGION \
        --connectors=$CONNECTOR_NAME
    

API

  1. Define las variables de entorno necesarias ejecutando el siguiente comando:

    CONNECTOR_NAME=my-connector
    CONNECTION_NAME=my-connection
    REGION=us-central1
    PROJECT_ID=my-project
    

    Haz los cambios siguientes:

    • my-connector: el nombre del conector.
    • my-connection: el nombre de la conexión que se va a actualizar.
    • us-central1: la región en la que se implementa la conexión.
    • my-project: el ID del proyecto. Google Cloud
  2. Para cambiar los conectores asociados a una conexión, ejecuta el siguiente comando:

    gcurl -X PATCH \
    https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}?update_mask=connectors \
    -d "{ \
        'connectors': ['projects/${PROJECT_ID}/locations/${REGION}/appConnectors/${CONNECTOR_NAME}'], \
    }"
    

    Para verificar la actualización, ejecuta el siguiente comando y comprueba el campo connectors del resultado:

    gcurl https://beyondcorp.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/appConnections/${CONNECTION_NAME}
    

Proxy

La compatibilidad con proxies se introdujo a principios del 2024 y requiere cambios en el archivo systemd de BeyondCorp. Si instalaste el agente remoto antes de esta hora y quieres usar un proxy, vuelve a instalar el agente remoto.

  • Comprueba que el daemon de Docker esté configurado correctamente para funcionar con proxies.

  • Verifique que las variables de entorno de proxy HTTP y HTTPS estén definidas y que ambas usen el esquema http://. No se admiten el esquema https:// ni otros esquemas.

  • Comprueba que las variables de entorno del proxy se exportan a los subprocesos ejecutando el comando env.

  • Solo se admiten HTTP_PROXY, HTTPS_PROXY, NO_PROXY y sus equivalentes en minúsculas.

  • Si necesitas actualizar los ajustes del proxy después de la instalación, actualiza las variables de entorno en /var/beyondcorp/env/PROXY si usas el usuario beyondcorp predeterminado. Si usas un usuario personalizado, actualiza /home/$USER/.docker/config.json siguiendo las instrucciones para configurar el cliente de Docker. Para aplicar los cambios del proxy, reinicia el agente remoto con el siguiente comando:

    sudo systemctl restart beyondcorp
    

Herramientas de diagnóstico

run-post-install-checks

run-post-install-checks es una secuencia de comandos instalada en /var/beyondcorp/scripts/ que verifica si tu agente remoto está instalado, registrado y en buen estado. Después de crear correctamente un app connection y asignarlo a un agente remoto (conector), ve a la VM del agente remoto y ejecuta run-post-install-checks con el siguiente comando:

sudo /var/beyondcorp/scripts/run-post-install-checks

La secuencia de comandos imprime un mensaje de éxito si todo está en orden.

run-diagnostics

run-diagnostics es una secuencia de comandos instalada en /var/beyondcorp/scripts/ que diagnostica problemas habituales en la VM del agente remoto e imprime un informe que puedes compartir con el equipo de Asistencia de Chrome Enterprise Premium. Para ejecutar esta secuencia de comandos de diagnóstico, ejecuta el siguiente comando:

sudo /var/beyondcorp/scripts/run-diagnostics

El informe de diagnóstico se escribe en la consola y en ./diagnostics-report.txt

CLI de agente remoto

bce-connctl es la interfaz de línea de comandos (CLI) del administrador del agente remoto para interactuar con el agente remoto de forma local. Esta CLI admite varios comandos, como los que se usan para registrar el agente remoto, comprobar el estado y definir valores de configuración.

Comando Init

Puedes usar el comando Init para inicializar el agente remoto y generar una secuencia de comandos para registrarlo.

Ejemplo:

bce-connctl init --project=$PROJECT_ID --region=$REGION --connector=$CONNECTOR_NAME

Comandos de estado

Puedes usar los comandos de estado para gestionar el estado del agente remoto.

  • List: usa este comando para consultar el estado general del agente remoto, así como el estado de las conexiones admitidas por este agente. Ejemplo: bce-connctl status list

Comandos de configuración

Puedes usar los comandos de configuración para gestionar los valores de configuración de tu agente remoto.

  • List: usa este comando para enumerar los valores de configuración del agente remoto. Ejemplo: bce-connctl config list
  • Set: usa este comando para definir un valor de configuración del agente remoto. Ejemplo: bce-connctl config set <key> <value>

Comandos de registro

Puedes usar los comandos de registro para gestionar el registro del agente remoto.

  • Describe: usa este comando para obtener el estado de registro del agente remoto. Ejemplo: bce-connctl enrollment describe

    Cuando la secuencia de comandos de registro de bce-connctl init se completa correctamente y la clave pública se sube correctamente, el estado es ENROLLED.

Ayuda

Puedes añadir la marca -h o --help a cualquier comando bce-connctl para imprimir información de uso.

bce-connctl init -h