Rôles et autorisations pour les cibles Cloud Run

Ce document explique comment attribuer des rôles et des autorisations IAM (Identity and Access Management) pour prendre en charge les événements de routage de Google Cloud et d'autres sources vers les services Cloud Run à l'aide d'Eventarc.

  1. Accordez des autorisations à l'échelle du projet au compte principal qui appelle les API Eventarc (par exemple, le créateur du déclencheur Eventarc):

    1. Le rôle Administrateur Eventarc vous permet de contrôler totalement toutes les ressources Eventarc, y compris la spécification d'un compte de service pour le déclencheur lors de sa création.
    2. Le rôle Utilisateur du compte de service permet à un compte principal d'emprunter l'identité d'un compte de service et de l'utiliser. Le compte de service est associé à un déclencheur Eventarc et représente l'identité du déclencheur.
  2. Accordez des autorisations de déclencheur Eventarc au compte de service du déclencheur : le rôle Destinataire des événements Eventarc permet à votre déclencheur Eventarc de recevoir des événements des fournisseurs d'événements. Vous n'avez pas besoin d'attribuer le rôle si vous acheminez des événements directs à partir de Cloud Pub/Sub.

  3. Accordez des autorisations au service Cloud Run au compte de service du déclencheur : le rôle Demandeur Cloud Run permet à votre déclencheur Eventarc d'appeler le service Cloud Run cible. Cela s'applique si vous acheminez des événements vers un service Cloud Run authentifié.

  4. Accordez des autorisations aux agents de service Google :

    1. Si vous créez un déclencheur pour des événements directs à partir de Cloud Storage, attribuez le rôle Diffuseur Pub/Sub.
    2. Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, attribuez le rôle de Créateur de jetons du compte de service.

Pour en savoir plus sur l'attribution de rôles IAM, consultez la section Gérer les accès. Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Accorder des autorisations à l'échelle du projet

Si vous êtes le créateur du projet, vous disposez du rôle de base Propriétaire (roles/owner). Par défaut, ce rôle inclut les autorisations nécessaires pour un accès complet à la plupart des ressources Google Cloud. Sinon, les rôles requis doivent être attribués par un administrateur de la ressource appropriée au compte principal approprié (également appelé membre).

Par exemple, un compte principal peut être un compte Google (pour les utilisateurs finaux) ou un compte de service (pour les applications et les charges de travail de calcul). Chaque compte principal possède son propre identifiant, qui est généralement une adresse e-mail.

  1. Le rôle d'administrateur Eventarc (roles/eventarc.admin) vous permet de contrôler totalement toutes les ressources Eventarc.

    Attribuez le rôle au projet :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/eventarc.admin

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet Google Cloud.
    • PRINCIPAL : l'identifiant du créateur du déclencheur, qui se présente généralement sous la forme suivante : PRINCIPAL_TYPE:ID. Exemple : user:my-user@example.com. Pour obtenir la liste complète des valeurs PRINCIPAL_TYPE possibles, consultez la documentation de référence sur les liaisons de stratégie.
  2. Le rôle Utilisateur du compte de service (roles/iam.serviceAccountUser) permet à un compte principal d'exécuter des opérations en tant que compte de service.

    Par exemple, vous avez besoin de ce rôle pour associer un compte de service géré par l'utilisateur à un déclencheur Eventarc. Vous en aurez également besoin pour pouvoir agir en tant que compte de service d'exécution lors du déploiement d'un service Cloud Run. Pour en savoir plus, consultez la section Rôles pour l'authentification des comptes de service.

    Vous pouvez accorder le rôle sur le projet pour permettre au compte principal d'emprunter l'identité de plusieurs comptes de service ou d'accorder le rôle sur le compte de service pour permettre au compte principal d'emprunter l'identité d'un compte de service spécifique.

    Attribuez le rôle au projet :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    Ou attribuez le rôle sur le compte de service:

    gcloud iam service-accounts add-iam-policy-binding \
        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
        --member=PRINCIPAL \
        --role=roles/iam.serviceAccountUser

    Remplacez les éléments suivants :

    • SERVICE_ACCOUNT_PROJECT_ID : ID de projet Google Cloud contenant le compte de service.
    • SERVICE_ACCOUNT_NAME : nom du compte de service.

Accorder des autorisations au déclencheur Eventarc

Chaque déclencheur Eventarc est associé à un compte de service IAM au moment de sa création. Vous pouvez spécifier un compte de service géré par l'utilisateur que le déclencheur utilise comme identité par défaut. Si vous ne spécifiez pas de compte de service lors de la création du déclencheur, celui-ci utilise le compte de service Compute Engine par défaut pour son identité.

Nous vous recommandons de créer votre propre compte de service géré par l'utilisateur afin de renforcer le contrôle et la flexibilité lors de la gestion du déclencheur.

  1. Créez un compte de service et notez son nom :

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
        --description="DESCRIPTION" \
        --display-name="DISPLAY_NAME"

    Remplacez les éléments suivants :

    • SERVICE_ACCOUNT_NAME : nom du compte de service. Ce nom apparaît dans l'adresse e-mail qui identifie le compte de service.
    • DESCRIPTION : description facultative du compte de service.
    • DISPLAY_NAME : nom du compte de service à afficher dans la console Google Cloud.
  2. Attribuez le rôle Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) sur le projet au compte de service associé à votre déclencheur Eventarc afin qu'il puisse recevoir des événements de fournisseurs d'événements.

    Notez que vous n'avez pas besoin d'attribuer le rôle de récepteur d'événements Eventarc si vous acheminez des événements directs à partir de Cloud Pub/Sub.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver

    Remplacez SERVICE_ACCOUNT_NAME par le nom de votre compte de service que vous avez noté à l'étape précédente.

Accorder des autorisations au service Cloud Run

Tous les services Cloud Run sont déployés en mode privé par défaut, ce qui signifie qu'ils ne sont accessibles qu'à la condition de fournir des identifiants d'authentification dans la requête. Pour les projets soumis à des règles d'administration de partage restreint de domaine, utilisez un service cible Cloud Run authentifié plutôt qu'un service autorisant l'accès public (non authentifié).

Par défaut, les services Cloud Run ne peuvent être appelés que par les propriétaires de projet, les éditeurs de projet, les administrateurs et les demandeurs Cloud Run.

  1. Si vous acheminez des événements vers un service cible Cloud Run avec authentification, attribuez le rôle Demandeur Cloud Run (run.invoker) sur le service Cloud Run vers le compte de service géré par l'utilisateur associé à votre déclencheur Eventarc :

    gcloud run services add-iam-policy-binding SERVICE_NAME \
        --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
        --role=roles/run.invoker

    Remplacez SERVICE_NAME par le nom du service Cloud Run.

  2. Vous pouvez éventuellement attribuer le rôle sur tous les services et jobs Cloud Run d'un projet Google Cloud. Pour en savoir plus, consultez la page Contrôler l'accès à tous les services et jobs d'un projet.

Notez que si vous créez un déclencheur pour un service Cloud Run authentifié sans attribuer le rôle Demandeur Cloud Run, le déclencheur est bien créé et actif. Cependant, le déclencheur ne fonctionnera pas comme prévu et un message semblable au suivant s'affichera dans les journaux :

The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

Accorder des autorisations aux agents de service

Certains services Google Cloud disposent d'agents de service qui permettent aux services d'accéder à vos ressources. Si une API nécessite un agent de service, Google le crée après l'activation et l'utilisation de l'API.

  1. Si vous créez un déclencheur pour des événements directs à partir de Cloud Storage, pour permettre la publication de messages dans un sujet, accordez le rôle Diffuseur Pub/Sub (roles/pubsub.publisher) sur le projet à l'agent de service Cloud Storage :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com \
        --role=roles/pubsub.publisher

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud. Vous pouvez trouver le numéro de votre projet sur la page Bienvenue de la console Google Cloud ou en exécutant la commande suivante :

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'
  2. Si vous avez activé l'agent de service Cloud Pub/Sub le 8 avril 2021 ou à une date antérieure, pour accepter les requêtes push Pub/Sub authentifiées, accordez le rôle de créateur de jetons de compte de service (roles/iam.serviceAccountTokenCreator) sur le projet pour l'agent de service Pub/Sub. Sinon, ce rôle est attribué par défaut :

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Étapes suivantes