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.
Überblick
Logging verwendet die Zugriffssteuerung auf Feldebene, um LogEntry
-Felder für Nutzer eines Google Cloud-Projekts auszublenden, die nicht die erforderlichen Berechtigungen zum Ansehen 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. Die Zugriffssteuerung auf Feldebene wird über die Google Cloud CLI eingeschränkt und verwaltet.
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 eine beliebige Kombination der folgenden LogEntry
-Felder beschränken:
LogEntry -Feld |
Verschachtelte Felder des übergeordneten LogEntry -Felds |
---|---|
jsonPayload |
Benutzerdefiniert |
textPayload |
Keine |
protoPayload |
Dienstspezifisch |
httpRequest |
Verschachtelte httpRequest -Felder |
labels |
Benutzerdefiniert |
sourceLocation |
Verschachtelte sourceLocation -Felder |
Durch die Einschränkung des Zugriffs auf ein Feld mit verschachtelten Feldern (z. B. jsonPayload
oder bestimmte jsonPayload
-Unterpfade) wird auch der Zugriff auf jeden der verschachtelten Pfade eingeschränkt.
Hinweise
Bevor Sie Zugriffssteuerungen auf Feldebene festlegen, gehen Sie so vor:
Prüfen Sie, ob
gcloud --version
die Version der Google Cloud CLI als Version 362.0.0 oder höher meldet.Führen Sie den folgenden
update
-Befehl 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.
Prüfen Sie, ob Sie eine der folgenden IAM-Rollen 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 Bucket-Ebene konfiguriert und können auf einen vorhandenen Bucket oder beim Erstellen eines neuen Buckets angewendet werden.
Felder in einem neuen Bucket einschränken
Führen Sie den folgenden gcloud CLI-Befehl aus, um Logfelder beim Erstellen eines neuen Log-Buckets einzuschränken:
gcloud logging buckets create BUCKET_NAME --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 folgenden gcloud CLI-Befehl aus, um Logfelder in einem vorhandenen Log-Bucket einzuschränken:
gcloud logging buckets update BUCKET_NAME --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
So weisen Sie Nutzern über die Google Cloud Console die Rolle logging.fieldAccessor
zu:
- Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsberechtigter für Logfelder.
Wählen Sie 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_NAME"
Klicken Sie auf Speichern.
Die IAM-Berechtigungen (Identity and Access Management) werden sofort aktualisiert.
gcloud
So weisen Sie Nutzern die Rolle logging.fieldAccessor
über die gcloud CLI zu:
Bearbeiten Sie die Datei
policy.json
.gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Aktualisieren Sie die Datei
policy.json
mit zusätzlichen Bindungen:"bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_NAME'", "title": "TITLE" }, "members": [ "user":"USER_ID@DOMAIN.com" ], "role": "roles/logging.fieldAccessor" } ]
Beispielbindung:
"bindings": [ { "condition": { "description": "Grants access to all restricted fields in a log bucket", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'log-bucket-with-sensitive-data'", "title": "Log bucket condition for restricted fields" }, "members": [ "user":"222larabrown@gmail.com" ], "role": "roles/logging.fieldAccessor" } ]
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 in der Google Cloud Console Zugriff auf ein eingeschränktes Feld:
- Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsberechtigter für Logfelder.
Wählen Sie 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_FIELD"
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:
Bearbeiten Sie die Datei
policy.json
.gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
Aktualisieren Sie die Datei
policy.json
mit zusätzlichen Bindungen:"bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_NAME/fields/{field}\") == 'RESTRICTED_FIELD'", "title": "TITLE" }, "members": [ "user":"USER_ID@DOMAIN.com" ], "role": "roles/logging.fieldAccessor" } ]
Beispielbindung:
"bindings": [ { "condition": { "description": "Give access to one restricted field that contains sensitive information", "expression": "resource.name.extract(\"locations/global/buckets/my-log-bucket/fields/{field}\") == 'jsonPyaload.data.ssn'", "title": "Access to restricted field" }, "members": [ "user":"222larabrown@gmail.com" ], "role": "roles/logging.fieldAccessor" } ]
Die IAM-Berechtigungen (Identity and Access Management) werden sofort aktualisiert.
Beispielausgabe
Die folgenden Beispiele zeigen, wie ein LogEntry
für Nutzer angezeigt wird, für die der Zugriff auf eine Teilmenge der LogEntry
-Felder eingeschränkt wurde.
Angenommen, für einen Bucket sind die folgenden Felder eingeschränkt:
jsonPayload
httpRequest
labels
Für Nutzer mit der Berechtigung zum Zugriff auf alle eingeschränkten Felder sieht der LogEntry
so aus:
Für Nutzer, die nur zum Zugriff auf das LogEntry
-Feld jsonPayload
berechtigt sind, sieht LogEntry
so aus:
Für Nutzer ohne Berechtigung zum Aufrufen der eingeschränkten Felder sieht LogEntry
so aus:
Wenn ein Nutzer eine globale Einschränkung eingibt, bei der ein LogEntry
mit einem eingeschränkten Feld zurückgeben werden würde, blendet Logging den gesamten LogEntry
statt nur des Feldes aus.
Eingeschränkte Felder auflisten
Führen Sie den folgenden gcloud CLI-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.