Sécuriser l'accès aux applications Web privées

Ce document explique comment configurer une passerelle sécurisée Chrome Enterprise Premium pour sécuriser l'accès à vos applications Web privées.

Une passerelle sécurisée Chrome Enterprise Premium fonctionne comme un proxy inverse, appliquant un framework d'accès zéro confiance et offrant un contrôle précis et contextuel sur les personnes qui accèdent à vos applications Web privées.

Fonctionnement de la sécurisation de l'accès aux applications Web privées

En établissant un tunnel sécurisé et en appliquant des règles d'accès contextuel, la passerelle sécurisée protège les applications privées et les met à l'abri de l'exposition à l'Internet public. Une configuration de navigateur côté client dirige le trafic de ces applications via le point de terminaison du proxy de passerelle sécurisée. La passerelle sécurisée applique ensuite la règle d'accès appropriée et, si elle est autorisée, achemine la requête vers l'application de destination.

La passerelle sécurisée peut protéger les applications Web privées hébergées dans les environnements suivants :

  • Google Cloud project : la passerelle sécurisée peut diriger l'accès aux applications qui s'exécutent dans votre réseau VPC Google Cloud .

  • Non-Google Cloud (centres de données sur site ou autres clouds) : vous devez d'abord établir une connexion entre votre réseau VPC privé surGoogle Cloud et le réseau non-Google Cloud . Cette opération est généralement effectuée à l'aide de Cloud VPN ou Cloud Interconnect. La passerelle sécurisée utilise ensuite la connexion pour envoyer le trafic à votre réseau VPC privé, qui le redirige à son tour vers l'environnement non-Google Cloud .

Avant de commencer

Avant de configurer la passerelle sécurisée, vérifiez que vous disposez des éléments suivants :

Configurer votre environnement shell

Pour simplifier le processus de configuration et interagir avec les API de la passerelle sécurisée, définissez les variables d'environnement suivantes dans votre shell de travail.

  • Paramètres généraux

    API="beyondcorp.googleapis.com"
    API_VERSION=v1
    PROJECT_ID=MY_PROJECT_ID

    Remplacez les éléments suivants :

    • MY_PROJECT_ID : ID du projet dans lequel la passerelle sécurisée est créée.
  • Paramètres de la passerelle sécurisée

    SECURITY_GATEWAY_ID=MY_SECURITY_GATEWAY_ID
    SECURITY_GATEWAY_DISPLAY_NAME="MY_SECURITY_GATEWAY_DISPLAY_NAME"

    Remplacez les éléments suivants :

    • MY_SECURITY_GATEWAY_ID : ID de la passerelle sécurisée que vous souhaitez créer. L'ID peut comporter jusqu'à 63 caractères et peut contenir des lettres minuscules, des chiffres et des traits d'union. Le premier caractère doit être une lettre, et le dernier peut être une lettre ou un chiffre.
    • MY_SECURITY_GATEWAY_DISPLAY_NAME : nom lisible de la passerelle sécurisée. Le nom peut comporter jusqu'à 63 caractères et inclure des caractères imprimables.

Créer une passerelle sécurisée

Une passerelle sécurisée Chrome Enterprise Premium est un élément fondamental pour établir des connexions sécurisées à vos applications. Il alloue un projet et un réseau dédiés, ce qui assure l'isolation et la sécurité.

gcloud

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

REST

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

Configurer une application Web privée

Avant de pouvoir définir des ressources d'application spécifiques dans la passerelle sécurisée, vous devez configurer les autorisations et les paramètres réseau nécessaires pour activer la connectivité et le routage approprié.

Accordez des autorisations au compte de service.

Pour envoyer du trafic à votre réseau VPC, la passerelle de sécurité a besoin de certaines autorisations IAM accordées à son compte de service de délégation. Cela permet à la passerelle sécurisée d'accéder à vos applications privées, qu'elles soient hébergées dans un VPC Google Cloud ou dans un environnement non Google Cloud connecté via Cloud VPN ou Cloud Interconnect.Google Cloud

  1. Obtenez les détails de votre passerelle sécurisée pour identifier l'adresse e-mail du compte de service de délégation. L'adresse e-mail se trouve dans le champ delegatingServiceAccount de la réponse.

    gcloud

    gcloud beta beyondcorp security-gateways describe ${SECURITY_GATEWAY_ID} \
       --project=${PROJECT_ID} \
       --location=global
                   

    REST

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}"
                   
  2. Définissez des variables d'environnement pour le compte de service et votre projet VPC cible.
    DELEGATING_SERVICE_ACCOUNT="security-gateway@my-gateway-service-account.iam.gserviceaccount.com" # Replace with actual value
          
  3. Attribuez le rôle IAM roles/beyondcorp.upstreamAccess au compte de service déléguant dans votre projet VPC privé.
    gcloud projects add-iam-policy-binding PRIVATE_VPC_PROJECT_ID \
       --role=roles/beyondcorp.upstreamAccess \
       --member=serviceAccount:${DELEGATING_SERVICE_ACCOUNT}
        
    Remplacez PRIVATE_VPC_PROJECT_ID par l'ID du projet du réseau VPC dans lequel l'application Web privée est déployée ou dans lequel Cloud VPN/Interconnect est configuré.

Une fois le rôle attribué, la prise en compte de la stratégie Identity and Access Management peut prendre environ deux minutes.

Configurer le routage réseau et les règles de pare-feu

Pour autoriser le trafic provenant de la passerelle sécurisée à atteindre vos applications Web privées, configurez les règles de pare-feu, le routage réseau et les paramètres DNS.

Règles de pare-feu pour les applications dans Google Cloud

Si votre application Web privée est hébergée dans votre réseau VPC Google Cloud , par exemple sur une VM Compute Engine, un service Google Kubernetes Engine avec une adresse IP interne ou derrière un équilibreur de charge TCP/UDP interne, configurez des règles de pare-feu VPC Google Cloud .Google Cloud Cela autorise le trafic TCP entrant provenant des plages d'adresses IP de la passerelle sécurisée : 34.158.8.0/21 et 136.124.16.0/20.

Règles de pare-feu pour les applications dans des environnements non-Google Cloud

Si votre application Web privée réside dans un centre de données sur site ou sur le réseau d'un autre fournisseur de cloud, et qu'elle est connectée à votre réseau VPC Google Cloudà l'aide de Cloud VPN ou Cloud Interconnect, configurez des règles de pare-feu sur votre pare-feu sur site ou les contrôles de sécurité réseau équivalents, tels que les groupes de sécurité et les ACL réseau, dans l'autre environnement cloud. Cela autorise le trafic TCP entrant provenant des plages d'adresses IP de la passerelle sécurisée.

Configurer le routage des environnements non-Google Cloud vers une passerelle sécurisée

Pour faciliter la communication bidirectionnelle pour les applications privées hébergées dans des environnements nonGoogle Cloud , tels que sur site ou dans d'autres clouds, votre réseau externe doit créer un chemin de retour vers les plages d'adresses IP de passerelle sécurisée suivantes : 34.158.8.0/21 et 136.124.16.0/20.

Vérifiez que votre réseau privé peut accéder aux plages d'adresses IP de la passerelle sécurisée via Cloud VPN ou Cloud Interconnect :

  • Routage dynamique : si vous utilisez le routage dynamique, tel que le protocole BGP (Border Gateway Protocol) avec Cloud Router, vérifiez que votre Cloud Router dans Google Cloud annonce explicitement les plages d'adresses IP de la passerelle sécurisée à votre appareil BGP sur site. Bien que BGP échange dynamiquement de nombreuses routes, les plages d'adresses IP de la passerelle sécurisée nécessitent une annonce explicite.

  • Routage statique : si vous utilisez des routes statiques, vous devez ajouter manuellement des routes pour chacune des plages d'adresses IP de la passerelle sécurisée sur l'équipement de votre réseau sur site, tel que votre routeur ou votre pare-feu. Ces routes statiques doivent spécifier que le trafic destiné aux plages d'adresses IP de la passerelle sécurisée doit être envoyé via la connexion Cloud VPN ou Cloud Interconnect.

    Lorsque vous utilisez le routage statique, Cloud VPN doit se trouver dans l'une des régions compatibles suivantes :

    • africa-south1
    • asia-east1
    • asia-south1
    • asia-south2
    • asia-southeast1
    • europe-central2
    • europe-north1
    • europe-southwest1
    • europe-west1
    • europe-west2
    • europe-west3
    • europe-west4
    • europe-west8
    • europe-west9
    • northamerica-northeast1
    • northamerica-northeast2
    • northamerica-south1
    • southamerica-east1
    • southamerica-west1
    • us-central1
    • us-east1
    • us-east4
    • us-east5
    • us-west1

Configuration DNS pour la résolution de noms d'hôte privés de la passerelle sécurisée

Pour que la passerelle sécurisée puisse résoudre les noms d'hôte de votre application privée, votre réseau VPCGoogle Cloud doit pouvoir résoudre les noms d'hôte à l'aide de Cloud DNS. La configuration Cloud DNS spécifique dépend de l'emplacement où vos enregistrements DNS privés sont hébergés de manière autoritaire :

  • Applications dans Google Cloud utilisant des zones privées Cloud DNS : si vos applications privées sont hébergées dans Google Cloud et que leurs enregistrements DNS sont gérés dans des zones privées Cloud DNS associées à votre réseau VPC, vérifiez que les zones sont correctement configurées et accessibles. La passerelle sécurisée utilise les fonctionnalités de résolution Cloud DNS existantes de votre VPC.

  • Applications dans des environnements non-Google Cloud ou utilisant des serveurs DNS externes : si vos applications privées se trouvent dans des environnements non-Google Cloud(sur site ou dans d'autres clouds) ou si leurs enregistrements DNS sont gérés par des serveurs DNS externes aux zones privées Cloud DNS de votre VPC, vous devez configurer Cloud DNS pour qu'il transfère les requêtes pour ces domaines privés. Cela implique généralement de créer des zones de transfert Cloud DNS dans votre VPC. Ces zones redirigeront les requêtes DNS pour vos domaines privés spécifiés vers vos serveurs DNS privés faisant autorité, tels que les serveurs sur site ou d'autres clouds.

Pour obtenir des instructions détaillées sur la configuration du DNS, consultez Créer une zone de transfert.

Créer une ressource d'application

Pour fournir un accès à une application Web privée, vous devez établir l'application dans le framework de passerelle sécurisée en créant une ressource d'application. Cette ressource définit la manière dont la passerelle sécurisée identifie le trafic de votre application (en fonction du nom d'hôte) et où l'acheminer.

  1. Définissez les variables d'environnement requises en exécutant la commande suivante :
       APPLICATION_ID=MY_APPLICATION_ID
       APP_DISPLAY_NAME="MY_APP_DISPLAY_NAME"
       HOST_NAME=MY_HOST_NAME
       PRIVATE_NETWORK_RESOURCE_NAME=MY_PRIVATE_NETWORK_RESOURCE_NAME
       
    Remplacez les éléments suivants :
    • MY_APPLICATION_ID : ID unique de la ressource d'application.
    • MY_APP_DISPLAY_NAME : nom lisible à afficher.
    • MY_HOST_NAME : nom d'hôte principal auquel les utilisateurs accèdent (par exemple, private.local).
    • MY_PRIVATE_NETWORK_RESOURCE_NAME : nom complet de la ressource du réseau VPC (par exemple, projects/my-project/global/networks/my-network).
  2. Créez la ressource d'application.

    gcloud

    Exécutez la commande suivante pour créer la ressource d'application.

    gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \
      --project=${PROJECT_ID} \
      --security-gateway=${SECURITY_GATEWAY_ID} \
      --location=global \
      --display-name="${APP_DISPLAY_NAME}" \
      --endpoint-matchers="hostname=${HOST_NAME}" \
      --upstreams=network=name="${PRIVATE_NETWORK_RESOURCE_NAME}"
            

    Pour spécifier une région de sortie (par exemple, lorsque vous utilisez des routes statiques), ajoutez l'option --egress-regions :

    gcloud beta beyondcorp security-gateways applications create ${APPLICATION_ID} \
      --project=${PROJECT_ID} \
      --security-gateway=${SECURITY_GATEWAY_ID} \
      --location=global \
      --display-name="${APP_DISPLAY_NAME}" \
      --endpoint-matchers="hostname=${HOST_NAME}" \
      --upstreams=network=name="${PRIVATE_NETWORK_RESOURCE_NAME}",egressPolicy=regions=us-central1
            

    Remplacez us-central1 par la région Google Cloud (par exemple, europe-west1 ou asia-northeast1) qui correspond à votre configuration de routage statique régional. Si vous n'avez pas d'exigences spécifiques en matière de routage statique régional, vous pouvez omettre la règle de sortie de votre configuration.

    REST

    Pour créer une ressource d'application avec l'API, procédez comme suit :

    1. Créez un fichier nommé application.json.

      {
      "display_name": "MY_APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "MY_HOST_NAME"}
      ],
      "upstreams": [{
         "network": {
            "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME"
         }
      }]
      }
               

      Pour spécifier une région de sortie (par exemple, lorsque vous utilisez des routes statiques), ajoutez un egress_policy à la configuration en amont :

      {
      "display_name": "MY_APP_DISPLAY_NAME",
      "endpoint_matchers": [
         {"hostname": "MY_HOST_NAME"}
      ],
      "upstreams": [{
         "network": {
            "name": "MY_PRIVATE_NETWORK_RESOURCE_NAME"
         },
         "egress_policy": {
            "regions": [
            "us-central1"
            ]
         }
      }]
      }
                

      Remplacez us-central1 par la région Google Cloud (par exemple, europe-west1 ou asia-northeast1) qui correspond à votre configuration de routage statique régional. Si vous n'avez pas d'exigences spécifiques en matière de routage statique régional, vous pouvez omettre la règle de sortie de votre configuration.

    2. Appelez la méthode API Create.

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

Configurer le mode proxy Google Chrome

Pour acheminer le trafic de la ressource d'application via la passerelle sécurisée, configurez Chrome en appliquant un fichier PAC dans les paramètres Chrome de la console d'administration Google.

  1. Créez ou mettez à jour un fichier PAC.

    • Si vous créez votre première application, créez un fichier pac_config.js à l'aide de l'exemple de fichier PAC suivant.

    • Si vous créez une deuxième application ou une application ultérieure, mettez à jour votre fichier pac_config.js existant et ajoutez les domaines de votre nouvelle application au tableau des sites, comme indiqué dans l'exemple de fichier PAC suivant.

    function FindProxyForURL(url, host) {
     const PROXY = "HTTPS ingress.cloudproxy.app:443";
     const sites = ["MY_HOST_NAME"];
    
     for (const site of sites) {
       if (shExpMatch(url, 'https://' + site + '/*') || shExpMatch(url, '*.' + site + '/*')) {
         return PROXY;
       }
     }
    return 'DIRECT';
    }

    Si vous utilisez un fichier PAC existant qui n'est pas spécifique à une passerelle sécurisée, fusionnez les fichiers PAC en ajoutant les domaines de votre application au tableau des sites.

  2. Importez le fichier pour qu'il soit téléchargeable publiquement. Par exemple, vous pouvez importer le fichier dans Cloud Storage et le rendre téléchargeable publiquement en attribuant le rôle Utilisateur d'objets Storage à tous les utilisateurs pour le bucket.

  3. Pour vérifier que le fichier importé est toujours la dernière version, vous pouvez ajuster son comportement de mise en cache en définissant l'en-tête Cache-Control sur no-cache. Ce paramètre empêche les navigateurs et les serveurs intermédiaires de stocker une copie du fichier. Chrome télécharge ainsi toujours la version la plus récente.

    Pour en savoir plus sur Cache-Control et son impact sur la mise en cache du navigateur, consultez En-tête Cache-Control.

  4. Copiez l'URL publique du fichier importé.

Modifier les paramètres du mode proxy

  1. Accédez à la console d'administration Google.
  2. Cliquez sur Appareils > Chrome > Paramètres.
  3. Sélectionnez une unité organisationnelle ou un groupe, puis cliquez sur Mode proxy.
  4. Sur la page "Mode proxy", sélectionnez Toujours utiliser la configuration automatique du proxy indiquée ci-dessous, puis saisissez l'URL du fichier PAC depuis Cloud Storage.

Configurer une règle d'accès

Vous pouvez appliquer une règle d'accès pour contrôler l'accès au niveau de la passerelle sécurisée (ce qui affecte toutes les applications associées) ou au niveau de chaque application (pour un contrôle plus précis).

Mettre à jour une règle d'accès de manière sécurisée

La commande setIamPolicy remplace l'intégralité de la stratégie existante par celle que vous fournissez. Pour éviter de supprimer accidentellement des autorisations existantes, nous vous recommandons de suivre un modèle "lecture-modification-écriture". Cela vous permet de vous assurer que vous n'ajoutez des éléments qu'à la règle existante, sans la remplacer.

  1. Lecture : commencez par obtenir la stratégie d'accès actuelle.

  2. Modifier : modifiez le fichier de règles en local pour ajouter ou modifier des autorisations.

  3. Écrivez : appliquez votre fichier de règles mis à jour.

Obtenir la stratégie actuelle

Récupérez la stratégie actuelle avant d'apporter des modifications.

Le champ etag de la stratégie sert d'identifiant de version. Il empêche les mises à jour conflictuelles si plusieurs administrateurs apportent des modifications simultanément.

La commande suivante récupère la stratégie et l'enregistre dans un fichier nommé policy.json.

  • Obtenez la stratégie pour une passerelle sécurisée :

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:getIamPolicy" > policy.json
  • Obtenez les règles pour une application individuelle :

    curl \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}/applications/${APPLICATION_ID}:getIamPolicy" > policy.json

Une fois la commande exécutée, un fichier policy.json contenant le règlement actuel est créé.

Modifier le fichier de stratégie

Ouvrez le fichier policy.json dans un éditeur de texte. Pour autoriser un groupe à utiliser la passerelle sécurisée, ajoutez-le à la liste members pour le rôle roles/beyondcorp.securityGatewayUser.

Votre fichier policy.json doit ressembler à l'exemple suivant :

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

Pour ajouter un groupe, ajoutez une entrée au tableau members. Ajoutez une virgule après l'entrée précédente.

L'exemple suivant ajoute new-group@example.com :

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

Vous pouvez également ajouter d'autres types de membres, tels que serviceAccount, user, group, principal et principalSet, dans les liaisons de règles. Pour en savoir plus, consultez Comptes principaux IAM.

Appliquer la règle mise à jour

Après avoir modifié et enregistré votre fichier policy.json, appliquez-le à la ressource à l'aide de la commande setIamPolicy. Cette commande utilise le etag de votre fichier pour s'assurer que vous mettez à jour la bonne version.

  • Appliquez la règle à une passerelle sécurisée :

    jq '{policy: .}' policy.json | curl -X POST \
        -H "Authorization: Bearer $(gcloud auth print-access-token)" \
        -H "Content-Type: application/json" \
        -d @- \
        "https://${API}/${API_VERSION}/projects/${PROJECT_ID}/locations/global/securityGateways/${SECURITY_GATEWAY_ID}:setIamPolicy"
  • Appliquez la règle à une application individuelle :

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

Ajouter une stratégie d'accès conditionnel

Vous pouvez également définir des règles d'accès avec des conditions. Les conditions spécifient des exigences, par exemple l'adresse IP d'un utilisateur provenant d'un emplacement spécifique.

L'exemple suivant illustre une règle qui n'accorde l'accès que si l'adresse IP source se trouve dans un niveau d'accès spécifié :

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

Pour appliquer cette règle, suivez les étapes décrites précédemment.

Installer l'extension Chrome Enterprise Premium

L'extension Chrome Enterprise Premium fait partie intégrante d'une passerelle sécurisée et facilite l'authentification. Installez l'extension pour tous les utilisateurs de la passerelle sécurisée. Pour savoir comment déployer l'extension, consultez Afficher et configurer des applications et des extensions.

  1. Accédez à la console d'administration Google.
  2. Cliquez sur Navigateur Chrome > Applications et extensions.
  3. Cliquez sur l'onglet Utilisateurs et navigateurs.
  4. Pour ajouter une extension Chrome, cliquez sur le bouton +.
  5. Recherchez ekajlcmdfcigmdbphhifahdfjbkciflj, puis forcez l'installation pour tous les utilisateurs de l'unité organisationnelle ou du groupe.
  6. Cliquez sur l'extension installée, puis accédez au champ Règles relatives aux extensions et fournissez la valeur JSON suivante :

    {
     "securityGateway": {
       "Value": {
         "authentication": {},
         "context": { "resource": "projects/MY_PROJECT_ID/locations/global/securityGateways/MY_SECURITY_GATEWAY_ID" }
       }
     }
    }

Expérience de l'utilisateur final

Une fois la configuration terminée, l'accès des utilisateurs finaux à l'application SaaS protégée est accordé ou refusé en fonction de la règle d'accès appliquée à l'application.

Accéder à l'application dans Chrome

L'extension Chrome Enterprise Premium est requise pour rediriger le trafic via la passerelle sécurisée. L'extension gère l'authentification entre l'utilisateur et la passerelle sécurisée. L'extension est installée automatiquement via la règle de domaine.

Lorsque les utilisateurs accèdent à l'application SaaS que vous avez configurée, leur trafic passe par la passerelle sécurisée, qui vérifie s'ils respectent la règle d'accès. Si les utilisateurs réussissent les vérifications des règles d'accès, ils peuvent accéder à l'application.

Lorsque l'accès au navigateur à l'application est refusé par la règle d'autorisation, les utilisateurs reçoivent un message Access denied.

Étapes suivantes