Gérer les accès aux ressources sécurisées par IAP

Cette page explique comment gérer les accès individuels ou de groupe aux ressources sécurisées par Identity-Aware Proxy (IAP) au niveau des ressources.

Présentation

IAP vous permet de configurer des stratégies IAP pour des ressources individuelles et Cloud Run dans un projet Google Cloud. Plusieurs applications d'un projet peuvent être chacune soumises à des stratégies d'accès différentes. Il s'agit entre autres de projets comportant des applications Compute Engine, Google Kubernetes Engine et App Engine. Pour les applications App Engine, différentes stratégies d'accès peuvent s'appliquer à chaque version et service.

Pour gérer un niveau de projet et un rôle d'accès supérieur, consultez la page d'administration IAM. Les listes des utilisateurs disposant d'un accès (les "principals") au niveau du projet s'appliquent à toutes les ressources du projet sécurisées par IAP.

Avant de commencer

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

  • Une ressource sécurisée par IAP à laquelle vous souhaitez ajouter un accès individuel ou de groupe
  • Des noms d'utilisateur ou de groupe pour lesquels vous souhaitez ajouter des accès

Activer et désactiver IAP

Pour activer et désactiver IAP, certaines autorisations sont requises. Le tableau ci-dessous indique les autorisations nécessaires pour chaque type d'application.

Type d'application Autorisation requise
App Engine appengine.applications.update
Compute Engine, Google Kubernetes Engine ou Cloud Run compute.backendservices.update

Ces autorisations sont accordées par des rôles (par exemple, Éditeur de projet, Administrateur App Engine et Administrateur de réseaux Compute). Même si ces rôles permettent d'activer et de désactiver IAP, ils ne disposent pas des autorisations nécessaires pour modifier les stratégies d'accès.

De plus, activer IAP à l'aide de la console Google Cloud peut également nécessiter les clientauthconfig.clients.create et Autorisations clientauthconfig.clients.getWithSecret. Ces autorisations sont accordées par le rôle Éditeur de projet.

Pour en savoir plus sur l'attribution de rôles, consultez la page Accorder, modifier et révoquer les accès.

Gérer les accès dans la console Google Cloud

Pour contrôler l'accès à une ressource sécurisée par IAP avec la console Google Cloud, suivez la procédure permettant d'ajouter ou de supprimer un accès.

Ajouter des accès

  1. Accédez à la page Identity-Aware Proxy.
    Accéder à la page "Identity-Aware Proxy"

  2. Sélectionnez le projet que vous souhaitez sécuriser avec IAP. La sélection de ressources suivante sécurise un groupe défini de ressources :

    • Tous les services Web : toutes les ressources du projet seront sécurisées. Notez que ce n'est pas la même chose que d'accorder un accès au niveau du projet via la page d'administration IAM. Un utilisateur disposant du rôle Administrateur de stratégies IAP au niveau de la ressource Tous les services Web n'a que les autorisations pour les stratégies IAP.

    • Services backend : tous les services backend seront sécurisés.

  3. Dans le panneau d'informations situé à droite, ajoutez les adresses e-mail des groupes ou des personnes auxquels vous souhaitez attribuer un rôle IAM (Identity and Access Management) pour la ressource.

  4. Appliquez des rôles de stratégie d'accès au compte principal en sélectionnant l'un des rôles suivants dans la liste déroulante Sélectionnez un rôle:

    • Propriétaire : accorde le même accès que le rôle d'administrateur de stratégies IAP. Utilisez plutôt le rôle Administrateur de stratégies IAP. Ce rôle ne permet que de modifier les stratégies et ne donne pas accès à l'application.

    • Administrateur de stratégies IAP : accorde des droits d'administrateur sur les stratégies IAP.

    • Utilisateur de l'application Web sécurisée par IAP : accorde l'accès à l'application et à d'autres ressources HTTPS utilisant IAP.

    • Examinateur de sécurité : accorde l'autorisation d'afficher et d'auditer des stratégies IAP.

  5. Une fois les adresses e-mail ajoutées et les rôles définis, cliquez sur Ajouter.

Supprimer l'accès

  1. Accédez à la page Identity-Aware Proxy.
    Accéder à la page "Identity-Aware Proxy"
  2. Sélectionnez la ressource sécurisée avec IAP.
  3. Dans le panneau d'informations situé à droite, sélectionnez la section correspondant au rôle que vous souhaitez supprimer d'un compte principal.
  4. Dans la section développée, à côté de chaque nom d'utilisateur ou de groupe auquel vous souhaitez retirer le rôle, cliquez sur Supprimer.
  5. Dans la boîte de dialogue Supprimer le compte principal qui s'affiche, cliquez sur Supprimer.

Gérer l'accès avec l'API

IAM offre un ensemble standard de méthodes pour la création et la gestion de stratégies de contrôle d'accès sur les ressources Google Cloud.

Ressources et autorisations

L'API IAP vous permet d'appliquer des autorisations IAM à des ressources individuelles dans un projet sécurisé par IAP. Les autorisations IAM accordées à un certain niveau s'appliquent à tous les niveaux inférieurs. Par exemple, une autorisation accordée au niveau du projet s'applique à toutes les ressources Google Cloud de ce projet. Les accès accordés au niveau du projet et des niveaux supérieurs sont gérés sur la page d'administration IAM, mais s'affichent sur la page d'administration IAP.

Les utilisateurs ont besoin de certaines autorisations pour accéder à une application sécurisée par IAP. Pour accorder ces autorisations, les administrateurs peuvent utiliser une API pour mettre à jour les stratégies IAM. La L'autorisation iap.webServiceVersions.accessViaIAP accorde l'accès à une application à l'utilisateur. Si vous utilisez IAP pour contrôler l'accès aux services d'administration comme SSH et RDP, les utilisateurs auront besoin du iap.tunnelInstances.accessViaIAP l'autorisation.

Chaque ressource IAP dispose de ses propres autorisations getIamPolicy et setIamPolicy grâce auxquelles il est possible de gérer les stratégies d'accès de la ressource en question et de ses enfants.

Pour appeler l'API IAM, créez un appel avec un chemin d'URL vers une ressource. Voici un exemple d'appel qui récupère la stratégie IAM pour une version de service de l'application App Engine.

https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web/
appengine-APP_ID/services/SERVICE_ID/versions/VERSION_ID:getIamPolicy

Le tableau suivant répertorie les types de ressources acceptés, ainsi que les autorisations requises pour appeler l'API IAM.

Type de ressource Autorisations
Toutes les applications Web sécurisées par IAP dans le projet
Cela correspond à la case à cocher Tous les services Web sur la page d'administration IAP.

Chemin
https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web
iap.web.getIamPolicy

iap.web.setIamPolicy
Tous les services de backend du projet
Cette option est identique à la case à cocher Service de backend sur la page d'administration IAP.

Chemins d'accès
Champ d'application global:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute

Champ d'application régional:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Toutes les règles de transfert du projet
Autorisations pour toutes les règles de transfert du projet.

Chemins d'accès
Portée globale :
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule

Champ d'application régional:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Une application App Engine
Cette option correspond à la case à cocher Application App Engine sur la page d'administration IAP.

Chemin
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Un service de backend Compute Engine
Le chemin d'accès au service de backend peut spécifier l'ID du service de backend ou le nom du service de backend.

Chemins d'accès
Champ d'application global:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute/services/
BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME

Champ d'application régional:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME/
services/BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
Règle de transfert Compute Engine
 Autorisations pour une règle de transfert. Le chemin d'accès de la règle de transfert peut spécifier l'ID ou le nom de la règle de transfert.

Chemins d'accès
Champ d'application global:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule/services/
FORWARDING_RULE_ID or FORWARDING_RULE_NAME

Champ d'application régional:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME/
services/FORWARDING_RULE_ID or FORWARDING_RULE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
Un service d'application App Engine

Chemin
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
An App Engine service version
Compute Engine doesn't support versioning.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID/versions/VERSION_ID
iap.webServiceVersions.getIamPolicy

iap.webServiceVersions.setIamPolicy
Toutes les instances de VM sécurisées par IAP du projet
Cela revient à cocher la case Toutes les ressources de tunnel sur la page d'administration IAP.

Chemin
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel
iap.tunnel.getIamPolicy

iap.tunnel.setIamPolicy
Une zone contenant au moins une instance de VM
Cette option est identique à la case à cocher du nom de zone sur la page d'administration de l'IAP (par exemple, us-central1-c).

Chemin
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
iap.tunnelZones.getIamPolicy

iap.tunnelZones.setIamPolicy
Instance de VM individuelle

Chemin d'accès
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
/instances/INSTANCE_ID or INSTANCE_NAME
iap.tunnelInstances.getIamPolicy

iap.tunnelInstances.setIamPolicy
Région comportant au moins un groupe de destination, par exemple us-central1

Chemin d'accès
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
iap.tunnelLocations.getIamPolicy

iap.tunnelLocations.setIamPolicy
Un groupe de destination individuel

Chemin
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
/destGroups/GROUP_NAME
iap.tunnelDestGroups.getIamPolicy

iap.tunnelDestGroups.setIamPolicy

Rôles

Dans le tableau suivant, vous trouverez le récapitulatif des rôles IAM pour IAP avec une liste correspondante de toutes les autorisations propres à IAP incluses dans chaque rôle. Pour en savoir plus sur les rôles IAM, consultez la page Gérer les rôles et les autorisations.

Rôle Autorisation(s) associée(s) Description
Utilisateur de l'application Web sécurisée par IAP (roles/iap.httpsResourceAccessor) iap.webServiceVersions.accessViaIAP Permet d'accéder aux ressources App Engine et Compute Engine.
Utilisateur de tunnels sécurisés par IAP (roles/iap.tunnelResourceAccessor) iap.tunnelInstances.accessViaIAP
iap.tunnelDestGroups.accessViaIAP
Accorde l'accès aux instances de VM sécurisées par IAP.
Administrateur de stratégies IAP (roles/iap.admin) iap.web.getIamPolicy
iap.web.setIamPolicy
iap.webTypes.getIamPolicy
iap.webTypes.setIamPolicy
iap.webServices.getIamPolicy
iap.webServices.setIamPolicy
iap.webServiceVersions.getIamPolicy
iap.webServiceVersions.setIamPolicy
iap.tunnel.getIamPolicy
iap.tunnel.setIamPolicy
iap.tunnelZones.getIamPolicy
iap.tunnelZones.setIamPolicy
iap.tunnelInstances.getIamPolicy
iap.tunnelInstances.setIamPolicy
Accorde des droits d'administration IAP pour gérer les stratégies d'accès IAP des ressources.

Gérer les accès avec Google Cloud CLI

Refuser l'accès

Stratégies de refus Identity and Access Management (IAM) vous permettent de définir des garde-fous pour l'accès aux ressources Google Cloud. Pour obtenir la liste des scénarios dans lesquels les règles de refus sont utiles, consultez use-cases.

Vous pouvez créer des stratégies de refus et inclure toutes les autorisations IAP ces règles. Pour obtenir la liste des autorisations d'application intégrée que vous pouvez ajouter à une stratégie de refus, consultez la section Autorisations compatibles avec les stratégies de refus et recherchez iap.googleapis.com. Bien que les stratégies de refus puissent être appliquées n'importe quelle autorisation IAP, son efficacité dépend d'une règle de refus point de rattachement.

Certaines autorisations d'IAP ne sont efficaces qu'au niveau de leur ressource spécifique et non sur ses descendants. Exemple :iap.organizations.getSettings donne accès à getSettings au niveau de l'organisation, et non à les descendants de l'organisation. Cela signifie que les administrateurs doivent lister explicitement toutes les autorisations précises pertinentes lorsqu'ils élaborent des stratégies de refus pour refuser l'accès à un point d'attachement et à ses descendants.

Pour obtenir la liste complète de ces autorisations précises, consultez la section Autorisations compatibles avec les stratégies de refus. Toutes les autorisations sous le nom de domaine complet iap.googleapis.com et les types de ressources iap.organizations, iap.folders, iap.projects, iap.web, iap.webTypes iap.webServices et iap.webServicesVersions sont des autorisations précises.

Voici un exemple de stratégie de refus IAM refuser l'accès à l'API getSettings à un compte principal d'une organisation et à ses et leurs descendants.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/iap.organizations.getSettings",
          "iap.googleapis.com/iap.folders.getSettings",
          "iap.googleapis.com/iap.projects.getSettings",
          "iap.googleapis.com/iap.web.getSettings",
          "iap.googleapis.com/iap.webTypes.getSettings",
          "iap.googleapis.com/iap.webServices.getSettings",
          "iap.googleapis.com/iap.webServicesVersions.getSettings",
        ],
      }
    }
  ]
}

Au lieu de spécifier toutes les autorisations précises, voici un exemple de stratégie de refus IAM avec une seule autorisation : *.getSettings.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/*.getSettings",
        ],
      }
    }
  ]
}

Vous trouverez ci-dessous des méthodes plus simples pour créer une règle de refus IAM sans avoir à spécifier toutes les autorisations précises.

Action d'administrateur Autorisation dans la stratégie de refus
Refuser des autorisations IAP spécifiques sur tous les types de ressources IAP *.updateSettings
*.getSettings
*.setIamPolicy
*.getIamPolicy
Refuser toutes les autorisations IAP pour un type de ressource spécifique iap.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

Accès public

Pour permettre à tous l'accès à une ressource, attribuez un rôle à l'un des éléments suivants comptes principaux:

  • allAuthenticatedUsers : toute personne authentifiée avec un compte Google ou un compte de service.
  • allUsers : toute personne ayant accès à Internet, y compris les utilisateurs authentifiés et non authentifiés. L'en-tête signé de la requête ne comporte pas de revendication sub ou email.

Si un accès public est accordé, IAP ne génère pas de journaux Cloud Audit Logging pour la requête.

Actuellement, les liaisons qui accordent un accès public ne peuvent pas être associées à une condition. Par exemple, une stratégie rendant une ressource accessible à tous si le chemin de la requête commence par /public/ n'est pas valide.