Configurer l'accès contextuel avec Cloud Identity-Aware Proxy

Ce guide explique comment étendre les stratégies d'accès de Cloud Identity-Aware Proxy (Cloud IAP) à l'aide de niveaux d'accès et du framework des conditions Cloud Identity and Access Management (Cloud IAM). Les niveaux d'accès permettent de restreindre l'accès aux ressources en fonction de l'adresse IP et des attributs de l'appareil de l'utilisateur final. Les conditions Cloud IAM permettent, quant à elles, de restreindre l'accès en fonction des hôtes d'URL, des chemins d'URL, de la date et de l'heure.

Si vous êtes inscrit à la version bêta privée du framework des conditions Cloud IAM, vous pouvez aussi utiliser les niveaux d'accès pour les projets sécurisés par Cloud IAP.

Par exemple, selon la configuration des stratégies, votre application sensible peut :

  • accorder l'accès à tous les employés qui utilisent un appareil d'entreprise approuvé sur le réseau d'entreprise ;
  • accorder l'accès aux employés du groupe Accès à distance qui utilisent un appareil d'entreprise approuvé avec un mot de passe sécurisé et un niveau de correctif à jour, sur n'importe quel réseau ;
  • accorder l'accès aux employés du groupe Accès privilégié si le chemin de l'URL commence par /admin.

Avant de commencer

Avant de commencer, vous aurez besoin des éléments suivants :

  • Une application sécurisée par Cloud IAP pour laquelle vous souhaitez ajouter des accès d'individus ou de groupes
  • Des noms d'utilisateurs ou de groupes auxquels vous souhaitez accorder l'accès
  • La liste blanche des accès à la version bêta privée du framework des conditions Cloud IAM si vous souhaitez définir des conditions au niveau du projet

Configurer un niveau d'accès

Pour limiter l'accès en fonction de l'adresse IP ou des attributs de l'appareil de l'utilisateur final, vous devez créer un niveau d'accès. Pour savoir comment créer un niveau d'accès, consultez le guide d'Access Context Manager. Le service Cloud IAP se sert du nom du niveau d'accès pour l'associer à une application qu'il sécurise.

Créer un compte de service

Pour utiliser des niveaux d'accès et mettre à jour votre stratégie Cloud IAM à l'aide de l'API, vous avez besoin d'un compte de service authentifié pour votre projet.

  1. Dans le projet où votre application est déployée, créez un compte de service.
  2. Authentifiez votre nouveau compte de service à l'aide de gcloud auth activate-service-account.

Télécharger le fichier d'identifiants

Pour mettre à jour votre stratégie Cloud IAM à l'aide de l'API, téléchargez le fichier d'identifiants JSON correspondant à votre nouveau compte de service. Pour ce faire, procédez comme suit :

  1. Accédez à la page Comptes de service.
    Accéder à la page "Comptes de service"

  2. Cliquez sur l'adresse e-mail de votre compte de service.

  3. Cliquez sur Modifier.

  4. Cliquez sur Créer une clé.

  5. Sélectionnez un type de clé JSON.

  6. Cliquez sur Créer pour créer la clé, puis fermez la fenêtre de confirmation qui s'affiche.

Votre fichier d'identifiants JSON est désormais téléchargé.

Modifier la stratégie Cloud IAM

Une application sécurisée par Cloud IAP dispose d'une stratégie Cloud IAM qui lie le rôle Cloud IAP à l'application.

L'ajout d'une liaison conditionnelle Cloud IAM à la stratégie Cloud IAM permet de restreindre davantage l'accès à vos ressources en fonction des attributs de requête. Ces derniers incluent :

  • Niveaux d'accès
  • Nom d'hôte/Chemin d'URL
  • Date/Heure

Notez que les valeurs de requête qui sont comparées à request.host et request.path, et qui sont spécifiées dans une liaison conditionnelle Cloud IAM, doivent être exactes. Par exemple, si vous limitez l'accès aux chemins commençant par /internal admin, il est possible de contourner la restriction en accédant à /internal%20admin. Pour en savoir plus sur les conditions applicables aux noms d'hôte et aux chemins d'accès, consultez la section Utiliser des conditions applicables aux noms d'hôte et aux chemins d'accès.

Si vous souhaitez ajouter et modifier des liaisons conditionnelles pour votre stratégie Cloud IAM, suivez la procédure ci-dessous.

Console

Pour ajouter une liaison conditionnelle à l'aide de la console GCP, procédez comme suit :

  1. Accédez à la page d'administration de Cloud IAP.

    Accéder à la page d'administration de Cloud IAP

  2. Cochez la case située à côté des ressources pour lesquelles vous souhaitez mettre à jour les autorisations Cloud IAM.

  3. Dans le panneau d'informations situé à droite, cliquez sur Ajouter un membre.

  4. Dans le champ Nouveau membre, saisissez les membres auxquels vous souhaitez attribuer un rôle.

  5. Dans la liste déroulante Sélectionner un rôle, choisissez le rôle Utilisateur de l'application Web sécurisée par IAP et indiquez les conditions de niveau d'accès à la ressource pour les membres.

    • Pour spécifier des niveaux d'accès existants, sélectionnez-les dans la liste déroulante Niveaux d'accès. Vous devez choisir le rôle Utilisateur de l'application Web sécurisée par IAP et disposer des autorisations au niveau de l'organisation pour afficher les niveaux d'accès existants. Vous devez disposer de l'un des rôles suivants :
      • Administrateur Access Context Manager
      • Éditeur Access Context Manager
      • Lecteur Access Context Manager
    • Pour créer et gérer des niveaux d'accès, servez-vous de la fonctionnalité Access Context Manager.
  6. Si vous souhaitez ajouter d'autres rôles aux membres, cliquez sur Ajouter un autre rôle.

  7. Une fois les rôles ajoutés, cliquez sur Enregistrer.

    Vous venez d'ajouter une liaison conditionnelle à votre ressource.

Pour supprimer une liaison conditionnelle, procédez comme suit :

  1. Accédez à la page d'administration de Cloud IAP.

    Accéder à la page d'administration de Cloud IAP

  2. Cochez la case située à côté de la ressource pour laquelle vous souhaitez supprimer le rôle Cloud IAM d'un membre.

  3. Dans le panneau d'informations situé à droite, sous Rôle/Membre, cliquez sur le rôle que vous souhaitez supprimer pour le membre.

  4. Cliquez sur Supprimer  à côté du membre.

  5. Dans la boîte de dialogue Supprimer le rôle pour ce membre qui s'affiche, cliquez sur Supprimer. Pour supprimer tous les rôles non hérités du membre sur la ressource sélectionnée, cochez la case correspondante avant de cliquer sur Supprimer.

gcloud

Pour définir des liaisons conditionnelles à l'aide de l'outil gcloud, vous devez vous inscrire à la version bêta privée du framework des conditions Cloud IAM. Pour le moment, vous ne pouvez utiliser l'outil gcloud que pour définir des liaisons conditionnelles au niveau du projet.

Pour définir des liaisons conditionnelles, modifiez le fichier policy.yaml de votre projet en procédant comme suit :

  1. Ouvrez la stratégie Cloud IAM de l'application à l'aide de la commande gcloud suivante :

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml

  2. Modifiez le fichier policy.yaml en spécifiant les éléments suivants :

    • Les utilisateurs et groupes auxquels vous souhaitez appliquer la condition Cloud IAM
    • Le rôle iap.httpsResourceAccessor pour leur accorder l'accès aux ressources
    • La condition Cloud IAM

      L'extrait suivant montre une condition Cloud IAM avec un seul attribut spécifié. Cette condition accorde l'accès à l'utilisateur et au groupe si les exigences du niveau d'accès ACCESS_LEVEL_NAME sont remplies et si le chemin de l'URL de la ressource commence par /.

      ...
      - members:
      - group:EXAMPLE_GROUP@GOOGLE.COM
      - user:EXAMPLE_USER@GOOGLE.COM
      role: roles/iap.httpsResourceAccessor
      condition:
          expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in
                       request.auth.access_levels && request.path.startsWith("/")
          title: CONDITION_TITLE
      ...

  3. Liez la stratégie à l'application à l'aide de la commande set-iam-policy.

    gcloud projects set-iam-policy PROJECT_ID policy.yaml

Votre stratégie Cloud IAM inclut désormais une liaison conditionnelle.

API

Pour modifier le fichier policy.json de votre application, suivez la procédure ci-dessous pour votre type d'application. Consultez la page Gérer l'accès aux ressources sécurisées par Cloud IAP pour en savoir plus sur l'utilisation de l'API Cloud IAM afin de gérer les stratégies d'accès.

Avant de suivre la procédure de l'API spécifique à chaque application ci-dessous, effectuez ces étapes :

  1. Téléchargez le fichier d'identifiants de votre compte de service.
  2. Exportez les variables suivantes.

    export PROJECT_NUM=PROJECT_NUMBER
    export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
    # Replace with the path to your local service account's downloaded JSON file
    export JSON_CREDS=EXAMPLE.IAM.GSERVICEACCOUNT.COM.JSON
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    

  3. Convertissez le fichier d'identifiants JSON de votre compte de service en jeton d'accès OAuth à l'aide de l'outil Oauth2l en exécutant la commande suivante.

    oauth2l header --json ${JSON_CREDS} cloud-platform

  4. Si vous exécutez cette commande pour la première fois, procédez comme suit lorsque vous y êtes invité :

    1. Récupérez le code de validation en cliquant sur le lien affiché et en copiant le code.
    2. Collez le code de validation dans l'invite de votre application.
    3. Copiez le jeton de support renvoyé.
    4. Exportez une nouvelle variable affectée à votre jeton de support renvoyé.
      export CLOUD_OAUTH_TOKEN=AUTHORIZATION_BEARER_TOKEN
  5. Si vous avez déjà exécuté cette commande, exportez la variable suivante.

    export CLOUD_OAUTH_TOKEN ="$(oauth2l header --json ${JSON_CREDS} cloud-platform)"

App Engine

  1. Exportez les variables App Engine suivantes :

    # The APP_ID is usually the project ID
    export GAE_APP_ID=APP_ID
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}

  2. Obtenez la stratégie Cloud IAM pour l'application App Engine à l'aide de la méthode getIamPolicy. Le bit de données vide à la fin transforme la requête curl en POST au lieu de GET.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" ${GAE_BASE_URL}/:getIamPolicy \
         -d ''
    

  3. Ajoutez votre liaison conditionnelle Cloud IAM au fichier JSON de la stratégie Cloud IAM. L'exemple suivant présente un fichier policy.json modifié qui lie le rôle iap.httpsResourceAccessor à deux utilisateurs, en leur accordant l'accès aux ressources sécurisées par Cloud IAP. Une condition Cloud IAM a été ajoutée pour leur permettre de n'accéder aux ressources que si les exigences du niveau d'accès ACCESS_LEVEL_NAME sont remplies et si le chemin de l'URL de la ressource commence par /. Il ne peut y avoir qu'une seule condition par liaison.

    Exemple de fichier policy.json

    {
    "policy": {
    "bindings": [
    {
      "role": "roles/iap.httpsResourceAccessor",
      "members": [
          "group:EXAMPLE_GROUP@GOOGLE.COM",
          "user:EXAMPLE_USER@GOOGLE.COM"
      ],
      "condition": {
        "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
        "title": "CONDITION_NAME"
      }
    }
    ]
    }
    }

  4. Définissez votre nouveau fichier policy.json à l'aide de la méthode setIamPolicy.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" ${GAE_BASE_URL}:setIamPolicy \
         -d @${JSON_NEW_POLICY}

Services et versions App Engine

Vous pouvez également mettre à jour la stratégie Cloud IAM d'un service App Engine, de toutes les versions ou d'une version spécifique d'un service. Pour mettre à jour la stratégie Cloud IAM d'une version spécifique d'un service, procédez comme suit :

  1. Exportez les variables supplémentaires suivantes :
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
    
  2. Mettez à jour la variable GAE_BASE_URL exportée.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Récupérez et définissez la stratégie Cloud IAM de la version à l'aide des commandes getIamPolicy et setIamPolicy indiquées ci-dessus.

GKE et Compute Engine

  1. Exportez l'ID du projet de votre service de backend.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Obtenez la stratégie Cloud IAM pour l'application Compute Engine à l'aide de la méthode getIamPolicy. Le bit de données vide à la fin transforme la requête curl en POST au lieu de GET.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
         -d ''

  3. Ajoutez votre liaison conditionnelle Cloud IAM au fichier JSON de la stratégie Cloud IAM. L'exemple suivant présente un fichier policy.json modifié qui lie le rôle iap.httpsResourceAccessor à deux utilisateurs, en leur accordant l'accès aux ressources sécurisées par Cloud IAP. Une condition Cloud IAM a été ajoutée pour leur permettre de n'accéder aux ressources que si les exigences du niveau d'accès ACCESS_LEVEL_NAME sont remplies et si le chemin de l'URL de la ressource commence par /. Il ne peut y avoir qu'une seule condition par liaison.


    Exemple de fichier policy.json

    {
    "policy": {
    "bindings": [
    {
    "role": "roles/iap.httpsResourceAccessor",
    "members": [
      "group":EXAMPLE_GROUP@GOOGLE.COM,
      "user:EXAMPLE_USER@GOOGLE.COM"
    ],
    "condition": {
      "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
      "title": "CONDITION_NAME"
    }
    }
    ]
    }
    }

  4. Définissez votre nouveau fichier policy.json à l'aide de la méthode setIamPolicy.

    curl -i -H "Content-Type:application/json" \
         -H "$(oauth2l header --json ${JSON_CREDS} cloud-platform)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}

Utiliser des conditions applicables aux noms d'hôte et aux chemins d'accès

L'accès à votre application peut être sécurisé à l'aide du nom d'hôte et du chemin d'une URL de requête. Par exemple, la condition request.path.startsWith Cloud IAM peut être utilisée pour n'accorder l'accès aux employés du groupe Accès privilégié que si le chemin de l'URL commence par /admin.

Pour en savoir plus sur l'utilisation des conditions applicables aux noms d'hôte et aux chemins d'accès, consultez la section Attributs de requête.

Normalisation des chaînes

Une URL est associée à un nom d'hôte et un chemin d'accès. Par exemple, l'URL https://sheets.google.com/create?query=param est associée au nom d'hôte sheets.google.com et au chemin d'accès /create.

Les backends peuvent interpréter les noms d'hôtes et les chemins d'accès de différentes manières. Pour éliminer toute ambiguïté, Cloud IAP normalise les chaînes de noms d'hôte et de chemins d'accès lors de la vérification des stratégies.

Cloud IAP procède à deux vérifications des stratégies lorsqu'une requête est associée à un chemin d'accès non normalisé. Si la vérification des stratégies réussit pour le chemin d'accès non normalisé, Cloud IAP le normalise. Une deuxième vérification des stratégies est effectuée. L'accès est accordé si la vérification réussit pour les chemins d'accès non normalisé et normalisé.

Par exemple, si une requête est associée au chemin d'accès /internal;some_param/admin, Cloud IAP commence par effectuer une vérification des stratégies pour le chemin d'accès non normalisé (/internal). Si cette dernière réussit, Cloud IAP effectue une deuxième vérification pour le chemin d'accès normalisé (/internal/admin).

Noms d'hôte

Vous pouvez normaliser les noms d'hôte en effectuant les opérations suivantes :

  • Suppression des points finaux
  • Mise en minuscules des caractères
  • Conversion au format ASCII

Les noms d'hôte qui incluent des caractères non ASCII sont ensuite normalisés à l'aide de la syntaxe Punycode. Vous devez appliquer cette syntaxe à la chaîne de votre nom d'hôte pour obtenir une correspondance.

Pour appliquer la syntaxe Punycode à la chaîne de votre nom d'hôte, utilisez un convertisseur tel que Punycoder.

Voici des exemples de noms d'hôte normalisés :

  • FOO.com est normalisé en foo.com.
  • café.fr est normalisé en xn--caf-dma.fr.

Chemins d'accès

Vous pouvez normaliser les chemins d'accès en effectuant les opérations suivantes :

  • Suppression des paramètres de chemin
  • Conversion des chemins relatifs en leur équivalent absolu

Un paramètre de chemin inclut tous les caractères compris entre un point-virgule (;) et la barre oblique (/) suivante ou la fin du chemin.

Les requêtes comportant ..; au début d'une section de chemin sont considérées comme non valides. Par exemple, /..;bar/ et /bar/..;/ renvoient l'erreur HTTP 400: Bad Request.

Voici des exemples de chemins d'accès normalisés :

  • /internal;some_param/admin est normalisé en /internal/admin.
  • /a/../b est normalisé en /b.
  • /bar;param1/baz;baz;param2 est normalisé en /bar/baz.

Terminaisons des sous-domaines

Une stratégie définie avec request.host.endsWith("google.com") correspond à sub_domain.google.com et testgoogle.com. Si vous souhaitez limiter votre stratégie à tous les sous-domaines qui se terminent par google.com, définissez-la sur request.host.endsWith(".google.com").

Notez qu'une stratégie définie sur request.host.endsWith(".google.com") correspond à sub_domain.google.com, mais pas à google.com en raison de la présence d'un point supplémentaire (.).

Cloud Audit Logging et niveaux d'accès

L'activation de Cloud Audit Logging pour votre projet sécurisé par Cloud IAP vous permet d'afficher les requêtes d'accès autorisées et non autorisées. Pour consulter les requêtes et tous les niveaux d'accès qu'un demandeur a atteints, procédez comme suit :

  1. Accédez à la page Journaux de la console GCP de votre projet.
    Accéder à la page "Journaux"
  2. Dans la liste déroulante de sélection des ressources, choisissez une ressource. Les ressources sécurisées par Cloud IAP incluent l'application GAE et le service de backend GCE.
  3. Dans la liste déroulante Type de journaux, sélectionnez data_access.
    1. Le type de journal data_access ne s'affiche que s'il y a eu du trafic vers votre ressource après l'activation de Cloud Audit Logging pour Cloud IAP.
  4. Cliquez pour afficher la date et l'heure de l'accès que vous souhaitez consulter.
    1. Un accès autorisé est représenté par une icône i bleue.
    2. Un accès non autorisé est représenté par une icône !! orange. .
  5. Affichez les niveaux d'accès atteints par le demandeur en cliquant pour développer les sections jusqu'à accéder à protoPayload > requestMetadata > requestAttributes > auth > accessLevels.

Notez que tous les niveaux d'accès atteints par un utilisateur sont visibles lors de l'affichage d'une requête, y compris les niveaux d'accès qui n'étaient pas requis pour y accéder. L'affichage d'une requête non autorisée n'indique pas les niveaux d'accès qui n'ont pas été atteints. Il est possible d'obtenir cette information en comparant les conditions de la ressource aux niveaux d'accès visibles sur la requête.

Pour en savoir plus sur les journaux, consultez le guide relatif à Cloud Audit Logging.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Identity-Aware Proxy