Recevoir un événement Cloud Audit Logs


Ce tutoriel explique comment déployer un service Cloud Run authentifié qui reçoit des événements de Cloud Storage à l'aide de Cloud Audit Logs. Utilisez ce tutoriel pour déployer des charges de travail de production. Le déclencheur Eventarc filtre les événements en fonction des entrées Cloud Audit Logs. Pour plus d'informations, consultez la section Déterminer des filtres d'événements pour Cloud Audit Logs.

Vous pouvez suivre ce tutoriel à l'aide de Google Cloud Console ou de Google Cloud CLI.

Objectifs

Au cours de ce tutoriel, vous allez :

  1. Créer un bucket Cloud Storage qui servira de source d'événements.

  2. Déployer un service récepteur d'événements sur Cloud Run.

  3. Créer un déclencheur Eventarc.

  4. Générer un événement en important un fichier dans le bucket Cloud Storage et l'afficher dans les journaux Cloud Run.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.

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 Identity and Access Management (IAM) inclut les autorisations nécessaires pour accéder à la plupart des ressources Google Cloud. Vous pouvez ignorer cette étape.

Si vous n'êtes pas le créateur du projet, les autorisations requises doivent être accordées au compte principal approprié sur le projet. 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). Pour en savoir plus, consultez la page Rôles et autorisations pour la destination de votre événement.

Notez que par défaut, les autorisations Cloud Build incluent des autorisations permettant d'importer et de télécharger des artefacts Artifact Registry.

Autorisations requises

Pour obtenir les autorisations nécessaires pour suivre ce tutoriel, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.

Effectuez les étapes suivantes à l'aide de la console Google Cloud ou de la gcloud CLI :

Console

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Enable the APIs

  8. Pour configurer l'accès aux données enregistrées dans vos journaux d'audit, activez les types de journaux Lecture de l'administrateur, Lecture des données et Écriture de données pour Google Cloud Storage :

    Accéder aux journaux d'audit

  9. Dans Google Cloud Console, accédez à la page Comptes de service.

    Accéder à la page "Comptes de service"

  10. Cliquez sur Créer un compte de service.
  11. Saisissez le nom du compte de service à afficher dans la console Google Cloud.

    La console Google Cloud génère un ID de compte de service basé sur ce nom. Modifiez l'ID si nécessaire. Vous ne pourrez pas le modifier par la suite.

  12. Facultatif : saisissez la description du compte de service.
  13. Si vous ne souhaitez pas définir de contrôles des accès à ce stade, cliquez sur OK pour terminer la création du compte de service.

    Pour définir les contrôles des accès dès maintenant, cliquez sur Créer et continuer, puis passez à l'étape suivante.

  14. Sélectionnez les rôles Demandeur Cloud Run et Destinataire des événements Eventarc à attribuer au projet du compte de service associé à votre déclencheur Eventarc.

    À des fins de test, ce rôle accorde le rôle Demandeur Cloud Run sur tous les services et jobs Cloud Run du projet. Vous pouvez toutefois l'accorder sur le service. Pour en savoir plus, consultez la section Accorder des autorisations de service Cloud Run.

    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.
  15. Lorsque vous avez terminé d'ajouter des rôles, cliquez sur Continuer, puis sur OK pour terminer la création du compte de service.

gcloud

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
          logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com 
          storage.googleapis.com  and eventarc.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
          logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com 
          storage.googleapis.com  and eventarc.googleapis.com
  12. Mettez à jour les composants gcloud :
    gcloud components update
  13. Connectez-vous à votre compte :
    gcloud auth login
    
  14. Définissez les variables de configuration utilisées dans ce tutoriel :
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    export SERVICE_NAME=helloworld-events
  15. Pour configurer l'accès aux données enregistrées dans vos journaux d'audit, activez les types de journaux ADMIN_READ, DATA_READ et DATA_WRITE pour le service storage.googleapis.com :
    1. Consultez la stratégie IAM de votre projet et stockez-la dans un fichier :
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Modifiez votre stratégie dans /tmp/policy.yaml. Vous pouvez ajouter ou modifier uniquement la configuration des journaux d'audit pour l'accès aux données.
      auditConfigs:
      - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_WRITE
      - logType: DATA_READ
      service: storage.googleapis.com
    3. Rédigez votre nouvelle stratégie IAM :
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Si la commande précédente signale un conflit avec une autre modification, répétez ces étapes en commençant par lire la stratégie IAM du projet.
  16. Créez un compte de service pour le projet :
    gcloud iam service-accounts create sample-service-account \
        --description="A sample service account" \
        --display-name="Sample service account"
    Une fois que vous avez créé un compte de service, un délai de sept minutes peut être nécessaire avant de pouvoir l'utiliser. Si vous tentez de l'utiliser immédiatement après sa création et que vous recevez une erreur, attendez au moins 60 secondes, puis réessayez.
  17. Pour vérifier que sample-service-account a bien été créé, exécutez la commande suivante :
    gcloud iam service-accounts list
    La sortie devrait ressembler à ce qui suit :
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  18. Accordez les rôles Demandeur Cloud Run (run.invoker) et Récepteur d'événements Eventarc (roles/eventarc.eventReceiver) du projet au compte de service associé à votre déclencheur Eventarc :
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/run.invoker"
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/eventarc.eventReceiver"

    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

    À des fins de test, ce rôle accorde le rôle Demandeur Cloud Run sur tous les services et jobs Cloud Run du projet. Vous pouvez toutefois l'accorder sur le service. Pour en savoir plus, consultez la section Accorder des autorisations de service Cloud Run.

    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.

Créer un dépôt standard Artifact Registry

Créez un dépôt standard Artifact Registry pour stocker votre image de conteneur :

Console

  1. Dans la console Google Cloud, accédez à la page Dépôts.

    Accédez aux dépôts.

  2. Cliquez sur Créer un dépôt.
  3. Configurez votre dépôt :
    1. Saisissez un nom unique.
    2. Dans le champ Format, choisissez Docker.
    3. Dans le champ Mode, choisissez Standard.
    4. Dans le champ Type d'emplacement, sélectionnez Région.
    5. Dans la liste Région, sélectionnez us-central1 (Iowa).
  4. Acceptez les autres paramètres par défaut et cliquez sur Créer.

gcloud

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

Remplacez REPOSITORY par un nom unique pour le dépôt Artifact Registry.

Créer un bucket Cloud Storage

Ce guide de démarrage rapide utilise Cloud Storage comme source d'événements. Pour créer un bucket de stockage, procédez comme suit :

Console

  1. Dans la console Google Cloud, accédez à la page Buckets.

    Accéder à la page "Buckets"

  2. Cliquez sur Créer un bucket.
  3. Saisissez les informations relatives à votre bucket et cliquez sur Continuer à chaque étape :
    1. Saisissez un nom unique. Exemple :eventarcbucket
    2. Sélectionnez Région comme Type d'emplacement.
    3. Sélectionnez us-central1 (Iowa) comme Emplacement.
    4. Sélectionnez Standard comme classe de stockage par défaut.
    5. Sélectionnez Uniforme comme type de Contrôle des accès.
  4. Cliquez sur Créer.

gcloud

gsutil mb -l $REGION gs://events-tutorial-PROJECT_ID/

Une fois la source d'événements créée, vous pouvez déployer le service récepteur d'événements sur Cloud Run.

Déployer le service récepteur d'événements sur Cloud Run

Déployez un service Cloud Run qui reçoit et consigne les événements. Pour déployer l'exemple de service récepteur d'événements, procédez comme suit :

Console

  1. Clonez l'exemple de dépôt dans votre compte GitHub :
  2. Go

    1. Sur GitHub, accédez à GoogleCloudPlatform/golang-samples.
    2. Cliquez sur Fork (Dupliquer).
    3. Capture d'écran du bouton de duplication.
    4. Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.

    Java

    1. Sur GitHub, accédez à GoogleCloudPlatform/java-docs-samples.
    2. Cliquez sur Fork (Dupliquer).
    3. Capture d'écran du bouton de duplication.
    4. Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.

    .NET

    1. Sur GitHub, accédez à GoogleCloudPlatform/dotnet-docs-samples.
    2. Cliquez sur Fork (Dupliquer).
    3. Capture d'écran du bouton de duplication.
    4. Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.

    Node.js

    1. Sur GitHub, accédez à GoogleCloudPlatform/nodejs-docs-samples.
    2. Cliquez sur Fork (Dupliquer).
    3. Capture d'écran du bouton de duplication.
    4. Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.

    Python

    1. Sur GitHub, accédez à GoogleCloudPlatform/python-docs-samples.
    2. Cliquez sur Fork (Dupliquer).
    3. Capture d'écran du bouton de duplication.
    4. Si vous y êtes invité, sélectionnez l'emplacement où vous souhaitez dupliquer le dépôt.
  3. Dans Google Cloud Console, accédez à la page Services.
  4. Accéder aux services

  5. Cliquez sur Create service (Créer un service) pour afficher le formulaire Create service.
  6. Sélectionnez Déployer en continu depuis un dépôt.

    Les modifications apportées à votre dépôt GitHub sont automatiquement intégrées aux images de conteneurs dans Artifact Registry et déployées vers Cloud Run.

  7. Cliquez sur Configurer avec Cloud Build pour ouvrir le formulaire Configurer avec Cloud Build.
    1. Si vous y êtes invité, activez l'API Cloud Build et l'API Artifact Analysis.
    2. Sélectionnez GitHub comme fournisseur de dépôt.
    3. Si vous y êtes invité, cliquez sur Installer Google Cloud Build.
    4. Sélectionnez le dépôt GitHub que vous avez dupliqué en guise de Dépôt.
    5. Cliquez sur Suivant.
    6. Dans le champ Branche, saisissez ^main$.
    7. Sélectionnez Dockerfile dans le champ Type de compilation, puis indiquez l'emplacement source du Dockerfile :
      • eventarc/audit-storage/Dockerfile

        ou

      • eventarc/audit_storage/Dockerfile(Go)
    8. Cliquez sur Enregistrer.
  8. Dans le formulaire Créer un service, saisissez un nom de service. Par exemple, helloworld-events.
  9. Sélectionnez us-central1(Iowa) comme région dans laquelle vous souhaitez placer votre service.
  10. Sélectionnez l'une des options Entrée en fonction du trafic entrant que vous souhaitez autoriser dans le service Cloud Run.
  11. Sélectionnez Exiger l'authentification.
  12. Cliquez sur Créer.

gcloud

  1. Clonez le dépôt GitHub :

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage

    .NET

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
  2. Créez le conteneur et importez-le dans Cloud Build :
    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    
  3. Déployez l'image de conteneur dans Cloud Run :
    gcloud run deploy $SERVICE_NAME \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    

    Lorsque vous êtes invité à autoriser les appels non authentifiés, saisissez n.

    Une fois le déploiement effectué, la ligne de commande affiche l'URL du service.

Maintenant que vous avez déployé votre service récepteur d'événements appelé helloworld-events sur Cloud Run, vous pouvez configurer votre déclencheur.

Créer un déclencheur Eventarc

Le déclencheur Eventarc envoie des événements à partir du bucket Cloud Storage vers le service Cloud Run helloworld-events.

Console

  1. Dans la console Google Cloud, accédez à la page Déclencheurs.

    Accéder à la page "Déclencheurs"

  2. Cliquez sur Créer un déclencheur.
  3. Saisissez un nom de déclencheur.

    Il s'agit de l'ID du déclencheur, qui doit commencer par une lettre. Il peut contenir jusqu'à 63 lettres minuscules, chiffres ou traits d'union.

  4. Sélectionnez un type de déclencheur :
    • Propriétaire : filtre les événements envoyés depuis des fournisseurs Google Cloud (directement ou via des entrées Cloud Audit Logs) ou des fournisseurs utilisant des messages Pub/Sub.
    • Tiers : filtre les événements envoyés depuis des fournisseurs tiers.
  5. Dans la liste Fournisseur d'événements, sélectionnez Cloud Storage comme source des événements.
  6. Dans la liste Type d'événement, sélectionnez storage.objects.create.
  7. Dans la liste Région, sélectionnez us-central1 comme région à partir de laquelle recevoir les événements.
  8. Sélectionnez le compte de service que vous avez créé. Par exemple, SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com
  9. Dans la liste Destination de l'événement, sélectionnez Cloud Run.
  10. Dans la liste Sélectionner un service Cloud Run, sélectionnez helloworld-events.
  11. Cliquez sur Créer.
  12. Notez que vous pouvez également créer un déclencheur Eventarc à l'aide de la page de la console Cloud Run.

gcloud

  1. Créez un déclencheur filtrant les événements Cloud Storage et utilisant le compte de service que vous avez créé :
    gcloud eventarc triggers create events-tutorial-trigger \
        --destination-run-service=$SERVICE_NAME \
        --destination-run-region=$REGION \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
    Remplacez PROJECT_ID par l'ID du projet Google Cloud.

    Où :

    • type : indique que les journaux d'audit sont créés lorsque les critères de filtre du déclencheur sont remplis.
    • serviceName : service qui écrit le journal d'audit, à savoir Cloud Storage.
    • methodName : opération en cours d'audit, à savoir storage.objects.create.
    Cette action crée un déclencheur appelé events-tutorial-trigger.
  2. Pour vérifier que events-tutorial-trigger a bien été créé, exécutez la commande suivante :
    gcloud eventarc triggers list --location=$REGION
  3. Le déclencheur, events-tutorial-trigger, est répertorié avec une cible helloworld-events.

Générer et afficher un événement

  1. Pour générer un événement, procédez comme suit :

    Console

    1. Créez un fichier texte portant le nom random.txt et contenant le texte "Hello World".
    2. Dans la console Google Cloud, accédez à la page Buckets.

      Accéder à la page "Buckets"

    3. Sélectionnez le bucket de stockage que vous avez créé.
    4. Dans l'onglet Objets, cliquez sur Importer des fichiers, puis importez le fichier random.txt.

    gcloud

    Importez un fichier texte dans Cloud Storage :

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
  2. Pour afficher l'entrée de journal, procédez comme suit :
  3. Console

    1. Dans la console Google Cloud, accédez à la page Services.

      Accéder aux services

    2. Dans la liste des services, cliquez sur le nom du service que vous avez créé pour accéder à la page Informations sur le service.
    3. Cliquez sur l'onglet Journaux pour obtenir les journaux de requête et de conteneur pour toutes les révisions de ce service. Vous pouvez filtrer les journaux par niveau de gravité.
    4. Recherchez une entrée de journal semblable à ceci :
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      BUCKET_NAME est le nom du bucket Cloud Storage.

    gcloud

    1. gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
    2. Recherchez une entrée de journal semblable à ceci :
      Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
      BUCKET_NAME est le nom du bucket Cloud Storage.

Vous venez de déployer un service récepteur d'événements sur Cloud Run, de créer un déclencheur Eventarc, de générer un événement à partir de Cloud Storage et de l'afficher dans les journaux Cloud Run.

Effectuer un nettoyage

Bien que Cloud Run ne facture pas un service inutilisé, il se peut que des frais vous soient toujours facturés pour le stockage de l'image de conteneur dans Artifact Registry, le stockage des fichiers dans votre bucket Cloud Storage, et lesRessources Eventarc.

Vous pouvez :

  1. Supprimez votre image de conteneur.

  2. Supprimer votre bucket de stockage.

  3. Supprimer le déclencheur Eventarc.

Vous pouvez également supprimer votre projet Google Cloud pour éviter des frais. La suppression de votre projet Google Cloud arrête la facturation de toutes les ressources utilisées dans ce projet.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

Étapes suivantes