Cette page explique comment acheminer des entrées de journal 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, ce qui vous permet de gérer de manière centralisée les autorisations de 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 qui utilise un compte de service géré par l'utilisateur que lorsque la destination du récepteur est un bucket de journaux ou un Google Cloud projet. L'exemple de ce document montre comment configurer un récepteur qui utilise un compte de service géré par l'utilisateur lorsque la destination est un bucket de journaux.
Nous vous recommandons de vérifier la configuration de votre récepteur de journaux lorsque vous apportez des modifications à votre stockage de journaux. Par exemple, si vous supprimez la destination d'un récepteur de journaux, supprimez le récepteur de journaux correspondant.
Avant de commencer
-
Dans la Google Cloud console, activez Cloud Shell.
En bas de la Google Cloud console, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.
Assurez-vous de disposer d'un compte de service géré par l'utilisateur, puis définissez les variables suivantes sur des valeurs appropriées pour votre compte de service géré par l'utilisateur :
CUSTOM_SA_PROJECT_ID : ID du projet contenant votre compte de service géré par l'utilisateur.
CUSTOM_SA : adresse e-mail de votre 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.
Assurez-vous de disposer d'un bucket de journaux pouvant servir de destination à un récepteur de journaux, puis définissez les variables suivantes sur des valeurs appropriées pour votre bucket de journaux. Si nécessaire, créez un bucket de journaux :
LOG_BUCKET_PROJECT_ID : ID du projet contenant votre bucket de journaux.
LOCATION : emplacement de votre bucket de journaux.
BUCKET_NAME : nom de votre bucket de journaux.
Identifiez le nom du compte de service Logging qui existe dans le projet dans lequel vous prévoyez de créer le récepteur de journaux, puis définissez les variables suivantes sur leurs valeurs appropriées :
SINK_PROJECT_ID : ID du projet dans lequel vous prévoyez de créer le récepteur de journaux.
LOGGING_SA : adresse e-mail du compte de service Logging par défaut. Pour obtenir cette adresse, exécutez la commande suivante :
gcloud logging settings describe --project=SINK_PROJECT_IDDans la réponse, la ligne commençant par
loggingServiceAccountIdindique l'adresse e-mail de votre compte de service.
Dans le projet contenant votre compte de service géré par l'utilisateur, assurez-vous que la contrainte booléenne de la règle d'administration
iam.disableCrossProjectServiceAccountUsagen'est pas appliquée. Par défaut, cette contrainte est appliquée. Pour désactiver cette contrainte afin de pouvoir associer un compte de service à une ressource dans un autre projet, exécutez la commande suivante :gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=CUSTOM_SA_PROJECT_IDPour en savoir plus sur l'activation des comptes de service entre les projets, consultez la section Activer l'association des comptes de service à plusieurs projets.
Accorder des rôles IAM
Cette section décrit les prérequis pour créer un récepteur qui utilise un compte de service géré par l'utilisateur.
Autoriser le compte de service géré par l'utilisateur à écrire des entrées de journal dans la destination du récepteur
Accordez au compte de service géré par l'utilisateur les autorisations nécessaires pour écrire des entrées de journal dans la destination du récepteur que vous créerez à une étape ultérieure. La destination du récepteur sera un bucket de journaux stocké dans le projet nommé LOG_BUCKET_PROJECT_ID.
Pour accorder les autorisations requises au compte de service géré par l'utilisateur, attribuez-lui le rôle Rédacteur de bucket de journaux (roles/logging.bucketWriter) sur le projet contenant le bucket de journaux :
gcloud projects add-iam-policy-binding LOG_BUCKET_PROJECT_ID \
--member='serviceAccount:CUSTOM_SA' \
--role='roles/logging.bucketWriter'
Pour en savoir plus sur la commande précédente, consultez
gcloud projects add-iam-policy-binding.
Configurer l'emprunt d'identité du compte de service
Configurez le compte de service Cloud Logging par défaut, LOGGING_SA, afin qu'il puisse emprunter l'identité du compte de service géré par l'utilisateur, CUSTOM_SA. Le compte de service Cloud Logging par défaut existe dans le Google Cloud projet dans lequel vous souhaitez créer des récepteurs de journaux qui utilisent le compte de service géré par l'utilisateur.
Pour configurer l'emprunt d'identité du compte de service, 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'
L'emprunt d'identité du 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 porteur de privilèges qui dispose des autorisations nécessaires pour accéder à une ressource. Dans ce cas, le compte de service géré par l'utilisateur est le compte porteur de privilèges, car il peut écrire des entrées de journal dans la destination du récepteur, qui est un bucket de journaux dans le projet nommé LOG_BUCKET_PROJECT_ID. Le compte de service Logging dispose des privilèges nécessaires pour acheminer les entrées de journal.
Pour en savoir plus sur le rôle Créateur de jetons du compte de service, consultez la section Rôle Créateur de jetons du compte de service.
Pour en savoir plus sur l'emprunt d'identité du compte de service, consultez la section À propos de l'emprunt d'identité du compte de service.
Autoriser le compte principal à exécuter des opérations en tant que compte de service géré par l'utilisateur
Accordez au compte principal qui créera le récepteur les autorisations nécessaires pour exécuter des opérations en tant que compte de service géré par l'utilisateur.
Pour accorder les autorisations requises, attribuez au compte principal le
rôle Utilisateur du compte de service (roles/iam.serviceAccountUser)
sur le Google Cloud projet qui stocke le
compte de service géré par l'utilisateur, CUSTOM_SA_PROJECT_ID.
Avant d'exécuter la commande suivante, effectuez les remplacements suivants :
- 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 quePRINCIPALpeut avoir, consultez la section Identifiants des comptes principaux.
Exécutez la
gcloud iam service-accounts add-iam-policy-binding
commande :
gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'
Si vous utilisez des rôles personnalisés, le compte principal a besoin de l'autorisation iam.serviceAccounts.actAs.
Pour en savoir plus sur le rôle Utilisateur du compte de service, consultez la section Rôle Utilisateur du compte de service.
Créer un récepteur de journaux qui utilise un compte de service géré par l'utilisateur
Pour créer un récepteur avec un compte de service géré par l'utilisateur, exécutez la commande gcloud logging sinks create et incluez l'option --custom-writer-identity.
Avant d'exécuter la commande suivante, effectuez les remplacements suivants :
- SINK_NAME : nom du récepteur de journaux.
Exécutez la
gcloud logging sinks create
commande :
gcloud logging sinks create SINK_NAME \
logging.googleapis.com/projects/LOG_BUCKET_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID
Vérifier que votre récepteur achemine les entrées de journal
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 entrées de journal.
Pour vérifier que votre récepteur achemine correctement les entrées de journal, procédez comme suit :
Exécutez la commande
gcloud logging write:Avant d'exécuter la commande suivante, effectuez les remplacements suivants :
- LOG_NAME : nom du journal. Par exemple, vous pouvez définir ce champ sur
mylog.
Exécutez la
gcloud logging writecommande :gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_IDLa commande précédente renvoie le message suivant :
Created log entry.- LOG_NAME : nom du journal. Par exemple, vous pouvez définir ce champ sur
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
Étape suivante
Pour en savoir plus sur l'acheminement des entrées de journal vers des destinations compatibles, consultez la section Acheminer les journaux vers des destinations compatibles.
Pour obtenir une présentation de la manière dont Logging achemine et stocke vos entrées de journal, consultez la section Présentation du routage et du stockage.
Si vous rencontrez des problèmes lors de l'utilisation de récepteurs pour acheminer des entrées de journal, consultez la section Résoudre les problèmes de routage des journaux.
Pour savoir comment afficher vos entrées de journal dans leurs destinations, et découvrir comment les entrées de journal sont formatées et organisées, consultez la section Afficher les journaux dans les destinations de récepteur.