Ce document décrit les contrôles d'accès au niveau du champ et explique comment les définir sur un bucket Logging.
Les contrôles d'accès au niveau des champs vous permettent de masquer des champs LogEntry
individuels pour les utilisateurs d'un projet Google Cloud. Vous disposez ainsi d'un moyen plus précis de contrôler les données de journaux auxquelles un utilisateur peut accéder.
Présentation
Logging utilise contrôle des accès au niveau du champ afin de masquer les champs LogEntry
pour les utilisateurs d'un projet Google Cloud qui ne disposent pas des autorisations requises pour les afficher. Par rapport aux vues de journaux, qui masquent l'intégralité de LogEntry
, les contrôles d'accès au niveau du champ masquent les champs individuels de LogEntry
. Vous pouvez définir des contrôles d'accès et des vues de journaux au niveau du champ sur un bucket Logging. Vous limitez et gérez le contrôle d'accès au niveau du champ à l'aide de la Google Cloud CLI.
Pour restreindre l'accès aux champs de journal, procédez comme suit :
- Configurez les champs
LogEntry
restreints sur un bucket de journaux. - N'attribuez le rôle IAM
logging.fieldAccessor
(ou un rôle contenant des autorisations similaires) qu'aux utilisateurs ayant besoin d'afficher les champs restreints pour ce chemin d'accès au champ.
Logging vérifie les autorisations IAM lorsqu'un utilisateur interroge les journaux d'un bucket pour lequel des champs restreints sont définis. Tout accès à des champs dont les LCA sont configurées est refusé pour les utilisateurs ne disposant pas du logging.FieldAccessor
correspondant pour ce champ, ce qui signifie que :
- L'utilisateur reçoit une erreur de refus d'autorisation s'il tente d'interroger directement des champs restreints.
- Les recherches globales ne prennent pas en compte le contenu des champs restreints.
- Tous les résultats
LogEntry
renvoyés omettent les champs restreints.
Champs restreints
Vous pouvez restreindre l'accès au champ jsonPayload
, ce qui limite également l'accès à ses chemins imbriqués.
Vous pouvez également restreindre l'accès aux champs de feuilles des éléments suivants:
Par exemple, vous pouvez limiter l'accès au champ labels.check_id
.
Avant de commencer
Avant de commencer à définir des contrôles d'accès au niveau du champ, procédez comme suit :
Vérifiez que
gcloud --version
signale la version 362.0.0 ou ultérieure.Pour installer la dernière version de gcloud CLI, exécutez la commande
gcloud components update
:gcloud components update
Pour savoir comment installer gcloud CLI, consultez la page Installer Google Cloud CLI.
Exécutez
gcloud config set
pour configurer le projet Google Cloud par défaut pour vos commandes Google Cloud CLI. Avant d'exécuter la commande, effectuez le remplacement suivant:- PROJECT_ID: identifiant du projet.
Commande :
gcloud config set project PROJECT_ID
Vérifiez que vous disposez de l'un des rôles IAM suivants pour le projet Google Cloud qui contient le bucket:
Pour en savoir plus sur la définition des rôles IAM, consultez le guide du contrôle des accès de Logging.
Définir le contrôle des accès au niveau des champs
Les restrictions au niveau du champ sont configurées au niveau du bucket de journaux et peuvent être appliquées à un bucket de journaux existant ou au moment de la création d'un bucket de journaux.
Restreindre les champs sur un nouveau bucket
Pour restreindre les champs de journal lors de la création d'un bucket de journaux, exécutez la commande gcloud logging buckets create
.
Avant d'exécuter la commande, effectuez les remplacements suivants :
- BUCKET_ID: nom ou ID du bucket de journaux.
- LOCATION: emplacement du bucket de journaux.
- DESCRIPTION: description du bucket de journaux.
- RESTRICTED_FIELDS: liste des champs soumis à restriction, séparés par une virgule.
Commande :
gcloud logging buckets create BUCKET_ID --location=LOCATION \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS
Exemple de commande :
gcloud logging buckets create new-log-bucket --location=global \ --description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
Restreindre les champs sur un bucket existant
Pour restreindre les champs de journal sur un bucket de journaux existant, exécutez la commande gcloud logging buckets update
:
gcloud logging buckets update BUCKET_ID --location=LOCATION \
--restricted-fields=RESTRICTED_FIELDS
Exemple de commande :
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
Si vous souhaitez ajouter des champs à vos restrictions existantes, votre commande "update" doit répertorier l'ensemble des champs restreints. Sur la base de l'exemple précédent, si vous souhaitez limiter l'accès au champ jsonPayload.data.entryDate
en plus des champs déjà restreints jsonPayload.data.ssn
et httpRequest.status
, votre commande doit se présenter comme suit :
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
Si vous omettez les champs déjà restreints pour n'inclure que jsonPayload.data.entryDate
dans la commande, jsonPayload.data.ssn
et httpRequest.status
seront supprimés en tant que champs restreints.
Gérer l'accès aux champs restreints
Par défaut, Logging masque tous les champs restreints aux utilisateurs qui ne possèdent pas le rôle logging.fieldAccessor
ou un rôle avec des autorisations similaires.
Logging expose les champs restreints aux utilisateurs disposant à la fois des autorisations permettant d'afficher les journaux du bucket et du rôle logging.fieldAccessor
.
Vous pouvez modifier le comportement par défaut pour limiter les sous-ensembles de champs restreints à des utilisateurs spécifiques.
Accorder des autorisations sur tous les champs restreints
Pour autoriser les utilisateurs à accéder à tous les champs restreints, attribuez-leur le rôle logging.fieldAccessor
ou un rôle personnalisé contenant le rôle logging.fieldAccessor
.
Console
Pour attribuer le rôle logging.fieldAccessor
aux utilisateurs à l'aide de la console Google Cloud, procédez comme suit:
-
Dans la console Google Cloud, accédez à la page 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.
- Sélectionnez l'administrateur principal, puis cliquez sur Modifier.
- Dans le volet Modifier les autorisations, sélectionnez Accesseur de champs de journaux pour le rôle.
- Sélectionnez Ajouter une condition IAM.
- Saisissez un titre et une description dans les champs Titre et Description.
Sélectionnez l'onglet Éditeur de conditions, puis saisissez l'expression suivante :
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
Sélectionnez Enregistrer.
Les autorisations Identity and Access Management sont immédiatement mises à jour.
gcloud
Pour attribuer le rôle logging.fieldAccessor
aux utilisateurs à l'aide de la gcloud CLI, procédez comme suit:
Pour enregistrer les informations sur la stratégie IAM actuelle dans un fichier, exécutez la commande
gcloud projects get-iam-policy
et enregistrez la sortie dans un fichier:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
La commande précédente enregistre les informations dans un fichier nommé
policy.json
.Mettez à jour le fichier
policy.json
avec des liaisons supplémentaires.Dans l'exemple suivant, le champ
expression
ne liste qu'un bucket de journaux. Par conséquent, tous les champs des entrées de journal stockées dans ce bucket de journaux sont accessibles aux principaux listés dans la sectionmembers
."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
Dans l'exemple précédent, les champs ont la signification suivante:
- PRINCIPAL: identifiant du compte principal auquel vous souhaitez accorder le rôle. Les identifiants 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 pouvant être utilisés pourPRINCIPAL
, consultez la section Identifiants principaux. Dans le champmembers
du fichierpolicy.json
, utilisez le format"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: description de la condition.
- TITLE: titre de la condition.
- PRINCIPAL: identifiant du compte principal auquel vous souhaitez accorder le rôle. Les identifiants principaux se présentent généralement sous la forme suivante :
Pour appliquer le fichier
policy.json
mis à jour, exécutez la commandegcloud projects set-iam-policy
:gcloud projects set-iam-policy PROJECT_ID policy.json
Les autorisations Identity and Access Management sont immédiatement mises à jour.
Accorder des autorisations sur un sous-ensemble de champs restreints
Pour accorder aux utilisateurs des autorisations sur un sous-ensemble des champs restreints, définissez les champs auxquels les utilisateurs peuvent accéder lors de l'attribution du rôle logging.fieldAccessor
ou de la définition d'un rôle personnalisé contenant le rôle logging.fieldAccessor
.
Veuillez noter les points suivants :
L'orthographe et la casse du champ restreint tel qu'il apparaît dans la configuration du bucket doivent correspondre à l'orthographe et à la casse du nom de l'autorisation IAM. Par exemple, si vous définissez le champ restreint sur
jsonPayload
, vous devez accorder l'autorisation sur le champjsonPayload
, et non sur le champJsonpayload
.Les chemins d'accès de champ (y compris les chaînes de clé de mappage) sont sensibles à la casse. Cependant, les chemins d'accès de champ protobuf peuvent être exprimés de manière non sensible à la casse (snake_case) ou de manière sensible à la casse (camelCase).
Par exemple, si
logName
est un champ dans le protobufLogEntry
,log_name
fait référence au même champ. Le champjsonPayload.fooBar
fait référence à un champ différent dejsonPayload.foo_bar
, car les noms de champ sousjsonPayload
sont des clés de chaîne de mappage. Cependant, le champ fait bien référence àjson_payload.fooBar
.Même si les chemins d'accès de champ sont des références valides à un même champ, vous devez vérifier l'orthographe et la casse lorsque vous configurez des restrictions et des autorisations IAM. Par exemple, si vous spécifiez une restriction sur
jsonPayload.foo
, vous devez configurer des autorisations IAM pourjsonPayload.foo
et non pourjson_payload.foo
.
Pour plus d'informations sur les types de champs de journal valides, consultez la page Langage de requête Logging : valeurs et conversions.
Console
Pour autoriser les utilisateurs à accéder à un champ restreint à l'aide de la console Google Cloud, procédez comme suit:
-
Dans la console Google Cloud, accédez à la page 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.
- Sélectionnez l'administrateur principal, puis cliquez sur Modifier.
- Dans le volet Modifier les autorisations, sélectionnez Accesseur de champs de journaux pour le rôle.
- Sélectionnez Ajouter une condition IAM.
- Saisissez un titre et une description dans les champs Titre et Description.
Sélectionnez l'onglet Éditeur de conditions, puis saisissez l'expression suivante :
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
Sélectionnez Enregistrer.
Les autorisations Identity and Access Management sont immédiatement mises à jour.
gcloud
Pour autoriser les utilisateurs à accéder à un champ restreint à l'aide de la gcloud CLI, procédez comme suit:
Pour enregistrer les informations IAM dans un fichier, exécutez la commande
gcloud projects get-iam-policy
et enregistrez la sortie dans un fichier:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
La commande précédente enregistre les informations dans un fichier nommé
policy.json
.Mettez à jour le fichier
policy.json
avec des liaisons supplémentaires.Dans ce qui suit, le champ
expression
liste des champs spécifiques. Par conséquent, seuls les principaux listés dans la sectionmembers
ont accès aux champs des entrées de journal stockés dans le bucket de journaux spécifié."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_ID/fields/{field}\") == 'RESTRICTED_FIELDS'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
Dans l'exemple précédent, les champs ont la signification suivante:
- PRINCIPAL: identifiant du compte principal auquel vous souhaitez accorder le rôle. Les identifiants 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 pouvant être utilisés pourPRINCIPAL
, consultez la section Identifiants principaux. Dans le champmembers
du fichierpolicy.json
, utilisez le format"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: description de la condition.
- TITLE: titre de la condition.
- PRINCIPAL: identifiant du compte principal auquel vous souhaitez accorder le rôle. Les identifiants principaux se présentent généralement sous la forme suivante :
Pour appliquer le fichier
policy.json
mis à jour, exécutez la commandegcloud projects set-iam-policy
:gcloud projects set-iam-policy PROJECT_ID policy.json
Les autorisations Identity and Access Management sont immédiatement mises à jour.
Exemple
Supposons qu'un bucket de journaux limite le champ jsonPayload
, un libellé spécifique et un sous-champ httpRequest
spécifique. Voici ce qui se produit lorsqu'un utilisateur examine ses entrées de journal :
Pour les utilisateurs autorisés à accéder à tous les champs restreints, tous les champs d'une entrée de journal sont visibles.
Pour les utilisateurs n'ayant l'autorisation d'accéder qu'au champ restreint
jsonPayload
LogEntry
, tous les champs non restreints sont visibles, et le champjsonPayload
l'est également.Pour les utilisateurs qui ne sont pas autorisés à accéder aux champs restreints, seuls les champs non restreints sont visibles.
Si un utilisateur écrit une requête avec une restriction globale, les entrées de journal contenant un champ restreint sont omises de la réponse.
Répertorier les champs restreints
Pour répertorier les champs restreints d'un bucket de journaux, exécutez la commande gcloud logging buckets describe
suivante:
gcloud logging buckets describe BUCKET_ID --location=LOCATION
Exemple de commande :
gcloud logging buckets describe my-log-bucket --location=global
Quotas et limites
Lors de la configuration et de l'utilisation du contrôle d'accès au niveau du champ, tenez compte des points suivants :
- Nombre de champs restreints : vous pouvez restreindre jusqu'à 20 champs pour chaque bucket de journaux.
- Taille des champs restreints : le chemin d'accès du champ restreint doit être inférieur à 800 octets.
Pour plus d'informations sur les limites pouvant s'appliquer à votre utilisation de Cloud Logging, consultez la page Quotas et limites.