Déterminer les filtres d'événements pour Cloud Audit Logs

Un déclencheur Eventarc déclare votre intérêt pour un événement ou un ensemble d'événements spécifique, ce qui vous permet de capturer des événements spécifiques et d'agir en conséquence. Les déclencheurs Eventarc avec type=google.cloud.audit.log.v1.written envoient des requêtes à une destination lorsque vous créez un journal d'audit correspondant aux critères de filtrage du déclencheur. Les correspondances sont effectuées sur les valeurs suivantes de l'entrée de journal d'audit :

  • serviceName : service ayant écrit le journal d'audit
  • methodName : opération en cours d'audit
  • resourceName : ressource en cours d'audit

Pour obtenir la liste des services Google Cloud qui fournissent des journaux d'audit, consultez la page Services Google Cloud avec journaux d'audit. Vous pouvez également récupérer les valeurs des filtres d'événements qui s'appliquent au type d'événement google.cloud.audit.log.v1.written.

Identifier les filtres d'événements

Pour identifier les filtres d'événements exacts nécessaires à la création d'un déclencheur, générez l'événement que vous souhaitez capturer, puis affichez son entrée Cloud Audit Logging correspondante. Notez que les données d'une entrée de journal peuvent être réparties et réparties sur plusieurs entrées.

  1. Assurez-vous d'avoir activé pour votre service les types de journaux d'audit pour l'accès aux données.

    Accéder aux journaux d'audit

    Notez que les services pour lesquels l'audit est activé par défaut ne sont pas répertoriés.

    1. Dans le tableau principal de la page Journaux d'audit, sélectionnez un service Google Cloud.

    2. Dans l'onglet Types de journaux, cochez les cases Lecture administrateur, Lecture de données et Écriture de données, puis cliquez sur Enregistrer.

  2. Effectuez l'opération pour laquelle vous souhaitez créer un filtre d'événements et générer une entrée de journal d'audit. Vous pouvez par exemple stocker un fichier dans un bucket Cloud Storage.

  3. Dans la console Google Cloud, accédez à la page Explorateur de journaux.

    Accéder à l'explorateur de journaux

  4. Dans le volet Générateur de requêtes, créez et exécutez une requête pour filtrer les entrées de journal et récupérer les résultats. Exemple :

    resource.type="gcs_bucket" resource.labels.bucket_name="eventarc-bucket"
    

    Pour en savoir plus sur la création de requêtes permettant de récupérer et d'affiner les journaux, consultez la page Créer des requêtes à l'aide du langage de requête Logging.

  5. Pour afficher tous les détails d'une entrée de journal, cliquez sur la flèche de développement (▸) au début de l'entrée.

    Le champ protoPayload fait la distinction entre une entrée de journal d'audit et les autres entrées de journal. Dans l'exemple suivant, certaines parties de l'entrée de journal sont omises et certains champs sont mis en évidence :

    {
       protoPayload:{
          @type:"type.googleapis.com/google.cloud.audit.AuditLog",
          status:{},
          authenticationInfo:{},
          requestMetadata:{},
          serviceName:"storage.googleapis.com",
          methodName:"storage.objects.create",
          authorizationInfo:[],
          resourceName:"projects/_/buckets/eventarc-bucket/objects/random.txt",
          resourceLocation:{}
       },
       insertId:"il9evleafpdk",
       resource:{
          type:"gcs_bucket",
          labels:{
             project_id:"cloud-run-test",
             location:"us-central1",
             bucket_name:"eventarc-bucket"
          }
       },
       timestamp:"2021-03-05T15:55:20.754688805Z",
       severity:"INFO",
       logName:"projects/cloud-run-test/logs/cloudaudit.googleapis.com%2Fdata_access",
       receiveTimestamp:"2021-03-05T15:55:20.884984611Z"
    }

    • Les informations suivantes peuvent être utilisées pour vérifier le contenu de cette entrée de journal d'audit :

      • Le champ protoPayload.@type correspond à type.googleapis.com/google.cloud.audit.AuditLog.

      • Le champ logName inclut le domaine cloudaudit.googleapis.com.

    • Le champ protoPayload.serviceName correspond au service qui a écrit le journal d'audit.

    • Le champ protoPayload.methodName correspond à l'opération en cours d'audit.

    • Le champ protoPayload.resourceName correspond à la ressource en cours d'audit.

    Pour en savoir plus sur la recherche d'informations dans une entrée de journal d'audit, consultez la section Comprendre les journaux d'audit.

Récupérer les valeurs des filtres d'événements

Vous pouvez exécuter la commande gcloud eventarc audit-logs-provider pour explorer et répertorier les valeurs serviceName et methodName du fournisseur pour le type d'événement google.cloud.audit.log.v1.written.

Pour répertorier les noms des services, exécutez la commande suivante :

gcloud eventarc audit-logs-provider service-names list

Elle renvoie toutes les valeurs de l'attribut serviceName pour le type d'événement google.cloud.audit.log.v1.written.

Pour répertorier les noms de méthodes pour un service spécifique, exécutez la commande suivante :

gcloud eventarc audit-logs-provider method-names list \
     --service-name=SERVICE_NAME

Remplacez SERVICE_NAME par une valeur serviceName (par exemple, bigquery.googleapis.com).

Exemples de déclencheurs Eventarc

L'exemple suivant crée un déclencheur appelé cal-workflows-trigger pour une destination Workflows. Le déclencheur filtre les journaux d'audit écrits par bigquery.googleapis.com et l'opération identifiée comme google.cloud.bigquery.v2.JobService.InsertJob :

gcloud eventarc triggers create cal-workflows-trigger \
   --location=us-central1 \
   --destination-workflow=my-workflow \
   --destination-workflow-location=europe-west4 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=bigquery.googleapis.com" \
   --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
   --service-account=${TRIGGER_SA}@${PROJECT_ID}.iam.gserviceaccount.com

L'exemple suivant crée un déclencheur appelé cal-run-trigger pour une destination Cloud Run. Le déclencheur filtre les journaux d'audit écrits par workflows.googleapis.com et l'opération identifiée comme google.cloud.workflows.v1.Workflows.GetWorkflow :

gcloud eventarc triggers create cal-run-trigger \
   --location=us-central1 \
   --destination-run-service=helloworld-events \
   --destination-run-region=us-central1 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=workflows.googleapis.com" \
   --event-filters="methodName=google.cloud.workflows.v1.Workflows.GetWorkflow" \
   --event-filters="resourceName=projects/_/locations/us-central1/workflows/test-workflow" \
   --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

Entrées de journal d'audit surdimensionnées

Cloud Logging répartit les entrées de journal d'audit qui dépassent la limite d'utilisation et répartit les données contenues dans l'entrée de journal d'audit d'origine dans plusieurs entrées partitionnées. Si une entrée de journal contient un champ split, elle résulte de la scission d'une entrée de journal d'origine plus grande. Le champ split est un objet LogSplit qui contient les informations nécessaires pour identifier les entrées de journal fractionnées associées.

Chaque entrée fractionnée possède un attribut protoPayload qui inclut les mêmes valeurs serviceName, methodName et resourceName afin de filtrer les événements Cloud Audit Logs. Les déclencheurs Eventarc fournissent un événement pour chaque entrée fractionnée.

Lorsque l'entrée de journal d'audit est divisée en plusieurs entrées de journal, vous pouvez filtrer n'importe quel champ de l'entrée LogEntry. Par exemple, si vous avez besoin de la première entrée d'une série d'entrées de journal fractionnées, vous pouvez exécuter la commande gcloud CLI suivante, en utilisant split.index=0 pour indiquer la position de la première entrée :

gcloud logging read "split.index=0"

Pour en savoir plus, y compris sur la reconnaissance des entrées et des exemples de requêtes, consultez la page Diviser les entrées du journal d'audit.

Étapes suivantes