Cette page explique comment acheminer les journaux en créant des récepteurs configurés avec des comptes de service gérés par l'utilisateur. Par défaut, Logging utilise un compte de service Logging pour tous les récepteurs d'une ressource. Toutefois, si vos récepteurs de journaux se trouvent dans des projets différents, vous pouvez créer et gérer votre propre compte de service géré par l'utilisateur. Cela vous permet de gérer de manière centralisée les autorisations Identity and Access Management à partir du projet contenant votre compte de service géré par l'utilisateur.
Vous ne pouvez créer un récepteur avec un compte de service géré par l'utilisateur que si la destination du récepteur est un bucket de journaux ou un projet Google Cloud. L'exemple présenté dans ce document montre comment configurer un récepteur qui utilise un compte de service géré par l'utilisateur, dont la destination est un bucket de journaux.
Avant de commencer
Pour utiliser les exemples de ligne de commande de ce guide, installez et configurez la Google Cloud CLI.
Assurez-vous de disposer d'un compte de service géré par l'utilisateur. Pour en savoir plus sur la création d'un compte de service, consultez la page Créer des comptes de service.
Pour utiliser les commandes de ce document, identifiez les valeurs suivantes:
DESTINATION_PROJECT_ID : ID du projet contenant votre bucket de journaux.
CUSTOM_SA_PROJECT_ID : ID du projet contenant votre compte de service géré par l'utilisateur.
SINK_PROJECT_ID : ID du projet dans lequel vous prévoyez de créer le récepteur de journaux.
CUSTOM_SA: compte de service géré par l'utilisateur. Pour en savoir plus sur la création de comptes de service, consultez la page Créer des comptes de service.
Le format d'un compte de service géré par l'utilisateur se présente comme suit:
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
LOGGING_SA: compte de service Logging par défaut. Pour recevoir cet e-mail, exécutez la commande suivante:
gcloud logging settings describe --project=SINK_PROJECT_ID
Le résultat inclut les informations suivantes sur votre compte de service:
loggingServiceAccountId: serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com
BUCKET_NAME: nom de votre bucket de journaux.
Le chemin d'accès à la destination du récepteur d'un bucket de journaux se présente comme suit:
logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
Dans le projet contenant votre compte de service géré par l'utilisateur, assurez-vous que la contrainte booléenne
iam.disableCrossProjectServiceAccountUsage
de la règle d'administration n'est pas appliquée. Par défaut, cette contrainte est appliquée. Pour désactiver cette contrainte afin d'associer un compte de service à une ressource d'un autre projet, exécutez la commande suivante:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=CUSTOM_SA_PROJECT_ID
Pour en savoir plus sur l'activation des comptes de service dans plusieurs projets, consultez la section Activer l'association de comptes de service entre plusieurs projets.
Accorder des rôles IAM
Cette section décrit les conditions préalables à la création d'un récepteur utilisant un compte de service géré par l'utilisateur.
Dans le projet contenant le bucket de journaux qui est la destination des récepteurs de journaux, procédez comme suit:
Attribuez le rôle Rédacteur de bucket de journaux (
roles/logging.bucketWriter
) au compte de service géré par l'utilisateur. Ce rôle permet au compte de service géré par l'utilisateur d'écrire des journaux dans le bucket de journaux:gcloud projects add-iam-policy-binding DESTINATION_PROJECT_ID \ --member="serviceAccount:CUSTOM_SA" \ --role="roles/logging.bucketWriter"
Dans le projet Google Cloud dans lequel vous souhaitez créer des récepteurs de journaux utilisant le compte de service géré par l'utilisateur, procédez comme suit:
Attribuez le rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator
) au compte de service Cloud Logging sur le compte de service géré par l'utilisateur:gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \ --project=CUSTOM_SA_PROJECT_ID \ --member="serviceAccount:LOGGING_SA" \ --role="roles/iam.serviceAccountTokenCreator"
La commande précédente permet au compte de service Logging d'emprunter l'identité du compte de service géré par l'utilisateur à l'aide du rôle Créateur de jetons du compte de service (
roles/iam.serviceAccountTokenCreator
).L'emprunt d'identité d'un compte de service implique deux comptes principaux: le compte de service qui ne dispose pas des autorisations nécessaires pour accéder à une ressource et le compte de service titulaire de droits qui est autorisé à accéder à une ressource. Dans ce cas, le compte de service géré par l'utilisateur est le compte disposant de droits, car il est capable d'écrire des journaux dans un bucket de journaux du projet de destination. Le compte de service Logging dispose des privilèges nécessaires pour acheminer les journaux.
Pour en savoir plus sur le rôle Créateur de jetons de compte de service, consultez Rôles pour la gestion et l'emprunt d'identité des comptes de service: Créateur de jetons du compte de service.
Pour en savoir plus sur l'emprunt d'identité d'un compte de service, consultez À propos de l'emprunt d'identité d'un compte de service.
Attribuez le rôle Utilisateur du compte de service (
roles/iam.serviceAccountUser
) au compte principal qui crée les récepteurs de journaux. Plus précisément, un compte principal a besoin de l'autorisationiam.serviceAccounts.actAs
sur le compte de service:gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \ --member 'user:user@example.com' \ --role "roles/iam.serviceAccountUser"
La commande précédente permet à un utilisateur d'exécuter des opérations en tant que compte de service géré par l'utilisateur.
Pour en savoir plus sur le rôle Utilisateur d'un compte de service, consultez la section Rôles pour la gestion et l'emprunt d'identité des comptes de service: rôle Utilisateur d'un compte de service.
Créer un récepteur de journaux qui utilise un compte de service géré par l'utilisateur
gcloud
Pour créer un récepteur avec un compte de service géré par l'utilisateur, remplacez les variables par vos propres informations, puis exécutez la commande gcloud logging sinks create
avec l'option --custom-writer-identity
:
gcloud logging sinks create SINK_NAME logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
API
Pour créer un récepteur de journaux dans votre projet Google Cloud, utilisez projects.sinks.create dans l'API Logging. Dans l'objet LogSink, transmettez le paramètre
customWriterIdentity
et fournissez les valeurs requises appropriées dans le corps de la requête de méthode:name
: identifiant du 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.destination
: bucket de journaux vers lequel vous souhaitez acheminer vos journaux. Le chemin de destination a le format suivant:logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
Appelez la méthode projects.sinks.create pour créer le récepteur.
Pour en savoir plus sur la création de récepteurs à l'aide de l'API Logging, consultez la documentation de référence de LogSink.
Vérifier que le récepteur achemine les journaux
Dans cette section, vous allez utiliser la gcloud CLI pour écrire et lire une entrée de journal afin de vérifier que votre récepteur achemine correctement les journaux.
Pour vérifier que votre récepteur achemine correctement les journaux, procédez comme suit:
Remplacez les variables par vos propres informations et écrivez un exemple d'entrée de journal à l'aide de la commande
gcloud logging write
:gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
La commande précédente renvoie le message suivant:
Created log entry.
Pour lire l'entrée de journal que vous venez d'écrire, exécutez la commande suivante:
gcloud logging read 'textPayload="Test log entry"' \ --bucket=BUCKET_NAME --location=LOCATION \ --view=_AllLogs --project=SINK_PROJECT_ID
Étapes suivantes
Pour en savoir plus sur le routage de vos journaux vers des destinations compatibles, consultez la section Acheminer les journaux vers des destinations compatibles.
Pour en savoir plus sur la manière dont Logging achemine et stocke vos journaux, consultez la section Présentation du routage et du stockage.
Si vous rencontrez des problèmes lorsque vous utilisez des récepteurs pour acheminer les journaux, consultez la section Résoudre les problèmes liés aux journaux de routage.
Pour savoir comment afficher vos journaux routés dans leur destination, et découvrir comment les journaux sont formatés et organisés, consultez la page Afficher les journaux dans les destinations de récepteur.