Sécuriser des applications autres que Google Cloud à l'aide du connecteur d'application

Cette page explique comment configurer et utiliser le connecteur d'application BeyondCorp Enterprise pour sécuriser des applications autres que Google Cloud.

Présentation

Le connecteur d'application BeyondCorp Enterprise vous permet de fournir une identité et un accès contextuel aux applications HTTPS exécutées dans des environnements autres que Google Cloud. Le connecteur d'application BeyondCorp Enterprise est une interface sécurisée et authentifiée entre le plan d'application de BeyondCorp Enterprise et les applications exécutées dans d'autres clouds et environnements sur site.

L'un des avantages du connecteur d'application BeyondCorp Enterprise est que vous n'avez pas besoin d'ouvrir les pare-feu ni de configurer des connexions Cloud VPN de site à site.

Architecture

Vous trouverez ci-dessous un schéma d'architecture général qui décrit les principaux composants du connecteur d'application BeyondCorp Enterprise.

Composants du connecteur d'application BeyondCorp Enterprise

Les composants des connecteurs d'applications BeyondCorp Enterprise sont régis par trois ressources d'API principales : les connecteurs d'application, les connexions d'applications et les passerelles d'application.

Connecteurs d'application
Une ressource de connecteur définit un agent distant de connecteur d'application unique. Les agents distants du connecteur d'application sont déployés dans des environnements d'entreprise distants, par exemple dans d'autres clouds et des environnements sur site. Les agents distants initient et gèrent des sessions de tunnel vers Google Cloud, reçoivent le trafic de Google Cloud et relaient le trafic vers des points de terminaison d'application distants dans le même environnement.
Connexions aux applications
Une ressource de connexion définit une connexion logique entre Google Cloud et un point de terminaison d'application spécifique identifié à l'aide de l'adresse IP adresse:Port ou nom de domaine complet:Port. Une ressource de connexion orchestre un ensemble de passerelles de connecteur d'application gérées qui sont allouées à un point de terminaison d'application donné. Les passerelles sont gérées dans Google Cloud et interrompent les sessions de tunnel des agents distants lorsqu'elles ne sont plus nécessaires.
Passerelles d'applications

Une passerelle d'application est une offre de services gérés par Google. Les agents distants des connecteurs d'application se connectent à une ou plusieurs passerelles qui permettent aux connexions d'applications et aux connecteurs d'application de relayer le trafic des utilisateurs finaux aux agents distants. Le trafic des connexions d'application hébergées sur la même passerelle d'application est acheminé via une infrastructure virtuelle commune.

Lorsque vous connectez une application à l'aide du connecteur d'application, les passerelles d'application sont créées et gérées implicitement pour vous. Vous pouvez également créer des passerelles d'application supplémentaires si vous souhaitez organiser les ressources de connexion d'application en groupes. Les passerelles d'application permettent de regrouper ou de séparer les connexions d'applications pour permettre l'isolation des applications.

Chaque passerelle d'application accepte un débit total allant jusqu'à 1 Gbit/s pour un maximum de 200 000 connexions simultanées. Nous vous recommandons de créer des passerelles dédiées pour les applications critiques nécessitant des performances élevées. Vous pouvez allouer jusqu'à 10 applications par passerelle.

Pour accepter jusqu'à 200 000 connexions simultanées et un débit total allant jusqu'à 1 Gbit/s, nous vous recommandons d'utiliser une VM dédiée de 8 cœurs et de 8 Go de mémoire pour exécuter l'agent distant du connecteur d'application. Par exemple, vous pouvez dédier deux agents distants de connecteur d'application dans un cluster à haute disponibilité doté de huit cœurs et de 8 Go de mémoire, chacun pour prendre en charge une application Web hautes performances (app1.examplecompany.com) dotée d'une passerelle d'application dédiée (app_gateway1). Créez un autre cluster de deux VM, chacune dotée de huit cœurs et de 8 Go de mémoire, pour pouvoir combiner 10 applications à faible utilisation avec une autre passerelle d'application dédiée (app_gateway2).

Les ressources du connecteur d'application, de la connexion d'application et de la passerelle d'application sont régionales. Vous ne pouvez les utiliser que dans un contexte régional. Par exemple, vous ne pouvez pas attribuer un connecteur d'application de la région A à une connexion d'application ou à une passerelle d'application créée dans la région B.

Avant de commencer

Vous ne pouvez utiliser le connecteur d'application BeyondCorp Enterprise qu'avec des applications HTTPS. En outre, les équilibreurs de charge HTTPS n'utilisent pas l'extension SNI (Server Name Indication) pour les connexions au backend. Pour en savoir plus, consultez la section Chiffrement entre l'équilibreur de charge et les backends.

Pour utiliser le connecteur d'application BeyondCorp Enterprise, vous devez disposer des éléments suivants :

Chaque agent de connecteur d'application BeyondCorp Enterprise nécessite une VM Linux qui exécute Docker. Nous vous recommandons les distributions Linux suivantes :

  • Debian 10.7 (buster)
  • Red Hat Enterprise Linux Server 7.8 (Maipo) x86_64
  • Ubuntu 16.04 ou version ultérieure

Pour le matériel de VM Linux, nous vous recommandons d'utiliser au moins deux processeurs avec 2 Go de RAM.

Vous pouvez configurer et activer le connecteur d'application à l'aide de gcloud et de l'API, ou bien à l'aide de la console Google Cloud. Pour utiliser gcloud et les API, procédez comme suit. Pour utiliser la console Google Cloud, consultez Configurer le connecteur d'application à l'aide de la console Google Cloud.

Configuration du projet Google Cloud

Pour configurer un projet Google Cloud à utiliser avec le connecteur d'application BeyondCorp Enterprise, vous devez activer l'API BeyondCorp Enterprise. Activez l'API en procédant comme suit :

gcloud CLI

Avant d'effectuer les étapes suivantes, assurez-vous que le SDK gcloud CLI est installé.

  1. Définissez la variable d'environnement requise en exécutant la commande suivante :

    PROJECT_ID=my-project
    

    Remplacez my-project par l'ID du projet Google Cloud.

  2. Activez l'API en exécutant la commande suivante :

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

API

  1. Obtenez un jeton d'accès et définissez les variables d'environnement et les alias requis en exécutant les commandes suivantes :

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

    Remplacez my-project par l'ID du projet Google Cloud.

  2. Configurez un alias pratique pour utiliser votre jeton d'accès:

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

  3. Activez l'API en exécutant la commande suivante :

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

Installer un agent distant de connecteur d'application

Vous devez déployer une VM d'agent distant de connecteur d'application pour chaque environnement réseau hébergeant une application que vous souhaitez protéger avec BeyondCorp Enterprise. Vous devez disposer d'une VM dédiée ou de n'importe quel serveur Bare Metal sur lequel Docker est installé pour chaque agent distant que vous créez.

Pour créer un agent distant, procédez comme suit :

  1. Créez une instance de VM dans votre environnement d'application.
    1. Assurez-vous que le pare-feu du réseau de la VM de l'agent distant autorise tout le trafic sortant lancé sur le port 443 pour la plage d'adresses IP IAP-TCP 35.235.240.0/20. Consultez Vérifier la configuration du pare-feu pour les autres domaines vers lesquels le pare-feu de la VM de l'agent distant doit autoriser le trafic sortant.
  2. Installez l'agent distant :

    1. Vérifiez que votre DNS est correctement configuré et que vous pouvez accéder à l'application à l'aide de curl.
    2. Installez Docker Engine.
      1. Facultatif: Si vous utilisez un proxy, vérifiez que le daemon Docker est correctement configuré.
    3. Facultatif: Si vous utilisez un proxy, vérifiez que les variables d'environnement proxy HTTP et HTTPS sont définies et utilisent le schéma http://.
    4. Exécutez la commande suivante sur la VM de l'agent distant pour l'installer:
      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. Pour ajouter l'alias bce-connctl à votre shell, exécutez la commande suivante :
       source ~/.bce_alias
       
    6. Définissez les variables d'environnement requises en exécutant les commandes suivantes :

      PROJECT_ID=my-project
      REGION=us-central1
      CONNECTOR_NAME=my-connector
      
      Remplacez les éléments suivants :

      • my-project : ID de projet Google Cloud.
      • us-central1 : région dans laquelle déployer la connexion et les passerelles.
      • my-connector : nom du connecteur.
    7. Enregistrez le connecteur à l'aide de l'un des types d'identifiants suivants:

    Compte de service

    1. Enregistrez le connecteur en exécutant la commande suivante dans la CLI bce-connctl :

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

    2. Suivez les instructions à l'écran pour copier et coller le script d'enregistrement dans vos projets Google Cloud à l'aide de Cloud Shell ou de gcloud CLI, puis terminez l'enregistrement de votre connecteur. Pour exécuter le script d'enregistrement, vous devez disposer des autorisations Owner sur le projet.

      Une fois le script d'enregistrement terminé, l'environnement d'exécution synchronise automatiquement la configuration du connecteur.

    Identité fédérée

    1. Suivez le guide sur la fédération d'identité de charge de travail pour accorder à votre identité externe l'accès à Google Cloud en usurpant l'identité d'un compte de service.
    2. Téléchargez la configuration de la bibliothèque cliente et placez le fichier sur la VM de l'agent distant à l'adresse /var/beyondcorp/credentials/credentials.json.
      1. Si vous utilisez une instance AWS EC2 en tant que VM d'agent distant, effectuez l'une des opérations suivantes :
        1. IMDSv2 est désormais facultatif sur l'instance EC2.
        2. Ajoutez la ligne suivante à l'objet credential_source dans le fichier de configuration de la bibliothèque cliente:
          "imdsv2_session_token_url": "http://169.254.169.254/latest/api/token"
          
    3. Sur la VM de l'agent distant, exécutez les commandes suivantes dans la CLI bce-connctl:
      bce-connctl config set project $PROJECT_ID
      bce-connctl config set region $REGION
      bce-connctl config set connector $CONNECTOR_NAME
      
    4. Exécutez la commande suivante pour redémarrer l'agent et lui demander de récupérer les identifiants:
      sudo systemctl restart beyondcorp
      
    5. Sur votre point de terminaison Cloud Shell ou gcloud CLI, définissez la variable d'environnement requise en exécutant la commande suivante:
      SERVICE_ACCOUNT=my-service-account
      
      Remplacez l'élément suivant :
      • my-service-account: compte de service Google Cloud associé à l'identité externe.
    6. Attribuez le rôle BeyondCorp Connection Agent au compte de service Google Cloud en exécutant la commande suivante:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role="roles/beyondcorp.connectionAgent"
      
    7. Exécutez la commande suivante pour créer la ressource de connecteur d'application Google Cloud.

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

      Une fois la ressource de connecteur d'application créée, l'environnement d'exécution de l'agent distant synchronise automatiquement la configuration du connecteur.

  3. Vérifiez l'installation de l'agent distant :

    1. Exécutez la commande suivante pour vous assurer que le service est en cours d'exécution :
      sudo systemctl status beyondcorp
      
    2. L'agent distant est composé de trois conteneurs Docker: bce-control-runtime, bce-logagent et bce-connector. Vérifiez que les trois conteneurs sont en cours d'exécution en exécutant la commande suivante :
      docker ps --filter name=bce
      
    3. Facultatif: Vous pouvez vérifier les fichiers journaux des conteneurs Docker en exécutant la commande suivante:
      docker logs -f CONTAINER_NAME
      
      Remplacez CONTAINER_NAME par le nom du conteneur Docker.

Connecter une application distante à un VPC

gcloud CLI

Avant de suivre la procédure ci-dessous, assurez-vous que le SDK de la gcloud CLI est installé et que vous êtes connecté avec un compte disposant du rôle beyondcorp.admin.

  1. Définissez les variables d'environnement requises en exécutant les commandes suivantes :

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

    Remplacez les éléments suivants :

    • my-connector : nom du connecteur, défini précédemment.
    • my-connection : nom unique de la connexion.
    • my-project : ID de projet Google Cloud.
    • us-central1 : région dans laquelle déployer la connexion et les passerelles.
    • APP_HOST : adresse IP sur site ou nom de domaine complet qui héberge votre application.
    • APP_PORT : numéro de port à connecter à votre application.
  2. Pour créer une connexion entre votre application et votre VPC, exécutez la commande suivante :

    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
    

    Notez que cette étape peut prendre plusieurs minutes.

  3. Une fois la connexion créée, exécutez les commandes suivantes pour récupérer les URI de la passerelle :

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

    GATEWAY_URI_L7 permet de créer une règle de transfert. Le connecteur d'application BeyondCorp Enterprise utilise Private Service Connect pour associer le projet client aux ressources gérées des projets gérés par Google.

API

  1. Définissez les variables d'environnement requises en exécutant les commandes suivantes :

    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
    

    Remplacez les éléments suivants :

    • my-connector : nom du connecteur, défini précédemment.
    • my-connection : nom unique de la connexion.
    • my-project : ID de projet Google Cloud.
    • us-central1 : région dans laquelle déployer la connexion et les passerelles.
    • my-app-host : adresse IP sur site ou nom de domaine complet qui héberge votre application.
    • my-app-port : numéro de port à connecter à votre application.
  2. Pour créer une connexion entre votre application et votre VPC, exécutez la commande suivante :

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

    Notez que cette étape peut prendre plusieurs minutes.

  3. Une fois la connexion créée, exécutez les commandes suivantes pour récupérer les URI de la passerelle :

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

    GATEWAY_URI_L7 permet de créer une règle de transfert. Le connecteur d'application BeyondCorp Enterprise utilise Private Service Connect pour associer le projet client aux ressources gérées des projets gérés par Google.

Configurer un équilibreur de charge d'application externe

Vous ne pouvez connecter que des applications HTTPS à un équilibreur de charge d'application externe. Les applications HTTP ne sont pas compatibles.

gcloud CLI

Avant de suivre la procédure ci-dessous, assurez-vous que le SDK de la gcloud CLI est installé et que vous êtes connecté avec un compte disposant du rôle beyondcorp.admin.

  1. Définissez les variables d'environnement requises en exécutant les commandes suivantes :

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Remplacez les éléments suivants :

    • web-app : préfixe ajouté aux noms de toutes les ressources de l'équilibreur de charge.
    • my-project : ID de projet Google Cloud.
    • us-central1 : région dans laquelle la connexion et les passerelles seront déployées.
    • app.example.com : nom de domaine de votre application.
  2. Créez un groupe de points de terminaison du réseau (NEG) à l'aide de la commande suivante :

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

    Indicateurs facultatifs :

    • Définissez l'option --network pour spécifier le nom du réseau pour les points de terminaison du réseau dans le NEG. S'il n'est pas spécifié, le réseau de projet par défaut est utilisé.
    • Définissez l'option --subnet pour spécifier le nom du sous-réseau des points de terminaison du réseau dans le NEG. S'il n'est pas spécifié, le point de terminaison du réseau peut appartenir à n'importe quel sous-réseau de la région dans laquelle le groupe de points de terminaison du réseau est créé.
  3. Créez un service de backend basé sur un groupe de points de terminaison du réseau et connectez-le à un rattachement de service Private Service Connect en exécutant les commandes suivantes :

    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. Créez un certificat géré par Google pour votre domaine en exécutant les commandes suivantes :

    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. Créez un équilibreur de charge d'application externe basé sur le backend de l'étape précédente en exécutant les commandes suivantes :

    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
    

    Une fois l'équilibreur de charge d'application externe créé, votre application est accessible sur Internet via cette adresse IP.

  6. Une fois l'équilibreur de charge d'application externe créé, vous devez associer son adresse IP au nom de domaine pour que Google Cloud puisse provisionner un certificat SSL. Suivez les instructions de votre fournisseur DNS pour associer l'adresse IP au nom DNS. Exécutez la commande suivante pour vérifier l'état du provisionnement :

    1. Affichez l'adresse IP à configurer dans le fournisseur DNS :
      echo "Load Balancer ip address - $LB_IP"
      
    2. Après avoir défini le DNS, vérifiez si le nom de domaine est associé à l'adresse IP en exécutant la commande suivante :
      dig $DOMAIN_NAME
      
    3. Obtenez l'état du provisionnement en exécutant la commande suivante :
    gcloud compute ssl-certificates describe $LB_PREFIX-ssl-cert \
        --global \
        --format="get(name,managed.status, managed.domainStatus)"
    

    Une fois le certificat SSL provisionné, vous devriez pouvoir accéder à votre application à l'aide du nom DNS.

API

  1. Définissez les variables d'environnement requises en exécutant les commandes suivantes :

    LB_PREFIX=web-app
    PROJECT_ID=my-project
    REGION=us-central1
    DOMAIN_NAME=app.example.com
    
    Remplacez les éléments suivants :

    • web-app : préfixe ajouté aux noms de toutes les ressources de l'équilibreur de charge.
    • my-project : ID de projet Google Cloud.
    • us-central1 : région dans laquelle la connexion et les passerelles seront déployées.
    • app.example.com : nom de domaine de votre application.
  2. Créez un groupe de points de terminaison du réseau (NEG) à l'aide de la commande suivante :

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

    Champs facultatifs :

    • Définissez le champ network pour spécifier l'URL du réseau pour les points de terminaison du réseau dans le NEG. S'il n'est pas spécifié, le réseau de projet par défaut est utilisé.
    • Définissez le champ subnetwork pour spécifier l'URL du sous-réseau des points de terminaison du réseau dans le NEG. S'il n'est pas spécifié, le point de terminaison du réseau peut appartenir à n'importe quel sous-réseau de la région dans laquelle le groupe de points de terminaison du réseau est créé.
  3. Créez un service de backend basé sur un groupe de points de terminaison du réseau et connectez-le à un rattachement de service Private Service Connect en exécutant les commandes suivantes :

    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. Créez un certificat géré par Google pour votre domaine en exécutant les commandes suivantes :

    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. Créez un équilibreur de charge d'application externe basé sur le backend de l'étape précédente en exécutant les commandes suivantes :

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

    Une fois l'équilibreur de charge d'application externe créé, votre application est accessible sur Internet via cette adresse IP.

  6. Une fois l'équilibreur de charge d'application externe créé, vous devez associer son adresse IP au nom de domaine pour que Google Cloud puisse provisionner un certificat SSL. Suivez les instructions de votre fournisseur DNS pour associer l'adresse IP au nom DNS. Exécutez la commande suivante pour vérifier l'état du provisionnement :

    1. Affichez l'adresse IP à configurer dans le fournisseur DNS :
      echo "Load Balancer ip address - $LB_IP"
      
    2. Après avoir défini le DNS, vérifiez si le nom de domaine est associé à l'adresse IP en exécutant la commande suivante :
      dig $DOMAIN_NAME
      
    3. Obtenez l'état du provisionnement en exécutant la commande suivante :
    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[]')
    

    Une fois le certificat SSL provisionné, vous devriez pouvoir accéder à votre application à l'aide du nom DNS.

Activer Identity-Aware Proxy

Suivez la documentation Identity-Aware Proxy (IAP) pour configurer Identity-Aware Proxy. Après avoir configuré IAP, activez IAP pour le service de backend en procédant comme suit :

  1. Accédez à la page IAP :
    IAP

  2. Sous RESSOURCES HTTPS, recherchez $LB_PREFIX-backend-service. Pour activer IAP pour cette ressource, cliquez sur le bouton d'activation dans la colonne "IAP". Dans la fenêtre Activer le service IAP qui s'affiche, cochez la case pour confirmer la configuration requise pour cette ressource, puis cliquez sur ACTIVER pour confirmer qu'IAP sécurise votre ressource.

  3. Pour autoriser des utilisateurs à accéder à votre application, vous devez leur attribuer le rôle Utilisateur de l'application Web sécurisée par IAP pour le projet en procédant comme suit :

    1. Cochez la case $LB_PREFIX-backend-service.
    2. Dans le panneau d'informations, sélectionnez AJOUTER UN COMPTE PRINCIPAL, puis saisissez les adresses e-mail des groupes ou des personnes qui doivent avoir accès à votre demande d'inscription.
    3. Dans la liste déroulante Sélectionner un rôle, sélectionnez Cloud IAP > Utilisateur de l'application Web sécurisée par IAP, puis cliquez sur Enregistrer.

Votre application sur site devrait maintenant être publiée sur Internet et protégée par BeyondCorp Enterprise.

Configurer le connecteur d'application à l'aide de la console Google Cloud

Suivez les procédures décrites dans cette section pour déployer le connecteur d'application BeyondCorp Enterprise à l'aide de la console Google Cloud.

Saisir les détails de votre demande

Ajoutez les informations concernant votre application en procédant comme suit :

  1. Dans la console Google Cloud, accédez à la page "IAP".
    Accéder à IAP

  2. Cliquez sur le bouton CONNECTER UNE NOUVELLE APPLICATION, puis sélectionnez Se connecter via App Connector.

  3. Dans le champ Nom de l'application, saisissez le nom de l'application que vous souhaitez sécuriser.

  4. Dans le champ URL de l'application externe, saisissez une URL accessible publiquement afin que vos utilisateurs puissent accéder à votre application.

  5. Cliquez sur Suivant.

Configurer la connexion à Google Cloud

Procédez comme suit pour établir la connectivité entre Google Cloud et votre environnement autre que Google Cloud.

  1. Cliquez sur le bouton CRÉER UN CONNECTEUR D'APPLICATION et saisissez les informations suivantes :

    • Nom du connecteur d'application : nom du connecteur.
    • Région : région dans laquelle déployer les passerelles de connexion et le connecteur.
  2. Cliquez sur le bouton CRÉER.

  3. Suivez les instructions du volet Provisionner une machine virtuelle pour déployer l'agent distant sur votre VM.

  4. Cliquez sur le bouton TESTER L'ÉTAT DE LA CONNEXION pour tester la connexion.

  5. Configurez le connecteur que vous avez créé à l'étape précédente en saisissant les informations suivantes dans Où Google Cloud peut-il trouver votre application ? :

    • Nom d'hôte interne : adresse IP sur site ou nom de domaine complet qui héberge votre application.
    • Port : numéro de port à connecter à votre application.

Accorder l'accès à votre application (facultatif)

  1. Dans Nouveaux comptes principaux, saisissez une ou plusieurs des informations suivantes :

    • E-mail du compte Google : utilisateur@gmail.com
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
    • anybody : saisissez allUsers pour autoriser l'accès à tous les utilisateurs
    • tous les comptes Google : allAuthenticatedUsers pour accorder l'accès à tous les utilisateurs connectés à un compte Google
  2. Sélectionnez un ou plusieurs niveaux d'accès, puis cliquez sur SUIVANT.

Publier l'application

  1. Pour publier votre application, cliquez sur le bouton SECURELY PUBLISH APPLICATION (SÉCURISER PUBLIER L'APPLICATION).

  2. Une fois que vous avez publié votre application et que vous avez reçu le message de confirmation Application publiée de manière sécurisée, vous devez créer un enregistrement DNS pour pointer l'URL de votre application externe vers l'adresse IP du proxy. Procédez comme suit :

    • Dans la section ÉTAPE 2 – Mettre à jour le DNS, copiez l'adresse IP figurant dans le champ Adresse IP. Utilisez l'adresse pour créer un enregistrement DNS en suivant les instructions de votre fournisseur DNS pour savoir comment associer l'adresse IP au nom DNS.
  3. Une fois l'enregistrement DNS créé, testez-le en cliquant sur le bouton TEST (Tester). Vous devriez recevoir un test DNS réussi.

  4. Cliquez sur OK.

Activer IAP

  1. Accédez à la page "IAP".
    Accéder à IAP

  2. Dans la liste des ressources, localisez votre application, puis sélectionnez le bouton dans la colonne "IAP".

  3. Dans la boîte de dialogue Activer le service IAP qui s'affiche, cochez la case J'ai lu la configuration requise et j'ai configuré mon service de backend conformément à la documentation, puis cliquez sur ACTIVER.

Votre application sur site devrait maintenant être publiée sur Internet et protégée par BeyondCorp Enterprise.

Créer une passerelle d'application (facultatif)

Les passerelles d'applications sont créées et gérées implicitement lorsque vous connectez une application à l'aide du connecteur d'application. Vous pouvez également créer vos propres passerelles d'application pour organiser les ressources de connexion d'application en groupes. Le trafic des connexions d'applications hébergées sur différentes passerelles d'applications est acheminé via une infrastructure virtuelle distincte.

Pour créer et spécifier une passerelle d'application, procédez comme suit.

gcloud CLI

  1. Définissez les variables d'environnement requises en exécutant la commande suivante :

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

    Remplacez les éléments suivants :

    • CONNECTOR_NAME : nom du connecteur, défini précédemment.
    • CONNECTION_NAME : nom unique de la connexion.
    • GATEWAY_NAME : nom de la passerelle d'application.
    • PROJECT_ID : ID de projet Google Cloud.
    • REGION : région dans laquelle déployer la passerelle d'application, par exemple us-central1.
    • APP_HOST : adresse IP sur site ou nom de domaine complet qui héberge votre application.
    • APP_PORT : numéro de port à connecter à votre application.
  2. Créez une passerelle d'application en exécutant la commande suivante :

    gcloud beta beyondcorp app gateways create $GATEWAY_NAME \
    --project=$PROJECT_ID --location=$REGION --display-name=$GATEWAY_NAME
    
  3. Spécifiez une passerelle d'application dans un appel de création de connexion en exécutant la commande suivante :

    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. Définissez les variables d'environnement requises en exécutant la commande suivante :

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

    Remplacez les éléments suivants :

    • CONNECTOR_NAME : nom du connecteur, défini précédemment.
    • CONNECTION_NAME : nom unique de la connexion.
    • GATEWAY_NAME : nom de la passerelle d'application.
    • PROJECT_ID : ID de projet Google Cloud.
    • REGION : région dans laquelle déployer la passerelle d'application, par exemple us-central1.
    • APP_HOST : adresse IP sur site ou nom de domaine complet qui héberge votre application.
    • APP_PORT : numéro de port à connecter à votre application.
  2. Créez une passerelle d'application en exécutant la commande suivante :

    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. Spécifiez une passerelle d'application dans un appel de création de connexion en exécutant la commande suivante :

    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}' \
    

Étapes suivantes

Dépannage

Impossible de trouver les ressources créées précédemment

Lorsque vous utilisez la gcloud CLI version 392.0.0 ou ultérieure, utilisez les ressources par défaut AppConnector et AppConnection du connecteur d'application. Par exemple, gcloud alpha beyondcorp app connectors et gcloud alpha beyondcorp app connections font tous deux référence aux nouvelles ressources.

Pour accéder aux anciennes ressources créées à l'aide d'une gcloud CLI antérieure à la version 392.0.0, utilisez le mot clé legacy. Par exemple, gcloud alpha beyondcorp app legacy connectors et gcloud alpha beyondcorp app legacy connections font tous deux référence aux anciennes ressources.

Les configurations qui utilisent d'anciennes ressources continuent de fonctionner pour le moment, mais seront abandonnées à l'avenir.

  • Suivez les procédures décrites dans ce guide pour configurer de nouvelles ressources.
  • Si votre configuration utilise d'anciennes ressources, utilisez le mot clé legacy pour localiser ces ressources et les supprimer. Recréez les ressources en suivant les procédures décrites dans ce document.
  • Si vous avez une configuration incomplète qui utilise d'anciennes ressources, utilisez le mot clé legacy pour localiser ces ressources et les supprimer. Recréez les ressources en suivant les procédures décrites dans ce document.

Erreurs TLS/SSL

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Le navigateur affiche l'erreur ERR_SSL_VERSION_OR_CIPHER_MISMATCH ou des erreurs TLS/SSL similaires, et ne vous redirige pas vers la page de connexion.

  • Vérifiez l'état des certificats sur la page d'informations de l'équilibreur de charge Google Cloud.

    REMARQUE : Le provisionnement d'un certificat géré par Google peut prendre jusqu'à 60 minutes.

TLS error

Le navigateur affiche l'erreur upstream connect error or disconnect/reset before headers. retried and the latest reset reason: connection failure, transport failure reason: TLS error ou des erreurs TLS/SSL similaires après la redirection vers la page de connexion.

  • Vérifiez que le point de terminaison de l'application utilisé dans la connexion est HTTPS.
  • Vérifiez que le point de terminaison de l'application est accessible à partir de la VM de l'agent distant à l'aide de curl:

    curl https://$APP_ENDPOINT
    

    Vous devrez peut-être utiliser l'option -k si le certificat de votre application est autosigné.

Vérifier la configuration du pare-feu

Assurez-vous que les pare-feu entre l'agent distant et Internet autorisent les connexions sortantes vers les domaines suivants :

Type de connexion Domaine Port
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

Modifier les connecteurs associés à une connexion

gcloud

  1. Définissez les variables d'environnement requises en exécutant la commande suivante :

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

    Remplacez les éléments suivants :

    • my-connector : nom du connecteur. Il peut également s'agir d'une liste d'éléments séparés par une virgule, comme connector1,connector2.
    • my-connection : nom de la connexion à mettre à jour.
    • us-central1 : région dans laquelle la connexion est déployée.
    • my-project : ID de projet Google Cloud.
  2. Pour modifier les connecteurs associés à une connexion, exécutez la commande suivante :

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

API

  1. Définissez les variables d'environnement requises en exécutant la commande suivante :

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

    Remplacez les éléments suivants :

    • my-connector : nom du connecteur.
    • my-connection : nom de la connexion à mettre à jour.
    • us-central1 : région dans laquelle la connexion est déployée.
    • my-project : ID de projet Google Cloud.
  2. Pour modifier les connecteurs associés à une connexion, exécutez la commande suivante :

    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}'], \
    }"
    

    Vous pouvez vérifier la mise à jour en exécutant la commande suivante et en consultant le champ connectors du résultat :

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

Proxy

La compatibilité avec les proxys a été introduite début 2024 et nécessite de modifier le fichier systemd BeyondCorp. Si vous avez installé l'agent distant plus tôt et que vous souhaitez utiliser un proxy, réinstallez l'agent distant.

  • Vérifiez que le daemon Docker est configuré correctement pour fonctionner avec les proxys.

  • Vérifiez que les variables d'environnement proxy HTTP et HTTPS sont définies, et qu'elles utilisent toutes les deux le schéma http://. Le schéma https:// et les autres schémas ne sont pas acceptés.

  • Vérifiez que les variables d'environnement proxy sont exportées vers des sous-processus en exécutant la commande env.

  • Seuls HTTP_PROXY, HTTPS_PROXY, NO_PROXY et leurs équivalents en minuscules sont acceptés.

  • Si vous devez mettre à jour les paramètres de proxy après l'installation, mettez à jour les variables d'environnement dans /var/beyondcorp/env/PROXY si vous utilisez l'utilisateur beyondcorp par défaut. Si vous utilisez un utilisateur personnalisé, mettez à jour /home/$USER/.docker/config.json en suivant les instructions de configuration du client Docker. Pour appliquer les modifications du proxy, redémarrez l'agent distant à l'aide de la commande suivante:

    sudo systemctl restart beyondcorp
    

Outils de diagnostic

run-post-install-checks

run-post-install-checks est un script installé dans /var/beyondcorp/scripts/ qui vérifie si votre agent distant est correctement installé, enregistré et opérationnel. Après avoir créé un app connection et l'avoir attribué à un agent distant (connecteur), accédez à la VM de l'agent distant et exécutez run-post-install-checks à l'aide de la commande suivante :

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

Si tout est en ordre, le script affiche un message de confirmation.

run-diagnostics

run-diagnostics est un script installé dans /var/beyondcorp/scripts/ qui diagnostique les problèmes courants sur la VM de l'agent distant et affiche un rapport que vous pouvez partager avec l'équipe d'assistance BeyondCorp Enterprise. Pour exécuter ce script de diagnostic, exécutez la commande suivante :

sudo /var/beyondcorp/scripts/run-diagnostics

Le rapport de diagnostic est écrit dans la console ainsi que dans ./diagnostics-report.txt.

CLI de l'agent distant

bce-connctl est l'interface de ligne de commande (CLI) d'administration de l'agent distant permettant d'interagir localement avec l'agent distant. Cette CLI accepte diverses commandes, par exemple pour enregistrer l'agent distant, vérifier l'état et définir des valeurs de configuration.

Commande d'initialisation

Vous pouvez utiliser la commande Init pour initialiser l'agent distant et générer un script pour l'enregistrer.

Exemple :

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

Commandes d'état

Vous pouvez gérer l'état de l'agent distant à l'aide des commandes Status.

  • List : utilisez cette commande pour lister l'état général de l'agent distant, ainsi que l'état de toutes les connexions compatibles avec cet agent. Exemple : bce-connctl status list

Commandes de configuration

Vous pouvez utiliser les commandes Config pour gérer les valeurs de configuration de votre agent distant.

  • List : utilisez cette commande pour obtenir la liste des valeurs de configuration de l'agent distant. Exemple : bce-connctl config list
  • Set : utilisez cette commande pour définir une valeur de configuration de l'agent distant. Exemple : bce-connctl config set <key> <value>

Commandes d'enregistrement

Vous pouvez gérer l'enregistrement de l'agent distant à l'aide des commandes d'enregistrement.

  • Description : permet d'obtenir l'état d'enregistrement de l'agent distant. Exemple : bce-connctl enrollment describe

    Lorsque le script d'enregistrement de bce-connctl init est terminé et que la clé publique a bien été importée, l'état est ENROLLED.

Aide

Vous pouvez ajouter l'option -h ou --help à n'importe quelle commande bce-connctl pour afficher des informations d'utilisation.

bce-connctl init -h