In diesem Dokument werden die Zugriffssteuerungen auf Feldebene und ihre Festlegung für einen Logging-Bucket beschrieben.
Mit den Zugriffssteuerungen auf Feldebene können Sie einzelne LogEntry
-Felder für Nutzer eines Google Cloud-Projekts ausblenden, sodass Sie eine detailliertere Möglichkeit zum Festlegen der Logdaten haben, auf die ein Nutzer zugreifen kann.
Übersicht
In Logging wird die Zugriffssteuerung auf Feldebene verwendet, um LogEntry
-Felder für Nutzer eines Google Cloud-Projekts auszublenden, die nicht die erforderlichen Berechtigungen zum Anzeigen der Felder haben. Im Vergleich zu Logansichten, in denen der gesamte LogEntry
ausgeblendet wird, sind bei Zugriffssteuerungen auf Feldebene einzelne Felder des LogEntry
ausgeblendet. Sie können für einen Logging-Bucket sowohl Zugriffssteuerungen auf Feldebene als auch Logberechtigungen festlegen. Sie beschränken und verwalten die Zugriffssteuerung auf Feldebene mit der Google Cloud CLI.
So schränken Sie den Zugriff auf Logfelder ein:
- Konfigurieren Sie die eingeschränkten
LogEntry
-Felder in einem Log-Bucket. - Weisen Sie nur Nutzern, die sich die eingeschränkten Felder ansehen müssen, die IAM-Rolle
logging.fieldAccessor
für diesen Feldpfad oder eine Rolle mit ähnlichen Berechtigungen zu.
Logging prüft IAM-Berechtigungen, wenn ein Nutzer Logs aus einem Bucket abfragt, für den eingeschränkte Felder festgelegt sind. Alle Felder mit konfigurierten ACLs werden Nutzern ohne die entsprechende Rolle logging.FieldAccessor
für dieses Feld verweigert. Dies bedeutet:
- Der Nutzer erhält einen Fehler bezüglich einer verweigerten Berechtigung, wenn er versucht, die eingeschränkten Felder direkt abzufragen.
- Bei globalen Suchen werden die Inhalte der abgelehnten Felder nicht berücksichtigt.
- In allen zurückgegebenen
LogEntry
-Ergebnissen werden die eingeschränkten Felder weggelassen.
Eingeschränkte Felder
Sie können den Zugriff auf das Feld jsonPayload
einschränken, wodurch auch der Zugriff auf die verschachtelten Pfade eingeschränkt wird.
Sie können den Zugriff auch auf die untergeordneten Felder der folgenden Elemente einschränken:
Sie können beispielsweise den Zugriff auf das Feld labels.check_id
einschränken.
Hinweise
Bevor Sie Zugriffssteuerungen auf Feldebene festlegen, gehen Sie so vor:
Prüfen Sie, ob
gcloud --version
Version 362.0.0 oder höher meldet.Führen Sie den Befehl
gcloud components update
aus, um die neueste Version der gcloud CLI zu installieren:gcloud components update
Eine Anleitung zum Installieren der gcloud CLI finden Sie unter Google Cloud CLI installieren.
Führen Sie
gcloud config set
aus, um das Standard-Google Cloud-Projekt für Ihre Google Cloud CLI-Befehle zu konfigurieren. Bevor Sie den Befehl ausführen, ersetzen Sie die folgenden Werte:- PROJECT_ID: Die Kennung des Projekts.
Befehl:
gcloud config set project PROJECT_ID
Prüfen Sie, ob Sie eine der folgenden IAM für das Google Cloud-Projekt haben, das den Bucket enthält:
Informationen zum Festlegen von IAM-Rollen finden Sie in der Anleitung zur Zugriffssteuerung für Logging.
Zugriffssteuerung auf Feldebene festlegen
Einschränkungen auf Feldebene werden auf Log-Bucket-Ebene konfiguriert und können auf einen vorhandenen Log-Bucket oder beim Erstellen eines neuen Log-Buckets angewendet werden.
Felder in einem neuen Bucket einschränken
Führen Sie den Befehl gcloud logging buckets create
aus, um Logfelder beim Erstellen eines neuen Log-Buckets einzuschränken.
Bevor Sie den Befehl ausführen, ersetzen Sie die folgenden Werte:
- BUCKET_ID: Der Name oder die ID des Log-Buckets.
- LOCATION: Der Speicherort des Log-Buckets.
- DESCRIPTION: Die Beschreibung des Log-Buckets.
- RESTRICTED_FIELDS: Eine durch Kommas getrennte Liste der eingeschränkten Felder.
Befehl:
gcloud logging buckets create BUCKET_ID --location=LOCATION \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS
Beispielbefehl:
gcloud logging buckets create new-log-bucket --location=global \ --description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
Felder in einem vorhandenen Bucket einschränken
Führen Sie den Befehl gcloud logging buckets update
aus, um Logfelder in einem vorhandenen Log-Bucket einzuschränken:
gcloud logging buckets update BUCKET_ID --location=LOCATION \
--restricted-fields=RESTRICTED_FIELDS
Beispielbefehl:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
Wenn Sie Ihre bestehenden Einschränkungen um Felder erweitern möchten, muss der Aktualisierungsbefehl die gesamten eingeschränkten Felder noch einmal auflisten. Wenn Sie basierend auf dem vorherigen Beispiel den Zugriff auf das Feld jsonPayload.data.entryDate
zusätzlich zu den bereits eingeschränkten Feldern jsonPayload.data.ssn
und httpRequest.status
einschränken möchten, würde Ihr Befehl so aussehen:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
Wenn Sie die bereits eingeschränkten Felder nicht noch einmal aufgelistet haben und gerade jsonPayload.data.entryDate
aufgelistet haben, werden sowohl jsonPayload.data.ssn
als auch httpRequest.status
als eingeschränkte Felder entfernt.
Zugriff auf eingeschränkte Felder verwalten
Standardmäßig blendet Logging alle eingeschränkten Felder für Nutzer aus, die nicht die Rolle logging.fieldAccessor
oder eine Rolle mit ähnlichen Berechtigungen haben.
Logging zeigt die eingeschränkten Felder für Nutzer an, die sowohl die Berechtigung zum Aufrufen von Logs im Bucket als auch die Rolle logging.fieldAccessor
haben.
Sie können das Standardverhalten ändern, um Teilmengen von eingeschränkten Feldern auf bestimmte Nutzer zu beschränken.
Berechtigungen für alle eingeschränkten Felder gewähren
Wenn Sie Nutzern Berechtigungen für alle eingeschränkten Felder gewähren möchten, weisen Sie ihnen die Rolle logging.fieldAccessor
oder eine benutzerdefinierte Rolle zu, die die Rolle logging.fieldAccessor
enthält.
Console
Führen Sie die folgenden Schritte aus, um Nutzern über die Google Cloud Console die Rolle logging.fieldAccessor
zuzuweisen:
-
Öffnen Sie in der Google Cloud Console die Seite IAM:
Rufen Sie IAM auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift IAM & Admin ist.
- Wählen Sie die Hauptperson aus und klicken Sie auf Bearbeiten.
- Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsberechtigter für Logfelder für die Rolle aus.
- Wählen Sie IAM-Bedingung hinzufügen aus.
- Geben Sie in die Felder Titel und Beschreibung einen Titel und eine Beschreibung ein.
Wählen Sie den Tab Bedingungseditor aus und geben Sie diesen Ausdruck ein:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
Klicken Sie auf Speichern.
Die IAM-Berechtigungen (Identity and Access Management) werden sofort aktualisiert.
gcloud
Führen Sie die folgenden Schritte aus, um Nutzern über die gcloud CLI die Rolle logging.fieldAccessor
zuzuweisen:
Wenn Sie die aktuellen IAM-Richtlinieninformationen in einer Datei speichern möchten, führen Sie den Befehl
gcloud projects get-iam-policy
aus und speichern Sie die Ausgabe in einer Datei:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Mit dem vorherigen Befehl werden die Informationen in einer Datei namens
policy.json
gespeichert.Aktualisieren Sie die Datei
policy.json
mit zusätzlichen Bindungen.Im Folgenden ist im Feld
expression
nur ein Log-Bucket aufgeführt. Daher sind alle Felder für Logeinträge, die in diesem Log-Bucket gespeichert sind, für Principals zugänglich, die im Abschnittmembers
aufgeführt sind."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]
In diesem Beispiel haben die Felder folgende Bedeutung:
- PRINCIPAL: Eine Kennung für das Hauptkonto, dem Sie die Rolle zuweisen möchten. Hauptkonto-Kennzeichnungen haben normalerweise das folgende Format:
PRINCIPAL-TYPE:ID
. Beispiel:user:my-user@example.com
Eine vollständige Liste der Formate fürPRINCIPAL
finden Sie unter Hauptkonto-IDs. Verwenden Sie im Feldmembers
der Dateipolicy.json
das Format"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: Eine Beschreibung der Bedingung.
- TITLE: Ein Titel für die Bedingung.
- PRINCIPAL: Eine Kennung für das Hauptkonto, dem Sie die Rolle zuweisen möchten. Hauptkonto-Kennzeichnungen haben normalerweise das folgende Format:
Führen Sie den Befehl
gcloud projects set-iam-policy
aus, um die aktualisiertepolicy.json
-Datei anzuwenden:gcloud projects set-iam-policy PROJECT_ID policy.json
Die IAM-Berechtigungen (Identity and Access Management) werden sofort aktualisiert.
Berechtigungen für eine Teilmenge eingeschränkter Felder gewähren
Wenn Sie Nutzern Berechtigungen für eine Teilmenge der eingeschränkten Felder gewähren möchten, legen Sie die Felder fest, auf die Nutzer zugreifen können, wenn sie die Rolle logging.fieldAccessor
zuweisen oder eine benutzerdefinierte Rolle festlegen, die logging.fieldAccessor
enthält.
Wichtige Hinweise:
Die Schreibweise (einschließlich Groß-/Kleinschreibung) des eingeschränkten Felds, wie sie in der Bucket-Konfiguration angezeigt wird, muss mit der Schreibweise des eingeschränkten Felds im Namen der IAM-Berechtigung übereinstimmen. Wenn Sie beispielsweise das eingeschränkte Feld als
jsonPayload
festlegen, müssen Sie die Berechtigung für das FeldjsonPayload
und nicht für das FeldJsonpayload
erteilen.Bei Feldpfaden, einschließlich Zuordnungsschlüsselstrings, wird zwischen Groß- und Kleinschreibung unterschieden. protobuf-Feldpfade können jedoch entweder ohne Berücksichtigung der Groß-/Kleinschreibung (snake_case) oder mit Berücksichtigung der Groß-/Kleinschreibung in Camel-Case-Schreibweise ausgedrückt werden.
Beispiel:
logName
ist ein Feld imLogEntry
-protobuf.log_name
bezieht sich auf dasselbe Feld. Das FeldjsonPayload.fooBar
verweist auf ein anderes Feld alsjsonPayload.foo_bar
, da Feldnamen unterjsonPayload
Zuordnungsstringschlüssel sind. Es bezieht sich jedoch aufjson_payload.fooBar
.Auch wenn Feldpfade gültige Verweise auf dasselbe Feld sind, müssen Sie beim Konfigurieren von Einschränkungen und IAM-Berechtigungen die Schreibweise (einschließlich Groß-/Kleinschreibung) beachten. Wenn Sie beispielsweise eine Einschränkung für
jsonPayload.foo
angeben, müssen Sie IAM-Berechtigungen fürjsonPayload.foo
und nicht fürjson_payload.foo
konfigurieren.
Weitere Informationen zu gültigen Logfeldtypen finden Sie unter Logging-Abfragespalte: Werte und Conversions.
Console
So gewähren Sie Nutzern über die Google Cloud Console Zugriff auf ein eingeschränktes Feld:
-
Öffnen Sie in der Google Cloud Console die Seite IAM:
Rufen Sie IAM auf.
Wenn Sie diese Seite über die Suchleiste suchen, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift IAM & Admin ist.
- Wählen Sie die Hauptperson aus und klicken Sie auf Bearbeiten.
- Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsberechtigter für Logfelder für die Rolle aus.
- Wählen Sie IAM-Bedingung hinzufügen aus.
- Geben Sie in die Felder Titel und Beschreibung einen Titel und eine Beschreibung ein.
Wählen Sie den Tab Bedingungseditor aus und geben Sie diesen Ausdruck ein:
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
Klicken Sie auf Speichern.
Die IAM-Berechtigungen (Identity and Access Management) werden sofort aktualisiert.
gcloud
So gewähren Sie Nutzern über die gcloud CLI Zugriff auf ein eingeschränktes Feld:
Wenn Sie die IAM-Informationen in einer Datei speichern möchten, führen Sie den Befehl
gcloud projects get-iam-policy
aus und speichern Sie die Ausgabe in einer Datei:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Mit dem vorherigen Befehl werden die Informationen in einer Datei namens
policy.json
gespeichert.Aktualisieren Sie die Datei
policy.json
mit zusätzlichen Bindungen.Im Folgenden sind bestimmte Felder im
expression
-Feld aufgeführt. Daher haben nur Principals, die im Abschnittmembers
aufgeführt sind, Zugriff auf die Felder der Logeinträge, die im angegebenen Log-Bucket gespeichert sind."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" } ]
Im vorherigen Beispiel haben die Felder folgende Bedeutung:
- PRINCIPAL: Eine Kennung für das Hauptkonto, dem Sie die Rolle zuweisen möchten. Hauptkonto-Kennzeichnungen haben normalerweise das folgende Format:
PRINCIPAL-TYPE:ID
. Beispiel:user:my-user@example.com
Eine vollständige Liste der Formate fürPRINCIPAL
finden Sie unter Hauptkonto-IDs. Verwenden Sie im Feldmembers
der Dateipolicy.json
das Format"PRINCIPAL-TYPE":"ID"
. - DESCRIPTION: Eine Beschreibung der Bedingung.
- TITLE: Ein Titel für die Bedingung.
- PRINCIPAL: Eine Kennung für das Hauptkonto, dem Sie die Rolle zuweisen möchten. Hauptkonto-Kennzeichnungen haben normalerweise das folgende Format:
Führen Sie den Befehl
gcloud projects set-iam-policy
aus, um die aktualisiertepolicy.json
-Datei anzuwenden:gcloud projects set-iam-policy PROJECT_ID policy.json
Die IAM-Berechtigungen (Identity and Access Management) werden sofort aktualisiert.
Beispiel
Angenommen, ein Log-Bucket schränkt das Feld jsonPayload
, ein bestimmtes Label und ein bestimmtes untergeordnetes Feld httpRequest
ein. Folgendes passiert, wenn ein Nutzer seine Protokolleinträge prüft:
Für Nutzer mit der Berechtigung zum Zugriff auf alle eingeschränkten Felder sind alle Felder in einem Logeintrag sichtbar.
Für Nutzer, die nur zum Zugriff auf das
LogEntry
-FeldjsonPayload
berechtigt sind, sind alle uneingeschränkten Felder und das FeldjsonPayload
sichtbar.Für Nutzer ohne Berechtigung zum Aufrufen der eingeschränkten Felder sind nur die uneingeschränkten Felder sichtbar.
Wenn ein Nutzer eine Abfrage mit einer globalen Einschränkung schreibt, werden Logeinträge, die ein eingeschränktes Feld enthalten, aus der Antwort ausgeschlossen.
Eingeschränkte Felder auflisten
Führen Sie den folgenden gcloud logging buckets describe
-Befehl aus, um die eingeschränkten Felder in einem Log-Bucket aufzulisten:
gcloud logging buckets describe BUCKET_ID --location=LOCATION
Beispielbefehl:
gcloud logging buckets describe my-log-bucket --location=global
Kontingente und Limits
Beachten Sie beim Einrichten und Verwenden der Zugriffssteuerung auf Feldebene Folgendes:
- Anzahl eingeschränkter Felder: Für jeden Log-Bucket können Sie bis zu 20 Felder einschränken.
- Größe der eingeschränkten Felder: Der Pfad des eingeschränkten Felds muss kleiner als 800 B sein.
Weitere Informationen zu den Limits, die für Ihre Nutzung von Cloud Logging gelten können, finden Sie unter Kontingente und Limits.