Activer l'IAP pour Cloud Run

Il existe deux façons d'activer l'API Access Point pour vos services Cloud Run : directement sur un service Cloud Run ou sur le service de backend qui fait face aux services Cloud Run.

Nous vous recommandons d'activer l'API IAP directement sur Cloud Run. Cela protège le point de terminaison run.app et, si vous configurez un équilibreur de charge, le point de terminaison de l'équilibreur de charge.

Si vous avez besoin d'une gestion centralisée des accès ou si vous souhaitez acheminer le trafic vers plusieurs régions, suivez les procédures suivantes.

Cette page explique comment sécuriser un service Cloud Run avec un IAP à partir d'un service de backend ou d'un équilibreur de charge. Si vous exécutez Cloud Run dans plusieurs régions associées au même service de backend global d'équilibrage de charge, suivez les instructions de cette page pour configurer l'IAP une fois pour le service de backend.

Limitations connues

  • Lorsque vous activez l'IAP sur un équilibreur de charge, il ne sécurise le trafic que via l'équilibreur de charge et non avec le trafic qui pourrait atteindre le service Cloud Run via son URL run.app. Pour n'autoriser que le trafic autorisé par l'IAP, consultez Configurer Cloud Run pour limiter l'accès.

  • 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 enlevé sa signature. Si votre service est conçu pour transférer la requête vers un autre service Cloud Run qui nécessite une authentification IAM, mettez à jour votre service pour supprimer d'abord cet en-tête.

  • IAP n'est pas compatible avec Cloud CDN.

  • IAP augmentent la latence. Activez IAP uniquement pour les instances qui ne sont pas sensibles à la latence.

Avant de commencer

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

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

Activer l'IAP à partir d'un service de backend ou d'un équilibreur de charge

Pour activer IAP à partir d'IAP derrière un service de backend ou un équilibreur de charge, suivez les instructions ci-dessous.

Console

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

Si vous n'avez pas configuré l'écran d'autorisation OAuth de votre projet, vous êtes invité à le faire. Pour configurer votre écran d'autorisation OAuth, consultez 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 à côté du service de backend de l'équilibreur de charge auquel vous souhaitez ajouter des membres.
  4. Dans le panneau de droite, cliquez sur Ajouter un compte principal.
  5. Dans la boîte de dialogue Ajouter un compte principal, saisissez les comptes des groupes ou des personnes auxquels vous souhaitez accorder le 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, tel que utilisateur@google.com ou un autre domaine Workspace.
    • Groupe Google : admins@googlegroups.com
    • Compte de service: server@example.iam.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 (APPLICATIONS), recherchez le service de backend de l'équilibreur de charge auquel vous souhaitez restreindre l'accès. Pour activer IAP pour une ressource, cliquez sur le bouton d'activation/de désactivation IAP. Pour activer IAP :
    • Au moins un protocole de la configuration de l'interface d'équilibrage de charge doit correspondre à HTTPS. En savoir plus sur la configuration d'un équilibreur de charge
    • Vous avez besoin 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 IAP qui s'affiche, cliquez sur Activer pour confirmer que vous souhaitez 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 l'IAP à envoyer du trafic au service Cloud Run backend.

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

    Le compte de service IAP est créé lorsque l'IAP est activé. Si le compte de service IAP ne figure pas dans la liste des principaux, vous pouvez le créer en exécutant la commande gcloud suivante:

    gcloud beta services identity create
        --service=iap.googleapis.com
        --project=PROJECT_ID
    

gcloud

  1. Si vous ne l'avez pas déjà fait dans le projet, créez l'agent de service IAP en exécutant la commande suivante. Si vous avez déjà créé l'agent de service, l'exécution de la commande ne le duplique pas.
    gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
  2. Accordez l'autorisation d'appelant 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 l'IAP en exécutant la commande à portée globale ou régionale, selon que votre service de backend d'é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.

Une fois que vous avez activé IAP, vous pouvez utiliser la Google Cloud CLI pour modifier une stratégie d'accès IAP à l'aide du rôle IAM roles/iap.httpsResourceAccessor. Pour en savoir plus, consultez la section Gérer l'accès aux ressources sécurisées par IAP.

Terraform

  1. Si vous ne l'avez pas déjà fait, créez l'agent de service IAP dans un projet en exécutant la commande suivante. Si vous avez déjà créé l'agent de service, l'exécution de la commande ne le duplique pas.
    resource "google_project_service" "project" {
      project = "your-project-id"
      service = "iap.googleapis.com"
    }
    
  2. Accordez l'autorisation d'appelant à l'agent de service créé à l'étape précédente en exécutant la commande suivante.
    resource "google_cloud_run_service_iam_binding" "binding" {
      location = google_cloud_run_v2_service.default.location
      service  = google_cloud_run_v2_service.default.name
      role = "roles/run.invoker"
      members = [
        "serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com",
      ]
    }
    
  3. Activez l'IAP en exécutant la commande globale ou régionale, en fonction de votre équilibreur de charge. Utilisez l'ID client et le code secret OAuth de l'étape précédente.

    • Champ d'application global

      resource "google_compute_backend_service" "default" {
        name                  = "tf-test-backend-service-external"
        protocol              = "HTTPS"
        load_balancing_scheme = "EXTERNAL_MANAGED"
        iap {
          enabled              = true
          oauth2_client_id     = "abc"
          oauth2_client_secret = "xyz"
        }
      }
      

    • Champ d'application régional

      resource "google_compute_region_backend_service" "default" {
        name                  = "tf-test-backend-service-external"
        protocol              = "HTTPS"
        load_balancing_scheme = "EXTERNAL_MANAGED"
        iap {
          enabled              = true
          oauth2_client_id     = "abc"
          oauth2_client_secret = "xyz"
        }
      }
      

Configurer Cloud Run pour limiter l'accès

Pour empêcher le trafic d'être acheminé via l'URL run.app par défaut d'un service Cloud Run, désactivez l'URL par défaut. Sinon, configurez vos paramètres d'entrée pour restreindre l'entrée réseau pour Cloud Run.

Résoudre les erreurs

Autorisation refusée pour accéder à Cloud Run

 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.

L'échec de l'agent de service entraîne une erreur IAM définie

Activer l'IAP pour la première fois dans un nouveau projet peut entraîner l'erreur suivante:

Setting IAM permissions failed

Cela est dû à l'échec de l'agent de service Cloud Run. Pour résoudre le problème, réactivez l'IAP ou définissez manuellement la stratégie IAM.

Impossible de configurer l'IAP via gcloud CLI

 The IAP service account is not provisioned 

Si cette erreur s'affiche, exécutez la commande suivante:

gcloud beta services identity create --service=iap.googleapis.com --project=[PROJECT_ID]

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

Lors de la version Preview de l'API IAP avec Cloud Run, Cloud Run n'effectuait pas la vérification des autorisations run.routes.invoke pour les appels provenant de l'API IAP qui utilisent le rôle de demandeur Cloud Run. Avec la disponibilité générale (DG), Cloud Run effectue cette vérification d'autorisation.

Pour éviter les modifications non compatibles, certains projets client qui dépendaient de ce comportement pendant la version Preview ont été ajoutés à 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 "Aperçu uniquement".

Étape suivante

Pour vous aider à configurer l'API IAP pour Cloud Run avec Terraform, explorez un exemple de code Terraform.