Sécuriser des applications client-serveur

Ce document présente en détail le connecteur client BeyondCorp Enterprise et explique comment l'activer.

Présentation

BeyondCorp Enterprise est la solution zéro confiance de Google qui fournit un accès sécurisé aux applications privées avec protection des données et contre les menaces intégrées. BeyondCorp Enterprise assure la sécurité de l'ensemble des applications Web (HTTPS) à l'aide de Chrome.

Le connecteur client BeyondCorp Enterprise étend la compatibilité aux applications non Web en créant une connexion sécurisée aux applications s'exécutant dans des environnements Google Cloud et non-Google Cloud, et en bénéficiant d'un accès contextuel complet et d'un accès contextuel.

Fonctionnement

Voici les principaux composants du connecteur client:

  • Validation des points de terminaison et agent client : le connecteur client est intégré à Endpoint Verification, qui est une extension Chrome avec un agent léger natif qui s'exécute sur les ordinateurs portables ou les ordinateurs de bureau des utilisateurs, et qui fournit des informations sur les appareils. La validation des points de terminaison sert également de plan de contrôle permettant à l'utilisateur final de démarrer et d'arrêter les connexions aux passerelles clientes.

  • Passerelles clientes : composants régionaux côté serveur, auxquels les clients peuvent se connecter. Les passerelles clientes sont déployées par les administrateurs. Les passerelles communiquent avec le système d'application forcée de BeyondCorp Enterprise pour appliquer des contrôles contextuels. Le système d'application de BeyondCorp Enterprise utilise Identity-Aware Proxy et Access Context Manager, un moteur de règles flexible de confiance BeyondCorp Enterprise.

Le trafic à destination des applications protégées depuis les appareils des utilisateurs finaux (client) est envoyé via un canal sécurisé via la passerelle. Vous pouvez vous connecter à des applications Web et non Web exécutées dans Google Cloud ou en dehors de Google Cloud. Vous pouvez utiliser Cloud VPN ou Cloud Interconnect pour vous connecter à vos applications qui ne sont pas dans Google Cloud.

Avant de commencer

Avant de commencer à activer le connecteur client BeyondCorp Enterprise, assurez-vous de disposer des éléments suivants:

Activer le connecteur client BeyondCorp Enterprise

Configurer l'accès aux services privés

Le connecteur de client utilise l'accès au service privé pour activer la connectivité entre le réseau VPC géré par Google et le réseau VPC consommateur. Cela garantit que le trafic des utilisateurs est acheminé vers le réseau VPC du client.

  1. L'accès au service privé nécessite la réservation d'une plage d'adresses IP de sorte qu'il n'y ait aucun conflit d'adresses IP entre votre réseau VPC et le réseau VPC géré par Google. Exécutez la commande suivante pour allouer une plage d'adresses IP:

    gcloud compute addresses create RESERVED_RANGE \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --prefix-length=16 \
      --purpose=VPC_PEERING \
      --global
    

    Remplacez les éléments suivants :

    • RESERVED_RANGE: nom de la plage d'adresses IP à réserver pour l'appairage de VPC. Le nom ne peut contenir que des lettres minuscules, des chiffres et des traits d'union.
    • CONSUMER_NETWORK : nom du réseau VPC connecté à l'application.
    • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.
  2. Créez la connexion d'appairage du VPC en exécutant la commande suivante:

    gcloud services vpc-peerings connect \
     --network=CONSUMER_NETWORK \
     --project=CONSUMER_PROJECT \
     --ranges=RESERVED_RANGE \
     --service="servicenetworking.googleapis.com"
    

    Remplacez les éléments suivants :

    • CONSUMER_NETWORK: nom du réseau VPC connecté à l'application.
    • CONSUMER_PROJECT: ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • RESERVED_RANGE : nom de la plage réservée pour l'appairage de VPC.
  3. Obtenez les détails de la plage d'adresses IP allouées en exécutant la commande suivante:

    gcloud compute addresses describe RESERVED_RANGE \
      --global \
      --project=CONSUMER_PROJECT
    

    Remplacez les éléments suivants :

    • RESERVED_RANGE : nom de la plage réservée pour l'appairage de VPC.
    • CONSUMER_PROJECT: ID du projet qui héberge l'objet CONSUMER_NETWORK.
  4. Utilisez les valeurs address et prefixLength du résultat de l'étape précédente pour représenter la plage d'adresses IP allouée au format CIDR, puis exécutez la commande suivante pour créer une règle de pare-feu:

    gcloud compute firewall-rules create "allow-peered-ingress" \
      --network=CONSUMER_NETWORK \
      --project=CONSUMER_PROJECT \
      --direction ingress \
      --action allow \
      --source-ranges={Allocated IP range in CIDR format i.e. address/prefixLength} \
      --rules=all
    

    Remplacez les éléments suivants :

    • CONSUMER_NETWORK: nom du réseau VPC connecté à l'application.
    • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.

    Pour en savoir plus sur la configuration des règles de pare-feu, consultez la page Utiliser des règles de pare-feu.

Configurer les ressources du connecteur client

Il existe deux types de ressources : le service de connecteur client et la passerelle client.

Le service du connecteur client permet de définir une configuration commune pour un groupe de passerelles clientes. Les passerelles clientes font référence au service du connecteur client et servent à contrôler les régions dans lesquelles vous souhaitez gérer le trafic utilisateur.

Pour le moment, un seul service de connecteurs client est autorisé par domaine, et une seule passerelle cliente par région et par service du connecteur client est autorisée. De plus, vous ne pouvez utiliser que les régions suivantes pour héberger les ressources de passerelle et de service client de connecteur que vous utilisez: asia-east1, europe-west1, us-east1 et us-central1.

  1. Créez le service de connecteur client en exécutant la commande suivante:

    POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d "{ingress:{config:{transport_protocol: \"TCP\", destination_routes:[{address:\"DESTINATION_ADDRESS\", netmask:\"DESTINATION_MASK\"}]}},egress:{peered_vpc:{network_vpc:\"projects/CONSUMER_PROJECT/global/networks/CONSUMER_NETWORK\"}}}" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices?client_connector_service_id=CLIENT_CONNECTOR_SERVICE_NAME
    

    Remplacez les éléments suivants :

    • DESTINATION_ADDRESS: adresse hôte du sous-réseau de destination hébergeant l'application. Par exemple, si votre application utilise 10.0.0.0/28, l'adresse est 10.0.0.0.
    • DESTINATION_MASK : masque de réseau du sous-réseau de destination hébergeant l'application. Par exemple, si votre application utilise 10.0.0.0/28, le masque est 255.255.255.240.
    • CONSUMER_PROJECT: ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • CONSUMER_NETWORK: nom du réseau VPC connecté à l'application.
    • SERVICE_LOCATION : la région dans laquelle le service de connecteur client sera créé.
    • CLIENT_CONNECTOR_SERVICE_NAME: nom du service de connecteur client.
  2. Vérifiez que le service de connecteur client a été créé en répertoriant les informations de service à l'aide de la commande suivante:

    GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices
    

    Remplacez les éléments suivants :

    • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • SERVICE_LOCATION: la région dans laquelle se trouve le service du connecteur client.
  3. (Facultatif) Supprimez un service de connecteur client en exécutant la commande suivante:

    DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME
    

    Remplacez les éléments suivants :

    • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • SERVICE_LOCATION: la région dans laquelle se trouve le service du connecteur client.
    • CLIENT_CONNECTOR_SERVICE_NAME : nom du service de connecteur client.
  4. Créez une ou plusieurs passerelles clientes en exécutant la commande suivante aussi souvent que nécessaire:

    POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d "{client_connector_service: \"projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME\"}" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways?client_gateway_id=CLIENT_GATEWAY_NAME
    

    Remplacez les éléments suivants :

    • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • SERVICE_LOCATION : la région dans laquelle se trouve le service du connecteur client.
    • CLIENT_CONNECTOR_SERVICE_NAME: nom du service de connecteur client.
    • GATEWAY_LOCATION : région dans laquelle la passerelle cliente sera créée.
    • CLIENT_GATEWAY_NAME : nom de votre passerelle client.

    Cette étape peut prendre quelques minutes.

  5. Vérifiez que les passerelles clientes sont opérationnelles en exécutant la commande suivante:

    GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways
    

    Remplacez les éléments suivants :

    • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • GATEWAY_LOCATION : région dans laquelle se trouve la passerelle cliente.
  6. (Facultatif) Supprimez une passerelle client en exécutant la commande suivante:

    DELETE \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/GATEWAY_LOCATION/clientGateways/CLIENT_GATEWAY_NAME
    

    Remplacez les éléments suivants :

    • CONSUMER_PROJECT: ID du projet qui héberge l'objet CONSUMER_NETWORK.
    • GATEWAY_LOCATION: région où se trouve la passerelle du connecteur client.
    • CLIENT_GATEWAY_NAME: nom de votre passerelle client.

Configurer des règles d'accès contextuel

  1. Déterminez les comptes principaux ou créez un groupe d'utilisateurs. Identifiez les utilisateurs qui ont besoin d'accéder aux applications non Web protégées. Vous pouvez également créer un groupe d'utilisateurs pour simplifier la configuration et la gestion.

  2. (Facultatif) Créez un niveau d'accès dans Access Context Manager pour définir une règle d'accès contextuel que vous pouvez utiliser pour restreindre l'accès à votre application.

  3. Configurez une stratégie IAM pour la ressource du service de connecteur client, puis accordez au compte principal ou au groupe d'utilisateurs le rôle (roles/beyondcorp.clientConnectorServiceUser) requis pour accéder aux applications non Web. Vous pouvez éventuellement spécifier une condition IAM pour provisionner le rôle uniquement lorsqu'un niveau d'accès est satisfait. Pour mettre à jour la stratégie IAM d'une ressource, utilisez le modèle lecture-modification-écriture suivant:

    1. Lisez la stratégie existante. La méthode getIamPolicy() lit la stratégie IAM existante pour la ressource du service du connecteur client dans policy.json.

      GET \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME:getIamPolicy > policy.json
      

      Remplacez les éléments suivants :

      • CONSUMER_PROJECT: ID du projet qui héberge l'objet CONSUMER_NETWORK.
      • SERVICE_LOCATION: la région dans laquelle se trouve le service du connecteur client.
      • CLIENT_CONNECTOR_SERVICE_NAME: nom de votre service de connecteur client.
    2. Modifiez la stratégie renvoyée. Mettez à jour les liaisons dans policy.json pour inclure la nouvelle attribution de rôle IAM. Vous pouvez le faire dans un éditeur de texte ou par programmation. Exemple :

      {
        "policy": {
          "bindings": [
            {
              "role": "roles/beyondcorp.clientConnectorServiceUser",
              "members": [
                "user:EXAMPLE_USER@EXAMPLE.COM",
                "group:EXAMPLE_GROUP@EXAMPLE.COM",
              ],
              "condition":
               {
                 "expression":
      "'accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME' in
      request.auth.access_levels",
                "title": "CONDITION_NAME"
              }
            }
          ]
        }
      }
      
    3. Écrivez la stratégie mise à jour. Vous pouvez utiliser la méthode setIamPolicy() pour écrire la stratégie IAM mise à jour. Exemple :

      POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -d @policy.json \
      https://beyondcorp.googleapis.com/v1alpha/projects/CONSUMER_PROJECT/locations/SERVICE_LOCATION/clientConnectorServices/CLIENT_CONNECTOR_SERVICE_NAME:setIamPolicy
      

      Remplacez les éléments suivants :

      • CONSUMER_PROJECT : ID du projet qui héberge l'objet CONSUMER_NETWORK.
      • SERVICE_LOCATION : la région dans laquelle se trouve le service du connecteur client.
      • CLIENT_CONNECTOR_SERVICE_NAME: nom du service de connecteur client.

Installer l'agent de connecteur client sur les appareils de point de terminaison (Windows ou macOS)

  1. Activez l'extension Endpoint Verification en suivant la procédure décrite dans Configurer Endpoint Verification sur vos appareils.

  2. Une fois la validation des points de terminaison opérationnelle, l'extension Endpoint Verification de l'utilisateur mis à jour affiche un bouton START CONNECTION (Démarrer une connexion). Pour accéder à l'application non Web protégée, les utilisateurs peuvent cliquer sur le bouton START CONNECTION (Démarrer une connexion).

Lorsqu'un utilisateur établit une connexion pour la première fois, la validation des points de terminaison l'invite à télécharger et à installer les fichiers binaires du connecteur client. Vous pouvez également télécharger les binaires du connecteur client aux URL suivantes:

Une fois la connexion établie, l'utilisateur peut accéder à la ressource protégée. Les utilisateurs peuvent choisir d'y mettre fin en cliquant sur le bouton END CONNECTION (Terminer la connexion).