Générer et acheminer des journaux au niveau de l'organisation et du dossier vers des destinations compatibles

Ce document explique comment créer des récepteurs agrégés. Les récepteurs agrégés vous permettent de combiner et d'acheminer les journaux générés par les ressourcesGoogle Cloud de votre organisation ou de votre dossier vers un emplacement centralisé.

Avant de commencer

Avant de créer un récepteur, vérifiez les points suivants :

  • Vous connaissez le comportement des récepteurs agrégés. Pour en savoir plus sur ces récepteurs, consultez la section Présentation des récepteurs agrégés.

  • Vous disposez d'un Google Cloud dossier ou d'une organisation avec des entrées de journal que vous pouvez consulter dans l'explorateur de journaux.

  • Vous disposez de l'un des rôles IAM suivants pour l'organisation ou le dossierGoogle Cloud à partir duquel vous redirigez les entrées de journal.

    • Propriétaire (roles/owner)
    • Administrateur Logging (roles/logging.admin)
    • Rédacteur de configuration des journaux (roles/logging.configWriter)

    Les autorisations contenues dans ces rôles vous permettent de créer, supprimer ou modifier des récepteurs. Pour en savoir plus sur la définition des rôles IAM, consultez le guide du contrôle des accès de Logging.

  • La destination du collecteur agrégé existe ou vous pouvez la créer.

    Lorsque la destination est un projet Google Cloud , il peut appartenir à n'importe quelle organisation. Toutes les autres destinations peuvent se trouver dans n'importe quel projet de n'importe quelle organisation.

  • Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l' Google Cloud authentification.

Créer un récepteur agrégé

Pour configurer un récepteur agrégé, créez-le, puis accordez-lui les autorisations d'écrire dans la destination. Cette section explique comment créer un récepteur agrégé. Pour en savoir plus sur l'octroi d'autorisations au collecteur, consultez la section Définir les autorisations de destination de cette page.

Vous pouvez créer jusqu'à 200 récepteurs par dossier ou organisation.

Console

Pour créer un récepteur agrégé pour votre dossier ou votre organisation, procédez comme suit :

  1. Dans la console Google Cloud , accédez à la page Routeur de journaux:

    Accéder au routeur de journaux

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.

  2. Sélectionnez un dossier ou une organisation existant.

  3. Cliquez sur Créer un récepteur.

  4. Dans le panneau Détails du récepteur, saisissez les informations suivantes :

    • Nom du récepteur : indiquez un identifiant pour le récepteur. Notez qu'après avoir créé le récepteur, vous ne pouvez pas le renommer, mais vous pouvez le supprimer et en créer un autre.

    • Description du récepteur (facultatif) : décrivez l'objectif ou le cas d'utilisation du récepteur.

  5. Dans le menu Sélectionner le service de récepteur, sélectionnez le type de destination, puis remplissez la boîte de dialogue pour spécifier la destination. Vous pouvez sélectionner une destination existante ou en créer une.

    • Pour un collecteur d'interception, sélectionnez Google Cloud project (ProjetGoogle Cloud ), puis saisissez le nom complet du projet de destination Google Cloud :

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID
      
    • Pour un récepteur non intercepteur, sélectionnez la destination, puis saisissez son nom complet. Les destinations suivantes sont acceptées:

      • ProjetGoogle Cloud

        logging.googleapis.com/projects/DESTINATION_PROJECT_ID
        
      • Bucket Cloud Logging

        logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
        
      • Ensemble de données BigQuery

        Vous devez saisir le nom complet d'un ensemble de données activé pour l'écriture. L'ensemble de données peut être une table partitionnée ou partitionnée par date. Ne saisissez pas le nom d'un ensemble de données associé. Les ensembles de données associés sont en lecture seule.

        bigquery.googleapis.com/projects/PROJECT_ID/datasets/DATASET_ID
        
      • Bucket Cloud Storage

        storage.googleapis.com/BUCKET_NAME
        
      • Sujet Pub/Sub

        pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID
        
      • Splunk

        Saisissez le sujet Pub/Sub de votre service Splunk.

  6. Dans le panneau Sélectionner les journaux à inclure dans le récepteur, sélectionnez les ressources à inclure dans le récepteur.

    • Pour un récepteur intercepteur, sélectionnez Intercepter les journaux ingérés par cette organisation et toutes les ressources enfants.

    • Pour un récepteur non intercepteur, sélectionnez Inclure les journaux ingérés par cette ressource et toutes les ressources enfants.

  7. Dans le champ Créer un filtre d'inclusion, saisissez une expression de filtre correspondant aux entrées de journal que vous souhaitez inclure. Si vous ne définissez pas de filtre, toutes les entrées de journal de la ressource sélectionnée sont acheminées vers la destination.

    Par exemple, vous pouvez créer un filtre pour acheminer tous les journaux d'audit d'accès aux données vers un seul bucket de journalisation. Ce filtre se présente comme suit:

    LOG_ID("cloudaudit.googleapis.com/data_access") OR LOG_ID("externalaudit.googleapis.com/data_access")
    

    Pour obtenir des exemples de filtres, consultez la section Créer des filtres pour les récepteurs agrégés de cette page.

    Notez que la longueur d'un filtre ne peut pas dépasser 20 000 caractères.

  8. Facultatif: Pour vérifier que le filtre saisi est correct, sélectionnez Prévisualiser les journaux. L'explorateur de journaux s'ouvre dans un nouvel onglet avec le filtre prérempli.

  9. Facultatif: Dans le panneau Sélectionner les journaux à exclure du récepteur, procédez comme suit:

    1. Dans le champ Nom du filtre d'exclusion, saisissez un nom.

    2. Dans la section Créer un filtre d'exclusion, saisissez une expression de filtre correspondant aux entrées de journal que vous souhaitez exclure. Vous pouvez également utiliser la fonction sample pour sélectionner une partie des entrées de journal à exclure.

      Par exemple, pour empêcher les entrées de journal d'un projet spécifique d'être acheminées vers la destination, ajoutez le filtre d'exclusion suivant:

      logName:projects/PROJECT_ID
      

      Pour exclure des entrées de journal de plusieurs projets, utilisez l'opérateur logique OR pour joindre des clauses logName.

    Vous pouvez créer jusqu'à 50 filtres d'exclusion par récepteur. Notez que la longueur d'un filtre ne peut pas dépasser 20 000 caractères.

  10. Cliquez sur Créer un récepteur.

  11. Pour terminer la configuration de votre récepteur agrégé, autorisez le compte de service du récepteur à écrire des entrées de journal à la destination de votre récepteur. Pour en savoir plus, consultez la section Définir les autorisations des destinations.

gcloud

Pour créer un récepteur agrégé, exécutez la commande logging sinks create:

  1. Pour créer un récepteur, appelez la commande gcloud logging sinks create et assurez-vous d'inclure l'option --include-children.

    Avant d'utiliser la commande suivante, effectuez les remplacements suivants:

    • SINK_NAME: nom du récepteur de journaux. Une fois le collecteur créé, vous ne pouvez plus modifier son nom.
    • SINK_DESTINATION: service ou projet vers lequel vous souhaitez acheminer vos entrées de journal. Pour en savoir plus sur le format de ces destinations, consultez la section Formats de chemin de destination.
    • INCLUSION_FILTER: filtre d'inclusion d'un récepteur. Pour obtenir des exemples de filtres, consultez la section Créer des filtres pour les récepteurs agrégés.
    • FOLDER_ID: ID du dossier. Si vous souhaitez créer un récepteur au niveau de l'organisation, remplacez --folder=FOLDER_ID par -- organization=ORGANIZATION_ID.

    Exécutez la commande gcloud logging sinks create:

    gcloud logging sinks create SINK_NAME \
      SINK_DESTINATION  --include-children \
      --folder=FOLDER_ID --log-filter="INCLUSION_FILTER"
    

    Vous pouvez également fournir les options suivantes:

    • Pour créer un récepteur d'interception, incluez l'option --intercept-children.

    Par exemple, si vous créez un récepteur agrégé au niveau du dossier et dont la destination est un sujet Pub/Sub, votre commande peut ressembler à ceci:

    gcloud logging sinks create SINK_NAME \
      pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID --include-children \
      --folder=FOLDER_ID --log-filter="logName:activity"
  2. Accordez au compte de service du récepteur l'autorisation d'écrire sur la destination du récepteur. Pour en savoir plus, consultez la section Définir les autorisations des destinations.

REST

Pour créer un récepteur agrégé, utilisez la méthode organizations.sinks.create ou folders.sinks.create de l'API Logging. Préparez les arguments de la méthode comme suit :

  1. Définissez le champ parent comme l' Google Cloud organisation ou le dossier dans lequel créer le récepteur. Le parent doit correspondre à l'un des éléments suivants :

    • organizations/ORGANIZATION_ID
    • folders/FOLDER_ID
  2. Dans l'objet LogSink du corps de la requête de la méthode, effectuez l'une des opérations suivantes:

    • Définissez includeChildren sur True.

    • Pour créer un récepteur d'interception, définissez également le champ interceptChildren sur True.

  3. Définissez le champ filter pour qu'il corresponde aux entrées de journal que vous souhaitez inclure.

    Pour obtenir des exemples de filtres, consultez la section Créer des filtres pour les récepteurs agrégés.

    La longueur d'un filtre ne doit pas dépasser 20 000 caractères.

  4. Définissez les champs LogSink restants comme vous le feriez pour n'importe quel récepteur. Pour en savoir plus, consultez la section Acheminer les journaux vers des destinations compatibles.

  5. Appelez organizations.sinks.create ou folders.sinks.create pour créer le récepteur.

  6. Accordez au compte de service du récepteur l'autorisation d'écrire sur la destination du récepteur. Pour en savoir plus, consultez la section Définir les autorisations des destinations.

L'application des modifications apportées à un évier peut prendre quelques minutes.

Filtres pour les récepteurs agrégés

Cette section fournit des exemples de filtres que vous pouvez utiliser dans un récepteur agrégé. Pour obtenir d'autres exemples, consultez la page Exemples de requêtes avec l'explorateur de journaux.

Certains exemples utilisent la notation suivante :

  • : désigne l'opérateur de la sous-chaîne. Ne remplacez pas l'opérateur =.
  • ... représente les comparaisons de filtres supplémentaires, le cas échéant.
  • Les variables sont indiquées par un texte coloré. Remplacez-les par des valeurs valides.

La longueur d'un filtre est limitée à 20 000 caractères.

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

Sélectionner la source du journal

Pour acheminer les entrées de journal de toutes les ressources enfants, ne spécifiez pas de projet, de dossier ni d'organisation dans les filtres d'inclusion et d'exclusion de votre récepteur. Par exemple, supposons que vous configuriez un récepteur agrégé pour une organisation avec le filtre suivant:

resource.type="gce_instance"

Avec le filtre précédent, les entrées de journal dont le type de ressource est une instance Compute Engine écrite dans un enfant de cette organisation sont acheminées par le collecteur agrégé vers la destination.

Toutefois, il peut arriver que vous souhaitiez utiliser un récepteur agrégé pour acheminer les entrées de journal uniquement à partir de ressources enfants spécifiques. Par exemple, pour des raisons de conformité, vous pouvez stocker les journaux d'audit de dossiers ou de projets spécifiques dans leur propre bucket Cloud Storage. Dans ce cas, configurez votre filtre d'inclusion pour spécifier chaque ressource enfant dont vous souhaitez acheminer les entrées de journal. Si vous souhaitez acheminer les entrées de journal d'un dossier et de tous les projets qu'il contient, le filtre doit lister le dossier et chacun des projets qu'il contient, et également joindre les instructions avec une clause OR.

Les filtres suivants limitent les entrées de journal à des projets, des dossiers ou des organisations Google Cloud spécifiques:

logName:"projects/PROJECT_ID/logs/" AND ... 
logName:("projects/PROJECT_A_ID/logs/" OR "projects/PROJECT_B_ID/logs/") AND ... 
logName:"folders/FOLDER_ID/logs/" AND ... 
logName:"organizations/ORGANIZATION_ID/logs/" AND ... 

Par exemple, pour acheminer uniquement les entrées de journal écrites dans les instances Compute Engine qui ont été écrites dans le dossier my-folder, utilisez le filtre suivant:

logName:"folders/my-folder/logs/" AND resource.type="gce_instance"

Avec le filtre précédent, les entrées de journal écrites dans une ressource autre que my-folder, y compris les entrées de journal écrites dans des projets Google Cloud qui sont des enfants de my-folder, ne sont pas acheminées vers la destination.

Sélectionner la ressource surveillée

Pour acheminer des entrées de journal depuis une ressource surveillée spécifique dans un projetGoogle Cloud , utilisez plusieurs comparaisons afin de spécifier précisément la ressource:

logName:"projects/PROJECT_ID/logs" AND
resource.type=RESOURCE_TYPE AND
resource.labels.instance_id=INSTANCE_ID

Pour une liste des types de ressources, consultez la page Types de ressources surveillées.

Sélectionner un échantillon d'entrées de journal

Pour acheminer un échantillon aléatoire d'entrées de journal, ajoutez la fonction intégrée sample. Par exemple, pour acheminer uniquement 10 % des entrées de journal correspondant à votre filtre actuel, utilisez cette addition :

sample(insertId, 0.10) AND ...

Pour en savoir plus, consultez la section concernant la fonction sample.

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

Définir les autorisations de la destination

Cette section explique comment accorder à Logging les autorisations Identity and Access Management pour écrire des entrées de journal dans la destination de votre récepteur. Pour obtenir la liste complète des rôles et des autorisations dans Logging, consultez la page Contrôle des accès.

Lorsque vous créez ou mettez à jour un récepteur qui achemine les entrées de journal vers une destination autre qu'un bucket de journaux dans le projet en cours, un compte de service pour ce récepteur est requis. Logging crée et gère automatiquement le compte de service pour vous:

  • Depuis le 22 mai 2023, lorsque vous créez un récepteur et qu'aucun compte de service pour la ressource sous-jacente n'existe, Logging crée le compte de service. La journalisation utilise le même compte de service pour tous les collecteurs de la ressource sous-jacente. Les ressources peuvent être un Google Cloud projet, une organisation, un dossier ou un compte de facturation.
  • Avant le 22 mai 2023, Logging créait un compte de service pour chaque récepteur. Depuis le 22 mai 2023, la journalisation utilise un compte de service partagé pour tous les collecteurs de la ressource sous-jacente.

L'identité de l'auteur d'un collecteur est l'identifiant du compte de service associé à ce collecteur. Tous les récepteurs disposent d'une identité d'auteur, sauf s'ils écrivent dans un bucket de journaux du projet Google Cloud actuel. L'adresse e-mail de l'identité de l'auteur identifie le principal qui doit avoir accès pour écrire des données sur la destination.

Pour acheminer des entrées de journal vers une ressource protégée par un périmètre de service, vous devez ajouter le compte de service de ce récepteur à un niveau d'accès, puis l'attribuer au périmètre de service de destination. Cela n'est pas nécessaire pour les récepteurs non agrégés. Pour en savoir plus, consultez la page VPC Service Controls : Cloud Logging.

Pour définir les autorisations afin que votre récepteur soit acheminé vers sa destination, procédez comme suit :

Console

  1. Pour obtenir des informations sur le compte de service de votre évier, procédez comme suit:

    1. Dans la console Google Cloud , accédez à la page Routeur de journaux:

      Accéder au routeur de journaux

      Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.

    2. Sélectionnez Menu, puis Afficher les détails du récepteur. L'identité du rédacteur apparaît dans le panneau Détails du récepteur.

    3. Si la valeur du champ writerIdentity contient une adresse e-mail, passez à l'étape suivante. Lorsque la valeur est None, vous n'avez pas besoin de configurer les autorisations de destination.

    4. Copiez l'identité du rédacteur du récepteur dans votre presse-papiers. L'exemple suivant illustre une identité d'auteur:

      serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
      
  2. Accordez au principal spécifié par l'identité du rédacteur du récepteur l'autorisation d'écrire des données de journalisation à la destination:

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

      Accéder à IAM

      Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est IAM et administration.

    2. Dans la barre d'outils de la console Google Cloud , sélectionnez le projet qui stocke la destination du collecteur agrégé. Lorsque la destination est un projet, sélectionnez-le.

    3. Cliquez sur Accorder l'accès.

    4. Saisissez le compte principal spécifié par l'identité du rédacteur du récepteur, puis accordez un rôle IAM:

gcloud

  1. Assurez-vous de disposer d'un accès Propriétaire au projetGoogle Cloud contenant la destination. Si vous ne disposez pas d'un accès Propriétaire à la destination du récepteur, demandez à un propriétaire du projet d'ajouter l'identité du rédacteur en tant que principal.

  2. Pour obtenir des informations sur le compte de service de votre évier, appelez la méthode gcloud logging sinks describe.

    Avant d'utiliser la commande suivante, effectuez les remplacements suivants:

    • SINK_NAME: nom du récepteur de journaux. Une fois le collecteur créé, vous ne pouvez plus modifier son nom.

    Exécutez la commande gcloud logging sinks describe:

    gcloud logging sinks describe SINK_NAME
    
  3. Si les détails du sink contiennent un champ intitulé writerIdentity, passez à l'étape suivante. Lorsque les détails n'incluent pas de champ writerIdentity, vous n'avez pas besoin de configurer les autorisations de destination pour le récepteur.

  4. Copiez l'identité du rédacteur du récepteur dans votre presse-papiers. L'exemple suivant illustre une identité d'auteur:

    serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
    
  5. Accordez à l'identité du rédacteur du récepteur l'autorisation d'écrire des données de journal sur la destination en appelant la commande gcloud projects add-iam-policy-binding.

    Avant d'utiliser la commande suivante, effectuez les remplacements suivants:

    • PROJECT_ID: identifiant du projet. Sélectionnez le projet qui stocke la destination du collecteur agrégé. Lorsque la destination est un projet, sélectionnez-le.
    • PRINCIPAL: identifiant du compte principal auquel vous souhaitez accorder le rôle. Les identifiants des comptes principaux se présentent généralement sous la forme suivante : PRINCIPAL-TYPE:ID. Par exemple, user:my-user@example.com. Pour obtenir la liste complète des formats que PRINCIPAL peut avoir, consultez la section Identifiants principaux.
    • ROLE: rôle IAM. Attribuez à l'identité du rédacteur du récepteur un rôle IAM en fonction de la destination du récepteur de journaux:

    Exécutez la commande gcloud projects add-iam-policy-binding:

    gcloud projects add-iam-policy-binding PROJECT_ID --member=PRINCIPAL --role=ROLE
    

REST

Nous vous recommandons d'utiliser la console Google Cloud ou la Google Cloud CLI pour attribuer un rôle au compte de service.

Étapes suivantes