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

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é externe (IdP) pour authentifier et autoriser un groupe d'utilisateurs, tel que des employés, des partenaires et des sous-traitants, à l'aide d'Identity and Access Management (IAM), afin que les utilisateurs puissent accéder de manière sécurisée aux services déployés sur Google Cloud ou sur site.

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:

  • Redirigez un utilisateur final vers un fournisseur d'identité externe, comme Okta, pour qu'il se connecte.
  • Configurez une session de connexion entre 15 minutes et 12 heures.
  • N'autorisez que des utilisateurs finaux ou des ensembles d'utilisateurs finaux spécifiques dans un IdP à accéder à votre application.
  • Spécifiez le contexte dans lequel un utilisateur final peut accéder à une application. Par exemple, n'autorisez l'accès qu'à une heure précise 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éez un ID client et un code secret OAuth.
  3. Activer IAP et le configurer pour utiliser 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 la page Fédération des identités des employés. Lorsque vous définissez la durée des sessions, consultez la page Gérer IAP avec des sessions de fédération des identités des employés.

Si vous souhaitez mapper une adresse e-mail d'un fournisseur d'identité tiers vers Google Cloud, vous devez ajouter un mappage d'attributs à 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 code secret et un ID client OAuth sous un projet dans la même organisation que le pool d'employés que vous utiliserez pour cette configuration. Le projet ne doit pas nécessairement être celui dans lequel se trouve la ressource sécurisée par IAP. Lors de la création de l'ID client et du code secret OAuth, procédez comme suit:

    1. Lorsque vous créez l'ID client, utilisez un espace réservé pour l'URI de redirection. Après avoir créé l'ID client, 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 la valeur clientID récupérée à l'étape précédente.

    3. Après avoir créé le code secret du client, exécutez describe des identifiants client OAuth pour obtenir le clientSecret généré.

    Enregistrez les éléments clientId et clientSecret, car vous en aurez besoin ultérieurement.

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

Console

  1. Dans la console Google Cloud, 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 ne doit pas nécessairement s'agir du projet 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 activer IAP à l'aide de la gcloud CLI, suivez les procédures applicables au service applicable:

API

  1. Créez un fichier settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. Activer 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.

Mettre à jour les paramètres IAP

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

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

Pour en savoir plus, consultez la page sur les API IAP.

gcloud

  1. En utilisant l'exemple suivant comme référence, 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 mettre à jour 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 app-engine, iap_web, compute, organization ou folder.
    • SERVICE : le nom du service. Cette opération est facultative pour app-engine et compute.

    Pour plus d'informations sur la commande, consultez gcloud iap settings set.

API

  1. En utilisant l'exemple suivant comme référence, 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 la gcloud CLI pour obtenir le nom de la ressource, puis copiez l'RESOURCE_NAME à partir de la sortie, 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 app-engine, iap_web, compute, organization ou folder.
    • SERVICE : le nom du service. Cette opération est facultative pour app-engine et compute.
  3. Dans la commande suivante, remplacez RESOURCE_NAME par la valeur 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 attribuer le rôle "Utilisateur de l'application Web sécurisée par IAP" à un seul utilisateur (compte principal) ou à un ensemble d'utilisateurs (ensemble principal, qui correspond à un groupe, à un attribut spécifique ou à tout un groupe d'utilisateurs).

L'accès non restreint aux ressources sécurisées par IAP n'est pas accepté.

Console

  1. Dans la console Google Cloud, ouvrez la page "IAP".
    Accéder à la page "IAP"
  2. Sélectionnez le projet que vous souhaitez sécuriser avec IAP.
  3. Cliquez sur Ajouter un compte principal, puis ajoutez les identifiants principaux des groupes ou des individus auxquels vous souhaitez attribuer 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 suivante :

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: identifiants principaux
  • PROJECT_ID : ID du projet
  • RESOURCE_TYPE: type de ressource IAP, qui peut être app-engine ou backend-services.
  • SERVICE : le nom du service. Cette option est facultative lorsque resource-type est défini sur app-engine.
  • 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 a un impact sur 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 RESOURCE_NAME par le RESOURCE_NAME obtenu lors d'une étape précédente.

  2. Dans le fichier iam_policy_bindings.json obtenu à l'étape précédente, supprimez les lignes de version et etag, puis ajoutez la liaison que vous souhaitez ajouter pour l'identifiant de compte principal. Pour en savoir plus, consultez la page Comprendre les règles 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. Mettez à jour 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 RESOURCE_NAME par le RESOURCE_NAME obtenu lors d'une étape précédente.

Pour en savoir plus, consultez GetIamPolicy et SetIamPolicy.

(Facultatif) Configurer l'accès contextuel

Vous pouvez éventuellement configurer des règles d'accès contextuel pour une autorisation avancée.

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

Limites liées à l'utilisation de pools d'employés

  • IAP n'accepte qu'un seul pool d'employés, qui 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 acceptés.
  • Seules les configurations de paramètres IAP suivantes sont acceptées :
  • L'accès programmatique avec la fédération des identités des employés n'est pas disponible.