Créer et appliquer des niveaux d'accès aux ressources sécurisées par IAP

Cette page explique comment créer des niveaux d'accès à l'aide d'Access Context Manager et les appliquer à des ressources sécurisées par Identity-Aware Proxy (IAP).

Présentation

Un niveau d'accès est un ensemble d'attributs affectés à des requêtes en fonction de leur origine. En utilisant des informations telles que le type d'appareil, l'adresse IP et l'identité de l'utilisateur, vous pouvez définir le niveau d'accès à accorder. Par exemple, vous pouvez attribuer un niveau de confiance "High_Trust" aux connexions provenant de votre réseau d'entreprise et un niveau "Medium_Trust" à des appareils externes exécutant des systèmes d'exploitation approuvés.

Une fois que vous avez configuré la validation des points de terminaison, les informations sur l'appareil sont collectées et référencées par niveau d'accès. La validation des points de terminaison crée un inventaire de tous les appareils professionnels et personnels qui accèdent à vos ressources d'entreprise.

Un niveau d'accès est appliqué en l'ajoutant comme condition Identity and Access Management (IAM) sur votre ressource sécurisée par IAP. IAP vous permet d'appliquer un modèle de contrôle d'accès précis au niveau des ressources au lieu d'utiliser des pare-feu au niveau du réseau. Par exemple, vous pouvez choisir d'accorder l'accès à de nombreuses ressources pour le niveau "Medium_Trust", tout en réservant l'accès à certaines ressources plus sensibles au niveau "High_Trust".

Pour plus d'informations, consultez la présentation d'Access Context Manager.

Avant de commencer

Avant de commencer, vous devez effectuer les opérations suivantes :

  • Sécurisez une ressource avec IAP.
  • Configurez la validation des points de terminaison. Notez que cette opération n'est nécessaire que si vous souhaitez limiter l'accès à vos ressources en fonction des informations sur les appareils des utilisateurs, telles que l'état de chiffrement du stockage.
  • Assurez-vous que l'un des rôles suivants est accordé sur votre projet.

    • Administrateur Access Context Manager
    • Éditeur Access Context Manager

Créer un niveau d'accès

Le processus suivant crée un niveau d'accès.

Pour cet exemple, supposons que vous souhaitiez créer un niveau d'accès permettant à un groupe d'auditeurs internes d'accéder à l'observabilité Google Cloud pour un projet. Tous les appareils des auditeurs se voient attribuer des adresses IP sur un sous-réseau spécifique (de 203.0.113.0 à 203.0.113.127). Vous voulez également vous assurer que leurs appareils sont chiffrés. Vous avez l'assurance que seuls les appareils utilisés par les auditeurs pourront accéder à ce sous-réseau.

Console

  1. Accédez à la page Access Context Manager dans la console Google Cloud.

    Accéder à la page Access Context Manager

  2. Si vous y êtes invité, sélectionnez votre organisation.

  3. En haut de la page Access Context Manager, cliquez sur Nouveau.

  4. Dans la section Conditions du volet Nouveau niveau d'accès, cliquez sur Ajouter un attribut, puis sur Règles relatives aux appareils.

  5. Cliquez sur la liste déroulante Chiffrement du stockage et sélectionnez Chiffrement. Notez que cette règle ne fonctionne qu'une fois que vous avez configuré la validation des points de terminaison sur les appareils de vos employés.

  6. Cliquez à nouveau sur Ajouter un attribut, puis sélectionnez Sous-réseaux IP.

  7. Dans la zone Sous-réseaux IP, entrez une ou plusieurs plages IPv4 ou IPv6 sous forme de blocs CIDR.

    Dans cet exemple, pour n'autoriser l'accès qu'aux auditeurs, vous devez saisir 203.0.113.0/25 dans le champ Sous-réseaux IP.

  8. Cliquez sur Enregistrer.

gcloud

  1. Créez un fichier .yaml pour un niveau d'accès qui comprend une ou plusieurs plages IPv4 ou IPv6 sous forme de blocs CIDR.

    Dans cet exemple, pour n'autoriser l'accès qu'aux auditeurs, vous devez saisir les éléments suivants dans le fichier .yaml :

    - ipSubnetworks:
        - 203.0.113.0/25
    - devicePolicy:
        allowedEncryptionStatuses
          - ENCRYPTED
    

    Pour obtenir la liste des attributs de niveau d'accès et de leur format YAML, consultez la page Attributs de niveau d'accès. Consultez cet exemple de fichier YAML de niveau d'accès pour obtenir un fichier YAML complet de tous les attributs possibles.

    Notez que la règle devicePolicy ne fonctionne qu'une fois que vous avez configuré la validation des points de terminaison sur les appareils de vos employés.

  2. Enregistrez le fichier. Dans cet exemple, le fichier est nommé CONDITIONS.yaml.

  3. Créez le niveau d'accès.

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY_NAME
    

    Où :

    • NAME est le nom unique du niveau d'accès. Ce nom doit commencer par une lettre et ne peut contenir que des lettres, des chiffres et des traits de soulignement.

    • TITLE est le titre de la règle, présenté dans un format lisible. Ce titre doit être propre à la règle.

    • POLICY_NAME est le nom de la règle d'accès de votre organisation.

    Un résultat semblable à celui-ci s'affiche :

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. Concevez un corps de requête pour créer une ressource AccessLevel qui inclut une ou plusieurs plages IPv4 ou IPv6 sous forme de blocs CIDR et des règles relatives aux appareils qui nécessitent un stockage chiffré.

    Dans cet exemple, pour n'autoriser l'accès qu'aux auditeurs, vous devez saisir les éléments suivants dans le corps de la requête :

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "ipSubnetworks": [
             "203.0.113.0/25"
           ]
         },
         {
         "devicePolicy": [
           "allowedEncryptionStatuses": [
             "ENCRYPTED"
           ]
         ]
         }
       ]
     }
    }
    

    Où :

    • NAME est le nom unique du niveau d'accès. Ce nom doit commencer par une lettre et ne peut contenir que des lettres, des chiffres et des traits de soulignement.

    • TITLE est le titre de la règle, présenté dans un format lisible. Ce titre doit être propre à la règle.

  2. Créez le niveau d'accès en appelant la méthode accessLevels.create.

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels
    

    Où :

    • POLICY_NAME est le nom de la règle d'accès de votre organisation.

Appliquer un niveau d'accès

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

L'ajout d'une liaison conditionnelle IAM à la stratégie 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 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, consultez la page Utiliser des conditions applicables aux noms d'hôte et aux chemins d'accès.

Les étapes suivantes vous expliquent comment ajouter votre niveau d'accès à une ressource sécurisée par IAP en mettant à jour sa stratégie IAM.

Console

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

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

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

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

  4. Dans le champ Nouveau compte principal, saisissez les comptes principaux auxquels vous souhaitez attribuer un rôle.

  5. Dans la liste déroulante Sélectionner un rôle, sélectionnez le rôle Utilisateur de l'application Web sécurisée par IAP.

  6. 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.

    Lorsque vous appliquez plusieurs niveaux d'accès à une ressource, les utilisateurs ont accès à la ressource dès lors qu'ils remplissent les conditions spécifiées dans au moins l'un des niveaux d'accès que vous sélectionnez (il s'agit d'un OR logique des niveaux d'accès de la liste). Si vous souhaitez que les utilisateurs remplissent les conditions de plusieurs niveaux d'accès (un "AND" logique des niveaux d'accès), créez un niveau d'accès contenant plusieurs niveaux d'accès.

  7. Si vous souhaitez ajouter d'autres rôles aux comptes principaux, cliquez sur Ajouter un autre rôle.

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

gcloud

Actuellement, vous ne pouvez utiliser la gcloud CLI 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 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 de façon à spécifier les éléments suivants :

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

    La condition suivante 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 d'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

API

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

Avant de suivre les étapes d'API spécifiques à l'application ci-dessous, exportez les variables suivantes:

 export PROJECT_NUM=PROJECT_NUMBER
 export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
 # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
 export JSON_NEW_POLICY=POLICY_FILE.JSON
 

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 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 plutôt qu'en GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -d '' ${GAE_BASE_URL}/:getIamPolicy
    

  3. Ajoutez votre liaison conditionnelle IAM au fichier JSON de stratégie 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 BeyondCorp Enterprise. Une condition 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 d'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 "Authorization: Bearer $(gcloud auth print-access-token)" \
    ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}
    

Services et versions App Engine

Vous pouvez également mettre à jour la stratégie IAM d'un service App Engine, de toutes les versions ou d'une version spécifique d'un service. Pour effectuer cette opération pour 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. Obtenez et définissez la stratégie 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 IAM de 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 plutôt qu'en GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
     -d ''
    

  3. Ajoutez votre liaison conditionnelle IAM au fichier JSON de stratégie 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 BeyondCorp Enterprise. Une condition 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 "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}