Zugriff auf Feldebene konfigurieren

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:

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:

  1. Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsberechtigter für Logfelder.
  2. Wählen Sie Bedingung hinzufügen aus.

    Berechtigung „Zugriffsberechtigter für Logfelder“ hinzufügen

  3. Geben Sie in die Felder Titel und Beschreibung einen Titel und eine Beschreibung ein.

  4. Wählen Sie den Tab Bedingungseditor aus und geben Sie diesen Ausdruck ein:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_NAME"
    

    Bedingung zur Berechtigung hinzufügen

  5. 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:

  1. Bearbeiten Sie die Datei policy.json.

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. 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 Feld jsonPayload und nicht für das Feld Jsonpayload 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 im LogEntry-protobuf. log_name bezieht sich auf dasselbe Feld. Das Feld jsonPayload.fooBar verweist auf ein anderes Feld als jsonPayload.foo_bar, da Feldnamen unter jsonPayload Zuordnungsstringschlüssel sind. Es bezieht sich jedoch auf json_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ür jsonPayload.foo und nicht für json_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:

  1. Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsberechtigter für Logfelder.
  2. Wählen Sie Bedingung hinzufügen aus.

    Berechtigung „Zugriffsberechtigter für Logfelder“ hinzufügen

  3. Geben Sie in die Felder Titel und Beschreibung einen Titel und eine Beschreibung ein.

  4. 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"
    

    Teilmenge der eingeschränkten Felder hinzufügen

  5. 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:

  1. Bearbeiten Sie die Datei policy.json.

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    
  2. 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:

Alle Logfelder werden angezeigt

Für Nutzer, die nur zum Zugriff auf das LogEntry-Feld jsonPayload berechtigt sind, sieht LogEntry so aus:

Nur jsonPayload-Feld wird angezeigt

Für Nutzer ohne Berechtigung zum Aufrufen der eingeschränkten Felder sieht LogEntry so aus:

Alle Felder sind eingeschränkt

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.