Activer IAP pour Cloud Run

Cette page explique comment sécuriser un service Cloud Run avec Identity-Aware Proxy (IAP).

Limitations connues

  • Les services Cloud Run pour lesquels HTTP/2 est activé derrière un équilibreur de charge d'application classique sécurisé par IAP rencontrent une boucle de redirection infinie lors de la requête. Google recommande d'utiliser un équilibreur de charge d'application externe global lorsque vous utilisez un service HTTP/2 sécurisé avec IAP. Pour en savoir plus, consultez Modes d'équilibreur de charge.

  • IAP ne sécurise pas le domaine fourni par Cloud Run pour un service déployé. Pour vous assurer qu'IAP est le seul à pouvoir accéder au service, utilisez l'authentification IAM sur le service Cloud Run. Pour autoriser IAP à accéder au service Cloud Run, attribuez le rôle de compte de service IAP service-[PROJECT_NUMBER]@gcp-sa-iap.iam.gserviceaccount.com avec le rôle Demandeur Cloud Run. IAP génère un jeton d'ID et l'utilise pour s'authentifier auprès de Cloud Run à l'aide de l'en-tête X-Serverless-Authorization.

  • IAP s'authentifie auprès de Cloud Run à l'aide de l'en-tête X-Serverless-Authorization. Cloud Run transmet cet en-tête à votre service après avoir supprimé sa signature. Si votre service est conçu pour transférer la requête à un autre service Cloud Run nécessitant une authentification IAM, mettez d'abord à jour votre service pour qu'il supprime cet en-tête.

  • IAP n'est pas compatible avec Cloud CDN.

Avant de commencer

Pour activer IAP pour Cloud Run, vous avez besoin des éléments suivants:

IAP authentifie les utilisateurs à l'aide d'un client OAuth géré par Google. Seuls les utilisateurs de l'organisation peuvent accéder à l'application compatible avec IAP. Si vous souhaitez autoriser l'accès à des utilisateurs extérieurs à votre organisation, consultez la section Activer IAP pour les applications externes.

Activer IAP

Console

Le client OAuth géré par Google n'est pas disponible lorsque vous activez IAP à l'aide de la console Google Cloud.

Si vous n'avez pas configuré l'écran de consentement OAuth de votre projet, vous êtes invité à le faire. Pour configurer votre écran de consentement OAuth, consultez la section Configurer votre écran de consentement OAuth.

Configurer l'accès à IAP

  1. Accédez à la page Identity-Aware Proxy.
  2. Sélectionnez le projet que vous souhaitez sécuriser avec IAP.
  3. Sous APPLICATIONS, cochez la case correspondant au service de backend d'équilibreur de charge auquel vous souhaitez ajouter des membres.
  4. Dans le panneau d'informations situé à droite, cliquez sur Ajouter un membre.
  5. Dans la boîte de dialogue Ajouter des membres, saisissez les comptes des groupes ou des personnes qui doivent disposer du rôle Utilisateur de l'application Web sécurisée par IAP pour le projet. Les types de comptes suivants peuvent être ajoutés en tant que membres :

    • Compte Google : utilisateur@gmail.com : il peut également s'agir d'un compte Google Workspace, par exemple utilisateur@google.com, ou d'un autre domaine Workspace.
    • Groupe Google : admins@googlegroups.com
    • Compte de service : server@example.gserviceaccount.com
    • Domaine Google Workspace : example.com
  6. Sélectionnez Cloud IAP > Utilisateur de l'application Web sécurisée par IAP dans la liste déroulante Rôles.

  7. Cliquez sur Enregistrer.

Activer IAP

  1. Sur la page IAP, sous APPLICATIONS, recherchez le service de backend d'équilibreur de charge auquel vous souhaitez restreindre l'accès. Pour activer IAP pour une ressource, cliquez sur le bouton IAP. Pour activer IAP :
    • Au moins un protocole de la configuration de l'interface de l'équilibreur de charge doit être HTTPS. En savoir plus sur la configuration d'un équilibreur de charge
    • Vous devez disposer des autorisations compute.backendServices.update, clientauthconfig.clients.create et clientauthconfig.clients.getWithSecret. Ces autorisations sont accordées par des rôles (par exemple, Éditeur de projet). Pour en savoir plus, consultez la page Gérer l'accès aux ressources sécurisées par IAP.
  2. Dans la fenêtre Activer le service IAP qui s'affiche, cliquez sur Activer pour confirmer qu'IAP sécurise votre ressource. Une fois IAP activé, des identifiants de connexion sont requis pour toutes les connexions à votre équilibreur de charge. Seuls les comptes disposant du rôle Utilisateur de l'application Web sécurisée par IAP sur le projet y ont accès.
  3. Suivez les instructions de la section Contrôle des accès avec IAM pour autoriser IAP à envoyer du trafic vers le service de backend Cloud Run.

    • Compte principal: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
    • Rôle: Demandeur Cloud Run

gcloud

  1. Si vous ne l'avez pas déjà fait, créez un compte de service en exécutant la commande suivante. Si vous avez déjà créé un compte de service, l'exécution de la commande ne crée pas de comptes de service en double.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Accordez l'autorisation de demandeur au compte de service créé à l'étape précédente en exécutant la commande suivante.
    gcloud run services add-iam-policy-binding [SERVICE-NAME] \
    --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com'  \
    --role='roles/run.invoker'
    
  3. Activez IAP en exécutant la commande à l'échelle mondiale ou régionale, selon que le service de backend de votre équilibreur de charge est global ou régional. Utilisez l'ID client et le code secret OAuth de l'étape précédente.

    Champ d'application global

    gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
    

    Champ d'application régional

    gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
    
    Remplacez les éléments suivants :

    • BACKEND_SERVICE_NAME : nom du service de backend.
    • REGION_NAME: région dans laquelle vous souhaitez activer IAP.

Après avoir activé IAP, vous pouvez utiliser la Google Cloud CLI pour manipuler une stratégie d'accès IAP à l'aide du rôle Identity and Access Management roles/iap.httpsResourceAccessor. Pour en savoir plus, consultez la page Gérer les rôles et les autorisations.

Configurer Cloud Run pour limiter l'accès

Vous pouvez configurer votre service Cloud Run pour n'autoriser l'accès qu'aux clients internes et à l'équilibreur de charge externe, ce qui bloque toutes les requêtes directes du réseau Internet public.

Suivez les étapes de la section Restreindre l'entrée pour Cloud Run pour configurer le paramètre d'entrée de votre service Cloud Run sur Interne et Cloud Load Balancing.

Résoudre les erreurs

 The IAP service account is not provisioned 
Si vous rencontrez cette erreur, cela signifie que vous essayez d'activer IAP sur un service Cloud Run via la gcloud CLI. La configuration d'IAP via la gcloud CLI inclut l'étape supplémentaire de provisionnement d'un compte de service IAP dans votre projet, à l'aide de la commande suivante : gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
 Your client does not have permission to get URL from this server 
  • IAP utilise les autorisations du compte de service IAP pour appeler votre service Cloud Run. Assurez-vous d'avoir attribué le rôle Demandeur Cloud Run au compte de service suivant: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com .

  • Si vous avez attribué le rôle Demandeur Cloud Run au compte de service précédent et que vous rencontrez toujours ce problème, redéployez votre service Cloud Run.

Le compte de service IAP n'a pas besoin de l'autorisation run.routes.invoke

Lors de l'exécution d'IAP avec la version preview de Cloud Run, Cloud Run n'a pas effectué la vérification d'autorisation run.routes.invoke pour les appels d'IAP utilisant le rôle Demandeur Cloud Run. En phase de disponibilité générale, Cloud Run effectue cette vérification des autorisations.

Pour éviter les modifications destructives, certains projets clients qui dépendaient de ce comportement pendant la phase preview ont été placés dans une liste d'autorisation afin que l'autorisation ne soit pas vérifiée. Contactez l'assistance Cloud Run pour supprimer ces projets de la liste d'autorisation "Preview uniquement".

Étapes suivantes

Pour configurer IAP pour Cloud Run avec Terraform, explorez un exemple de code Terraform.