Personnaliser IAP

Cet article explique comment personnaliser les paramètres Identity-Aware Proxy (IAP). Ces paramètres vous permettent de contrôler divers comportements, y compris :

  • la compatibilité avec GKE Enterprise et Istio sur Google Kubernetes Engine ;
  • le traitement des requêtes CORS préliminaires ;
  • la façon dont les utilisateurs sont authentifiés.
  • la page d'erreur affichée aux utilisateurs lorsque l'accès est refusé.

Gestion des paramètres

Vous pouvez afficher et mettre à jour les paramètres de l'IAP sur l'équilibreur de charge et les applications App Engine à l'aide de la console Google Cloud, de l'API IAP ou de la Google Cloud CLI.

Pour mettre à jour les paramètres de l'API IAP sur toutes les ressources, y compris les dossiers, les projets et les organisations, utilisez Google Cloud CLI ou l'API.

Pour gérer les paramètres dans IAP :

Console

Pour afficher et modifier les paramètres à l'aide de la console Google Cloud:

  1. Accédez à la page Identity-Aware Proxy.
    Accéder à la page "Identity-Aware Proxy"
  2. Recherchez votre ressource dans l'onglet APPLICATIONS.
  3. Ouvrez le menu Autres actions , puis cliquez sur Paramètres.
  4. Cliquez sur Enregistrer.

gcloud

Pour obtenir et modifier les paramètres à l'aide de la Google Cloud CLI, utilisez les commandes gcloud iap settings get et gcloud iap settings set comme indiqué ci-dessous:

  • Pour obtenir les paramètres d'un projet, d'un dossier ou d'une organisation, utilisez les commandes suivantes. Pour configurer les paramètres de l'IAP à l'aide de la console Google Cloud ou de la gcloud CLI, consultez Personnaliser l'IAP.
gcloud iap settings get --project=PROJECT-ID
gcloud iap settings get --folder=FOLDER-ID
gcloud iap settings get --organization=ORGANIZATION-ID
  • Pour obtenir les paramètres d'un type de ressource IAP spécifique dans un projet :
gcloud iap settings get --project=PROJECT-ID \
  --resource-type=RESOURCE-TYPE-NAME
  • Pour définir les paramètres d'un projet, d'un dossier ou d'une organisation, ou d'un type de ressource IAP sous un projet, créez un fichier JSON ou YAML contenant les nouveaux paramètres souhaités et spécifiez le chemin d'accès au fichier. Consultez la rubrique gcloud iap settings set pour en savoir plus :
gcloud iap settings set SETTING_FILE --project=PROJECT-ID \
  --resource-type=RESOURCE-TYPE-NAME

API

Pour obtenir et modifier les paramètres à l'aide de l'API IAP, effectuez des requêtes à l'aide des verbes HTTP GET ou PATCH au point de terminaison de ressource souhaité dans Google Cloud. Combinez le suffixe de chemin :iapSettings, un chemin d'accès à la ressource (comme détaillé dans la section Ressources et autorisations) et une méthode HTTP appropriée pour obtenir ou modifier un paramètre. Voir getIapSettings() et updateIapSettings() pour plus d'informations :

  • Pour obtenir ou définir des paramètres pour un type de ressource IAP spécifique dans un projet :
https://iap.googleapis.com/v1/projects/PROJECT-ID/iap_web/appengine-APP-ID/services/SERVICE-ID/versions/VERSION-ID:iapSettings
  • Pour obtenir ou définir les paramètres d'un projet :
https://iap.googleapis.com/v1/projects/PROJECT-ID:iapSettings
  • Pour obtenir ou définir les paramètres d'un dossier :
https://iap.googleapis.com/v1/folders/FOLDER-ID:iapSettings
  • Pour obtenir ou définir des paramètres pour une organisation :
https://iap.googleapis.com/v1/organizations/ORGANIZATION-ID:iapSettings

Comprendre le contrôle des accès aux paramètres

Des autorisations spécifiques sont requises pour afficher et modifier les paramètres IAP. Le tableau ci-dessous répertorie les autorisations requises pour lire et modifier les paramètres de chaque type de ressource. Pour obtenir une description des différents types de ressources, consultez la section Ressources et autorisations.

Ressource Autorisation d'affichage des paramètres Autorisation de modification des paramètres
Organisation iap.organizations.getSettings iap.organizations.updateSettings
Dossier iap.folders.getSettings iap.folders.updateSettings
Projet iap.projects.getSettings iap.projects.updateSettings
Tous les services Web iap.web.getSettings iap.web.updateSettings
Type de service Web iap.webTypes.getSettings iap.webTypes.updateSettings
Service Web iap.webServices.getSettings iap.webServices.updateSettings
Version de service Web iap.webServiceVersions.getSettings iap.webServiceVersions.updateSettings

Le rôle Administrateur de paramètres IAP (roles/iap.settingsAdmin) accorde toutes ces autorisations, tout comme Éditeur de projet (roles/editor). Le rôle Lecteur de projet (roles/viewer) accorde toutes les autorisations getSettings.

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

Personnaliser les paramètres IAP

IAP fournit les paramètres de personnalisation suivants :

Champ Description
access_settings.cors_settings.allow_http_options Permet de contrôler la requête HTTP OPTIONS (requête CORS préliminaire).
access_settings.oauth_settings.login_hint Simplifie la connexion aux utilisateurs d'un domaine G Suite.
application_settings.access_denied_page_settings.access_denied_page_uri Affiche une page d'erreur personnalisée lorsque l'accès est refusé.
application_settings.csm_settings.rctoken_aud Émettre des jetons RCToken GKE Enterprise et Istio
access_settings.gcip_settings S'authentifie avec Identity Platform.
access_settings.ReauthSettings Définissez une règle de réauthentification. Pour en savoir plus, consultez Configurer la réauthentification.

Vous pouvez appliquer les paramètres au niveau du projet ou à n'importe quel niveau de ressource IAP inférieur.

Vous pouvez configurer les paramètres des ressources IAP Web, mais pas les ressources accessibles à l'aide du service IAP pour le transfert TCP.

En utilisant access_settings.cors_settings.allow_http_options comme exemple, vous pouvez configurer les paramètres de personnalisation comme suit :

YAML

access_settings:
  cors_settings:
    allow_http_options: "false"

JSON

{
  "access_settings": {
    "cors_settings": {
      "allow_http_options": "false"
    }
  }
}

Les sections suivantes fournissent plus d'informations sur chaque paramètre.

Requêtes HTTP OPTIONS (requête CORS préliminaire)

Champ Valeur par défaut
access_settings.cors_settings.allow_http_options false

Les règles de même origine du Web empêche les navigateurs d'envoyer des requêtes AJAX entre des sites Web. Par défaut, le code JavaScript d'une page diffusée depuis une origine ne peut pas utiliser AJAX pour envoyer une requête à une application sécurisée avec IAP hébergée sur une origine différente.

Dans certains cas, les navigateurs essaient automatiquement d'exécuter une requête, mais ils suppriment le contenu de la réponse s'il n'inclut pas d'en-tête Access-Control-Allow-Origin. Pour autoriser ce type de requête, incluez cet en-tête dans les réponses de votre application.

Dans d'autres cas, les navigateurs envoient une requête CORS préliminaire, un type de requête HTTP OPTIONS, avant d'envoyer la requête d'origines multiples. Si votre application n'envoie pas une réponse de préliminaire appropriée (contenant les en-têtes de réponse Access-Control-* obligatoires), les navigateurs bloquent la requête avec une erreur. En outre, étant donné que les requêtes préliminaires ne sont pas envoyées avec des identifiants d'authentification (par exemple, un cookie de session IAP), IAP répond également par une erreur.

Pour autoriser ces requêtes :

  1. Ajoutez du code à l'application qui répond aux requêtes OPTIONS.

  2. Définissez le paramètre access_settings.cors_settings.allow_http_options sur true pour qu'IAP transmette les requêtes OPTIONS à votre application.

S'authentifier à l'aide d'un domaine Google Workspace

Champ Valeur par défaut
access_settings.oauth_settings.login_hint ""

Si seuls les membres d'un domaine Google Workspace spécifique utilisent votre application, vous pouvez configurer IAP pour optimiser le flux d'authentification. Cela présente plusieurs avantages :

  • Si un utilisateur est connecté avec plusieurs comptes, tels qu'un compte professionnel et un compte personnel, le système sélectionne automatiquement son compte professionnel au lieu d'afficher l'UI de sélection du compte.

  • Si un utilisateur n'est pas connecté à son compte Google, l'UI de connexion remplit automatiquement la partie domaine de son adresse e-mail (par exemple, l'utilisateur ne doit saisir que alice au lieu de alice@example.com).

  • Si votre domaine Google Workspace est configuré pour utiliser un fournisseur d'authentification unique tiers, le système affiche cette page de connexion personnalisée au lieu de celle de Google.

Pour activer ce comportement, définissez la valeur de access_settings.oauth_settings.login_hint sur le nom de votre domaine Google Workspace (par exemple, example.com). La propriété du domaine doit avoir été validée : vous ne pouvez pas utiliser des domaines DNS Internet arbitraires que vous possédez. (Les domaines ajoutés en tant que domaine principal ou secondaire Google Workspace sont validés et peuvent donc être utilisés ici.)

Si vous devez authentifier des utilisateurs externes au domaine, vous pouvez utiliser l'authentification programmatique.

Pour plus d'informations, consultez la documentation OpenID Connect.

Définir une page d'erreur "Accès refusé" personnalisée

Champ Valeur par défaut
application_settings.access_denied_page_settings.access_denied_page_uri ""

Vous pouvez définir une URL dans ce champ qui redirige les utilisateurs vers une page personnalisée au lieu de la page d'erreur IAP par défaut lorsque l'accès est refusé par une stratégie.

Vous pouvez également intégrer l'URL de dépannage à l'aide de cette fonctionnalité. Pour en savoir plus, consultez Activer l'URL de dépannage pour votre page d'erreur "Accès refusé" personnalisée.

Émettre des ID de maillage de jeton RCToken GKE Enterprise et Istio

Champ Valeur par défaut
application_settings.csm_settings.rctoken_aud ""

Si vous utilisez Istio sur GKE, vous pouvez configurer IAP pour produire un jeton RCToken compatible avec Istio. Si ce champ est défini sur une chaîne non vide, IAP ajoute un en-tête HTTP Ingress-Authorization contenant un jeton RCToken. La revendication aud est définie sur la valeur du champ.

Procéder à l'authentification avec Identity Platform

Champ Valeur par défaut
access_settings.gcip_settings null

Par défaut, IAP utilise le système d'identité natif de Google. Si ce champ est défini, IAP utilise Identity Platform à la place pour authentifier les utilisateurs.

Comprendre l'héritage des paramètres dans la hiérarchie des ressources

IAP évalue toujours les requêtes pour une version de service Web spécifique. Ce type de ressource se trouve au niveau le plus bas de la hiérarchie des ressources, qui se présente comme suit :

- Organization
  - Folder
    - Project
      - All web services
        - Web service type
          - Web service
            - Web service version

Pour déterminer les paramètres à appliquer à une version de service Web, IAP commence par un ensemble de valeurs par défaut, puis parcourt la hiérarchie de haut en bas. Les paramètres sont appliqués à mesure qu'ils sont détectés. Par conséquent, les valeurs définies à un niveau inférieur remplacent celles définies à un niveau supérieur. Par exemple, si access_settings.cors_settings.allow_http_options est défini sur true au niveau du projet, mais sur false au niveau du service, la valeur effective est false.

Pour en savoir plus sur la hiérarchie des ressources IAP, consultez la section Ressources et autorisations.