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 Google Cloud projet. 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
La journalisation utilise un contrôle des accès au niveau du champ afin de masquer les
LogEntry
champs pour les utilisateurs d'un Google Cloud projet 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 au niveau du champ et des autorisations de vues de journaux sur un bucket Logging. Vous limitez et gérez le contrôle d'accès au niveau du champ
en utilisant la Google Cloud CLI.
Pour restreindre l'accès aux champs de journal, procédez comme suit :
- Configurez les champs
LogEntryrestreints 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
LogEntryrenvoyé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 d'accès imbriqués.
Vous pouvez également restreindre l'accès aux champs feuilles suivants :
Par exemple, vous pouvez restreindre 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 --versionindique la version 362.0.0 ou une version ultérieure.Pour installer la dernière version de gcloud CLI, exécutez la
gcloud components updatecommande :gcloud components updatePour savoir comment installer gcloud CLI, consultez Installer Google Cloud CLI.
Exécutez
gcloud config setpour configurer le projet par défaut Google Cloud 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_IDVérifiez que vous disposez de l'un des rôles IAM suivants pour le Google Cloud projet contenant 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 un contrôle des accès au niveau du champ
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 lors 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
gcloud logging buckets create
commande.
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 de champs restreints 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
gcloud logging buckets update
commande :
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 Google Cloud console,
procédez comme suit :
-
Dans la Google Cloud console, 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 le compte principal, puis cliquez sur Modifier.
- Dans le volet Modifier les autorisations, sélectionnez Accesseur de champ de journal 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 gcloud CLI, procédez comme suit :
Pour enregistrer les informations de la stratégie IAM actuelle dans un fichier, exécutez la
gcloud projects get-iam-policycommande et enregistrez la sortie dans un fichier :gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonLa commande précédente enregistre les informations dans un fichier nommé
policy.json.Mettez à jour le fichier
policy.jsonavec des liaisons supplémentaires.Dans l'exemple suivant, le champ
expressionne répertorie 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 comptes 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 les significations suivantes :
- 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 Identifiants des comptes principaux. Dans le champmembersdupolicy.jsonfichier, 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 des comptes principaux se présentent généralement sous la forme suivante :
Pour appliquer le fichier
policy.jsonmis à jour, exécutez lagcloud projects set-iam-policycommande :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
logNameest un champ dans le protobufLogEntry,log_namefait référence au même champ. Le champjsonPayload.fooBarfait référence à un champ différent dejsonPayload.foo_bar, car les noms de champ sousjsonPayloadsont 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 les autorisations IAM pourjsonPayload.fooet 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 Google Cloud console, procédez comme suit :
-
Dans la Google Cloud console, 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 le compte principal, puis cliquez sur Modifier.
- Dans le volet Modifier les autorisations, sélectionnez Accesseur de champ de journal 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 gcloud CLI, procédez comme suit :
Pour enregistrer les informations IAM dans un fichier, exécutez la
gcloud projects get-iam-policycommande et enregistrez la sortie dans un fichier :gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonLa commande précédente enregistre les informations dans un fichier nommé
policy.json.Mettez à jour le fichier
policy.jsonavec des liaisons supplémentaires.Dans l'exemple suivant, le champ
expressionrépertorie des champs spécifiques. Par conséquent, seuls les comptes principaux listés dans la sectionmembersont accès à ces champs des entrées de journal stockées 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 les significations suivantes :
- 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 Identifiants des comptes principaux. Dans le champmembersdupolicy.jsonfichier, 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 des comptes principaux se présentent généralement sous la forme suivante :
Pour appliquer le fichier
policy.jsonmis à jour, exécutez lagcloud projects set-iam-policycommande :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, une étiquette spécifique et un sous-champ httpRequest spécifique. Voici ce qui se passe 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 autorisés à accéder uniquement au champ
LogEntryjsonPayloadrestreint, tous les champs non restreints sont visibles, ainsi que le champjsonPayload.Pour les utilisateurs qui ne sont pas autorisés à afficher l'un des 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 sur un bucket de journaux, exécutez la commande suivante
gcloud logging buckets describe :
gcloud logging buckets describe BUCKET_ID --location=LOCATION
Exemple de commande :
gcloud logging buckets describe my-log-bucket --location=global
Quotas et limites
Lorsque vous configurez et utilisez le contrôle des 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.