Comprendre les journaux d'audit

Cette page décrit en détail les entrées des journaux d'audit Cloud : leur structure, leur lecture et leur interprétation.

Cloud Audit Logs gère trois journaux d'audit pour chaque projet, dossier et organisation Google Cloud :

  • Journaux d'audit pour les activités d'administration
  • Journaux d'audit pour l'accès aux données
  • Journaux d'audit d'événements système

Pour découvrir Cloud Audit Logging, consultez la page Cloud Audit Logging.

Format des entrées du journal d'audit

Une entrée de journal d'audit est un type d'entrée de journal de Cloud Logging. Comme toutes les entrées du journal Logging, une entrée du journal d'audit est stockée dans un objet LogEntry. Ce qui distingue une entrée de journal d'audit des autres entrées de journal est le champ protoPayload. Dans les entrées du journal d'audit, le champ protoPayload de l'entrée de journal contient un objet AuditLog qui stocke les données de journalisation d'audit.

En résumé, chaque entrée de journal d'audit est caractérisée par les informations suivantes :

  • Le projet, le dossier ou l'organisation propriétaire de l'entrée de journal.
  • La ressource à laquelle l'entrée de journal s'applique. Ces informations sont constituées d'un type de ressource issu de la liste de ressources surveillées et de valeurs supplémentaires indiquant une instance spécifique. Par exemple, vous pouvez afficher les entrées des journaux d'audit provenant d'une seule instance de VM Compute Engine ou de toutes les instances de VM.
  • Un horodatage
  • Un service : les services sont des produits Google Cloud individuels, tels que Compute Engine, Cloud SQL ou Pub/Sub. Chaque service est identifié par son nom : compute.googleapis.com correspond à Compute Engine, cloudsql.googleapis.com à Cloud SQL, et ainsi de suite. Ces informations sont répertoriées dans le champ protoPayload.serviceName de l'entrée du journal d'audit.

    Les types de ressources appartiennent à un seul service, mais un service peut avoir plusieurs types de ressources. Pour obtenir une liste des services et des ressources, consultez la section Mapper des services sur des ressources.

  • Charge utile, de type protoPayload. La charge utile de chaque entrée de journal d'audit est un objet de type AuditLog, qui définit un ensemble de champs spécifiques aux journaux d'audit Cloud, tels que serviceName et authenticationInfo. Il comporte également un champ facultatif, serviceData, que certains services Google Cloud utilisent pour répertorier les informations spécifiques au service dans l'entrée du journal d'audit. Pour obtenir la liste des services Google Cloud utilisant ce champ, consultez la section Données d'audit spécifiques au service.

  • Un nom du journal : les entrées des journaux d'audit sont associées aux journaux des projets, des dossiers et des organisations. Les noms de ces journaux sont répertoriés ci-dessous :

   projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity
   projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Fsystem_event

   folders/[FOLDER_ID]/logs/cloudaudit.googleapis.com%2Factivity
   folders/[FOLDER_ID]/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/[FOLDER_ID]/logs/cloudaudit.googleapis.com%2Fsystem_event

   organizations/[ORGANIZATION_ID]/logs/cloudaudit.googleapis.com%2Factivity
   organizations/[ORGANIZATION_ID]/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/[ORGANIZATION_ID]/logs/cloudaudit.googleapis.com%2Fsystem_event

Dans un projet, un dossier ou une organisation, ces noms de journal sont généralement abrégés en activity, data_access et system_event.

Exemple d'entrée de journal d'audit

Cette section utilise un exemple d'entrée de journal d'audit pour expliquer comment y trouver les informations les plus importantes.

L'exemple suivant est une entrée du journal d'audit des activités d'administration écrite par Resource Manager pour enregistrer une modification apportée à une stratégie Identity and Access Management dans un projet Google Cloud nommé my-gcp-project-id. Par souci de concision, 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: {
          principalEmail: "user@example.com"
        },
        serviceName: "appengine.googleapis.com",
        methodName: "SetIamPolicy",
        authorizationInfo: [...],
        serviceData: {
          @type: "type.googleapis.com/google.appengine.legacy.AuditData",
          policyDelta: { bindingDeltas: [
              action: "ADD",
              role: "roles/logging.privateLogViewer",
              member: "user:user@example.com"
          ], }
        },
        request: {
          resource: "my-gcp-project-id",
          policy: { bindings: [...], }
        },
        response: {
          bindings: [
            {
              role: "roles/logging.privateLogViewer",
              members: [ "user:user@example.com" ]
            }
          ],
        }
      },
      insertId: "53179D9A9B559.AD6ACC7.B40604EF",
      resource: {
        type: "gae_app",
        labels: { project_id: "my-gcp-project-id" }
      },
      timestamp: "2019-05-27T16:24:56.135Z",
      severity: "NOTICE",
      logName: "projects/my-gcp-project-id/logs/cloudaudit.googleapis.com%2Factivity",
    }

Voici la requête utilisée pour sélectionner l'exemple d'entrée de journal d'audit ci-dessus. Vous pouvez l'utiliser dans la visionneuse de journaux avancée, l'API Logging ou le SDK Cloud. L'identifiant du projet est compris dans le nom du journal et la requête est rapide, car le champ logName est indexé :

    resource.type = "gae_app"
    logName = "projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"

Si vous recherchez des journaux d'audit à partir d'une seule instance d'un type de ressource, tel que gce_instance, ajoutez un qualificateur d'instance :

    resource.type = "gce_instance"
    resource.instance_id = "[INSTANCE_ID]/
    logName = "projects/[PROJECT_ID]/logs/cloudaudit.googleapis.com%2Factivity"

Interpréter l'exemple d'entrée de journal d'audit

Dans l'exemple d'entrée de journal d'audit ci-dessus, les champs protoPayload, insertId, resource, timestamp, severity et logName font partie de l'objet LogEntry. La valeur du champ protoPayload est un objet AuditLog. Il encapsule les données des journaux d'audit.

En examinant l'exemple d'entrée du journal d'audit ci-dessus, vous pouvez avoir quelques questions :

  • S'agit-il d'une entrée de journal d'audit ? Oui, pour deux raisons :

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

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

  • Quel service a écrit le journal d'audit ? Le journal a été écrit par App Engine. Ces informations sont répertoriées dans le champ protoPayload.serviceName de l'entrée du journal d'audit.

  • Quelle opération est en cours d'audit ? SetIamPolicy, comme indiqué dans le champ protoPayload.methodName, est en cours d'audit. Vous trouverez plus d'informations sur l'opération auditée dans l'objet AuditData dans protoPayload.serviceData.

  • Quelle ressource est en cours d'audit ? Une application exécutée dans App Engine, associée à un projet Google Cloud my-gcp-project-id, est en cours d'audit. Vous pouvez la déterminer à partir du champ resource, qui spécifie le type de ressource gae_app et l'identifiant du projet my-gcp-project-id. Dans cet exemple, vous trouverez des détails sur le type de ressource dans la liste des types de ressources surveillées.

Pour plus d'informations, consultez le type LogEntry, le type AuditLog et le type IAM AuditData.

Entrées de journal d'audit de grande taille ou de longue durée

Une seule opération auditée est divisée en plusieurs entrées de journal si l'opération s'exécute de manière asynchrone ou si elle génère un enregistrement AuditLog volumineux. Lorsqu'il existe plusieurs entrées de journal pour la même opération, l'objet LogEntry contient un champ operation et les entrées correspondant à la même opération affichent la même valeur pour LogEntry.operation.id et LogEntry.operation.producer.

Dans l'exemple précédent d'entrée de journal d'audit, le champ operation n'est pas présent, ce qui signifie que toutes les informations d'audit sont contenues dans une seule entrée de journal.

Données d'audit spécifiques au service

Certains services étendent les informations stockées dans leur journal d'audit AuditLog en plaçant une structure de données supplémentaire dans le champ serviceData du journal d'audit. Le tableau suivant répertorie les services qui utilisent le champ serviceData et fournit un lien vers leur type AuditData.

Service Type de données de service
App Engine type.googleapis.com/google.appengine.v1.AuditData
App Engine (ancien) type.googleapis.com/google.appengine.legacy.AuditData
BigQuery type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData
IAM type.googleapis.com/google.iam.v1.logging.AuditData

Afficher les journaux d'audit

Pour rechercher et afficher les journaux d'audit, vous devez connaître l'identifiant de l'organisation, du dossier ou du projet Cloud concerné. Vous pouvez également spécifier d'autres champs LogEntry indexés, comme resource.type. Pour en savoir plus, consultez la section Trouver des entrées de journal rapidement.

Les noms de journaux d'audit sont indiqués ci-dessous. Ils incluent des variables correspondant aux identifiants de l'organisation, du dossier ou du projet Cloud :

   projects/project-id/logs/cloudaudit.googleapis.com%2Factivity
   projects/project-id/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/project-id/logs/cloudaudit.googleapis.com%2Fsystem_event

   folders/folder-id/logs/cloudaudit.googleapis.com%2Factivity
   folders/folder-id/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/folder-id/logs/cloudaudit.googleapis.com%2Fsystem_event

   organizations/organization-id/logs/cloudaudit.googleapis.com%2Factivity
   organizations/organization-id/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/organization-id/logs/cloudaudit.googleapis.com%2Fsystem_event

Plusieurs options s'offrent à vous pour afficher les entrées de vos journaux d'audit.

Console

Vous pouvez utiliser la visionneuse de journaux dans Cloud Console pour récupérer les entrées du journal d'audit de votre projet Cloud :

  1. Dans Cloud Console, accédez à la page Cloud Logging > Journaux (visionneuse de journaux) :

    Accéder à la page Visionneuse de journaux

  2. Dans Version classique, sélectionnez Aperçu de la nouvelle visionneuse de journaux.

  3. Sélectionnez un projet Cloud existant.

  4. Dans le volet Générateur de requêtes, procédez comme suit :

    • Dans Ressource, sélectionnez le type de ressource Google Cloud dont vous souhaitez afficher les journaux d'audit.

    • Dans Nom du journal, sélectionnez le type de journal d'audit que vous souhaitez afficher :

    • Pour afficher les journaux d'audit des activités d'administration, sélectionnez activity.

    • Pour afficher les journaux d'audit des accès aux données, sélectionnez data_access.

    • Pour afficher les journaux d'audit des événements système, sélectionnez system_events.

    Si ces options ne sont pas visibles, cela signifie qu'aucun journal d'audit de ce type n'est disponible dans le projet Cloud.

    Pour en savoir plus sur l'utilisation de la nouvelle visionneuse de journaux pour effectuer des requêtes, consultez la page Générer des requêtes de journal (Aperçu).

API

Lorsque vous créez des requêtes, remplacez les variables par des valeurs valides. Spécifiez des noms et identifiants de journaux d'audit appropriés au niveau d'un projet, d'un dossier ou d'une organisation, comme indiqué dans les noms des journaux d'audit. Par exemple, si votre requête inclut un project-id, l'identifiant de projet que vous fournissez doit faire référence au projet Cloud actuellement sélectionné.

Pour consulter vos entrées de journal d'audit à l'aide de l'API Logging, procédez comme suit :

  1. Accédez à la section Essayer cette API dans la documentation de la méthode entries.list.

  2. Insérez les éléments suivants dans la partie Corps de la requête du formulaire Essayer cette API. En cliquant sur ce formulaire prérempli, vous remplissez automatiquement le corps de la requête mais vous devez fournir un ID de projet project-id valide pour chaque nom de journal.

    {
      "resourceNames": [
        "projects/project-id"
      ],
      "pageSize": 5,
      "filter": "logName : projects/project-id/logs/cloudaudit.googleapis.com"
    }
    
  3. Cliquez sur Exécuter.

Pour en savoir plus sur les requêtes, consultez la page Langage de requête Logging.

gcloud

L'outil de ligne de commande gcloud fournit une interface de ligne de commande à l'API Cloud Logging. Fournissez un ID project-id, folder-id ou organization-id valide dans chacun des noms de journaux.

Pour lire les entrées de journaux d'audit au niveau d'un projet Google Cloud, exécutez la commande suivante :

gcloud logging read "logName : projects/project-id/logs/cloudaudit.googleapis.com" --project=project-id

Pour lire les entrées de journaux d'audit au niveau d'un dossier, exécutez la commande suivante :

gcloud logging read "logName : folders/folder-id/logs/cloudaudit.googleapis.com" --folder=folder-id

Pour lire les entrées de journaux d'audit au niveau de l'organisation, exécutez la commande suivante :

gcloud logging read "logName : organizations/organization-id/logs/cloudaudit.googleapis.com" --organization=organization-id

Pour plus d'informations sur l'utilisation de l'outil gcloud, consultez la page Lire des entrées de journal.

Pour obtenir un exemple d'entrée de journal d'audit et savoir comment y trouver les informations les plus importantes, consultez la page Comprendre les journaux d'audit.