Configurer IAP avec la fédération d'identité de personnel

Cette page explique comment configurer Identity-Aware Proxy (IAP) pour utiliser la fédération des identités des employés.

Lorsque vous configurez la fédération des identités des employés avec IAP, vous pouvez utiliser un fournisseur d'identité (IdP) externe pour authentifier et autoriser du personnel (un groupe d'utilisateurs tels que des employés, des partenaires et des sous-traitants) à accéder de manière sécurisée aux services déployés sur Google Cloud site ou dans le cloud à l'aide d'Identity and Access Management (IAM).

La configuration d'IAP avec la fédération des identités des employés vous permet d'effectuer les opérations suivantes concernant vos applications sécurisées par IAP :

  • Rediriger un utilisateur final vers un IdP externe, tel qu'Okta, pour qu'il se connecte.
  • Configurer une session de connexion d'une durée comprise entre 15 minutes et 12 heures.
  • Autoriser uniquement des utilisateurs finaux ou des ensembles d'utilisateurs finaux spécifiques dans un IdP à accéder à votre application.
  • Spécifier le contexte dans lequel un utilisateur final peut accéder à une application. Par exemple, n'autoriser l'accès qu'à une heure spécifique de la journée.

Vous pouvez utiliser IAP avec la fédération des identités des employés sur toutes les ressources et tous les équilibreurs de charge existants compatibles avec IAP.

Configurer IAP avec la fédération des identités des employés pour une application

La configuration d'IAP avec la fédération des identités des employés comprend les tâches principales suivantes :

  1. Configurer un pool d'employés et un fournisseur.
  2. Créer un ID client et un code secret OAuth.
  3. Activer IAP et le configurer pour qu'il utilise la fédération des identités des employés.

Configurer un pool d'employés et un fournisseur

Pour configurer un pool d'employés et un fournisseur, suivez les instructions de l'un des fournisseurs suivants :

Lorsque vous définissez la durée de la session, consultez Gérer les sessions IAP avec la fédération des identités des employés.

Si vous souhaitez mapper une adresse e-mail d'un IdP tiers à Google Cloud, vous devez ajouter un mappage d'attribut dans votre fournisseur de pool d'employés pour google.email. Exemple : google.email=assertion.email.

Créer un ID client et un code secret OAuth

  1. Suivez les instructions pour créer un ID client et un code secret OAuth dans un projet de la même organisation que le pool d'employés que vous utiliserez pour cette configuration. Le projet ne doit pas nécessairement être le même que celui dans lequel se trouve la ressource sécurisée par IAP. Lorsque vous créez l'ID client et le code secret OAuth, procédez comme suit :

    1. Utilisez un espace réservé pour l'URI de redirection lorsque vous créez l'ID client. Une fois l'ID client créé, exécutez describe un client OAuth pour obtenir le clientID généré.

    2. Lorsque vous disposez du clientID, exécutez update un client OAuth pour mettre à jour allowed-redirect-uris comme suit : https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      CLIENT_ID est le clientID récupéré à l'étape précédente.

    3. Une fois le code secret du client créé, exécutez describe les identifiants d'un client OAuth pour obtenir le clientSecret généré.

    Enregistrez le clientId et le clientSecret, car vous en aurez besoin lors des étapes ultérieures.

Activer IAP pour utiliser la fédération des identités des employés

Pour activer IAP avec la fédération des identités des employés, procédez comme suit.

Activer IAP

Activez IAP sur la ressource.

Console

  1. Dans la Google Cloud console, ouvrez la page IAP.
    Accéder à la page IAP
  2. Sélectionnez un projet. Le projet doit se trouver dans la même organisation que le pool d'employés que vous avez créé précédemment. Il n'est pas nécessaire que le projet soit celui dans lequel vous avez créé l'ID client et le code secret OAuth.
  3. Cliquez sur l'onglet Applications, puis recherchez l'application dont vous souhaitez limiter l'accès à l'aide d'IAP.
  4. Dans la colonne "IAP", basculez le bouton sur Activer.

gcloud

Pour utiliser gcloud CLI afin d'activer IAP, suivez les procédures du service applicable :

API

  1. Créez un fichier settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. Activez IAP sur App Engine.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
    

    Pour activer IAP sur Compute Engine, utilisez l'URL suivante : https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.

Modifier les paramètres IAP

Pour configurer IAP afin qu'il utilise la fédération des identités des employés, vous devez configurer les paramètres suivants :

  • WorkforceIdentitySettings : ID client et code secret OAuth créés précédemment.
  • IdentitySources : source d'identité.

Pour en savoir plus, consultez les API IAP.

gcloud

  1. En vous basant sur l'exemple suivant, créez un fichier iap_settings.yaml.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.yaml
    access_settings:
      identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"]
      workforce_identity_settings:
        workforce_pools: ["$WORKFORCE_POOL_NAME"]
        oauth2:
          client_id: "$CLIENT_ID"
          client_secret: "$CLIENT_SECRET"
    EOF
    
  2. Exécutez la commande suivante pour modifier les paramètres IAP de votre ressource.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    Remplacez les éléments suivants :

    • PROJECT : ID du projet.
    • RESOURCE_TYPE : type de ressource IAP. Le type de ressource doit être cloud-run (aperçu),app-engine, iap_web, compute, organization, ou folder.

      Pour le type de ressource cloud-run, utilisez l'indicateur --region pour indiquer la région dans laquelle votre service Cloud Run est déployé.

    • SERVICE : nom du service. Ce paramètre est facultatif pour app-engine et compute.

    Pour en savoir plus sur la commande, consultez gcloud iap settings set.

API

  1. En vous basant sur l'exemple suivant, créez un fichier de paramètres iap_settings.json.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.json
    {
       "access_settings": {
         "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"],
         "workforce_identity_settings": {
           "workforce_pools": ["$WORKFORCE_POOL_NAME"],
           "oauth2": {
             "client_id": "$CLIENT_ID",
             "client_secret": "$CLIENT_SECRET",
           }
        }
      }
    }
    EOF
    
  2. Utilisez gcloud CLI pour obtenir le nom de la ressource, puis copiez le RESOURCE_NAME à partir du résultat, car vous en aurez besoin à l'étape suivante.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    Remplacez les éléments suivants :

    • PROJECT : ID du projet.
    • RESOURCE_TYPE : type de ressource IAP. Le type de ressource doit être appengine, iap_web, compute, organization, folder, ou cloud_run-$REGION (aperçu), où $REGION est la région dans laquelle votre service Cloud Run est déployé.
    • SERVICE : nom du service. Ce paramètre est facultatif pour app-engine et compute.
  3. Remplacez RESOURCE_NAME dans la commande suivante par le RESOURCE_NAME de l'étape précédente.

    curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
    

Accorder l'accès aux ressources sécurisées par IAP

Pour accéder à une ressource sécurisée par IAP, les utilisateurs finaux doivent disposer du rôle Utilisateur de l'application Web sécurisée par IAP sur la ressource. Vous pouvez accorder le rôle Utilisateur de l'application Web sécurisée par IAP à un seul utilisateur (compte principal) ou à un ensemble d'utilisateurs (ensemble de comptes principaux, qui correspond à un groupe, à un attribut spécifique ou à un pool entier d'utilisateurs).

L'accès illimité aux ressources sécurisées par IAP n'est pas pris en charge.

Console

  1. Dans la Google Cloud console, ouvrez la page IAP.
    Accéder à la page IAP
  2. Sélectionnez la ressource que vous souhaitez sécuriser avec IAP.
  3. Cliquez sur Ajouter un compte principal, puis ajoutez les identifiants de compte principal des groupes ou des personnes auxquels vous souhaitez accorder un rôle IAM pour la ressource.
  4. Dans Attribuer des rôles , sélectionnez Utilisateur de l'application Web sécurisée par IAP.
  5. Cliquez sur Ajouter.

gcloud

Exécutez la commande ci-dessous.

gcloud iap web add-iam-policy-binding \
    --member=PRINCIPAL_IDENTIFIER \
    --role='roles/iap.httpsResourceAccessor' \
    --project=PROJECT_ID \
    --resource-type=RESOURCE_TYPE \
    --service=SERVICE \
    --condition=CONDITION

Remplacez les éléments suivants :

  • PRINCIPAL_IDENTIFIER: The principal identifiers.
  • PROJECT_ID : ID du projet.
  • RESOURCE_TYPE : type de ressource IAP, qui peut être app-engine ou backend-services.
  • SERVICE : (facultatif) nom du service.
  • CONDITION: (facultatif) conditions IAM. Voici un exemple de condition configurée avec des niveaux d'accès :
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access in weekdays

API

Cette méthode n'est pas recommandée, car elle affecte l'ensemble de la stratégie IAM d'une ressource. Une erreur peut supprimer la stratégie d'une ressource.

  1. Obtenez les liaisons de stratégie IAM existantes.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d {} \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
    

    Remplacez le RESOURCE_NAME par le RESOURCE_NAME que vous avez obtenu lors d'une étape précédente.

  2. Dans le fichier iam_policy_bindings.json que vous avez obtenu à l'étape précédente, supprimez les lignes de version et d'etag, puis ajoutez la liaison que vous souhaitez ajouter pour l'identifiant de compte principal. Pour en savoir plus, consultez Comprendre les stratégies d'autorisation.

    {
      "bindings": [
        {
          // existing bindings
        },
        {
          "role": "roles/iap.httpsResourceAccessor",
          "members": [
          "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject"
          ],
          "condition": {
            "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels",
            "title": "iap-test-access-level",
            "description": "only access in week days"
          }
        }
      ]
    }
    
  3. Modifiez les liaisons de stratégie IAM.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{"policy":$(cat iam_policy_bindings.json)}" \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
    

    Remplacez le RESOURCE_NAME par le RESOURCE_NAME que vous avez obtenu lors d'une étape précédente.

Pour en savoir plus, consultez GetIamPolicy et SetIamPolicy.

(Facultatif) Configurer l'accès contextuel

Si vous le souhaitez, vous pouvez configurer des règles d'accès contextuel pour une autorisation avancée.

Pour configurer des niveaux d'accès, consultez Créer et appliquer des niveaux d'accès. Les niveaux d'accès basés sur les informations de l'appareil ne sont pas disponibles lorsque vous utilisez la fédération des identités des employés. Vous pouvez toujours utiliser des niveaux d'accès basés sur le contexte de la requête avec des conditions sur l'adresse IP, ainsi que sur l'heure et la date.

Authentification automatisée

IAP est compatible avec l'authentification JWT de compte de service pour les applications configurées avec la fédération des identités des employés. Pour obtenir des instructions, consultez S'authentifier avec un jeton JWT de compte de service.

Limites lorsque vous utilisez des pools d'employés

  • Pour chaque application compatible avec IAP, un seul pool d'employés peut être configuré, et ce pool ne peut contenir qu'un seul fournisseur.
  • Le pool d'employés, l'ID client et le code secret OAuth, ainsi que les applications compatibles avec IAP doivent tous se trouver dans la même organisation.
  • Les niveaux d'accès aux informations liées à l'appareil ne sont pas pris en charge.
  • Seules les configurations de paramètres IAP suivantes sont prises en charge :
  • L'accès automatisé avec la fédération des identités des employés n'est compatible qu'avec les comptes de service Google.

Dépannage

Pour obtenir des informations sur le dépannage, consultez Dépannage et questions fréquentes.