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.

Übersicht

In Logging wird die Zugriffssteuerung auf Feldebene verwendet, um LogEntry von Nutzern eines Google Cloud-Projekts, die nicht die erforderlichen Berechtigungen zum Anzeigen der Felder. 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 schränken und verwalten den Zugriff auf Feldebene mit der Google Cloud CLI steuern.

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, das schränkt außerdem den Zugriff auf verschachtelte Pfade ein.

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 folgenden Befehl aus, um die neueste Version der gcloud CLI zu installieren: gcloud components update Befehl:

    gcloud components update
    

    Eine Anleitung zum Installieren der gcloud CLI finden Sie unter Google Cloud CLI installieren

  • Führen Sie den gcloud config set aus. zum Konfigurieren der Standard- Google Cloud-Projekt für Ihre Google Cloud CLI-Befehle. Bevor Sie den Befehl ausführen, ersetzen Sie den folgenden Wert:

    • PROJECT_ID: Die Kennzeichnung des Projekts.

    Befehl:

    gcloud config set project PROJECT_ID
    
  • Prüfen Sie, ob Sie eine der folgenden IAM haben: Rollen für das Google Cloud-Projekt, 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 für einen 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: Die durch Kommas getrennte Liste der Felder, die eingeschränkt werden.

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 Befehl:

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

So weisen Sie Nutzern über die Google Cloud Console die Rolle logging.fieldAccessor zu: führen Sie die folgenden Schritte aus:

  1. Öffnen Sie in der Google Cloud Console die Seite IAM:

    Rufen Sie IAM auf.

    Wenn Sie diese Seite über die Suchleiste finden, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift IAM und Verwaltung.

  2. Wählen Sie die Hauptperson aus und klicken Sie auf Bearbeiten.
  3. Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsfunktion für Logfelder aus. für die Rolle.
  4. Wählen Sie IAM-Bedingung hinzufügen aus.
  5. Geben Sie in die Felder Titel und Beschreibung einen Titel und eine Beschreibung ein.
  6. Wählen Sie den Tab Bedingungseditor aus und geben Sie diesen Ausdruck ein:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
    
  7. 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:

  1. Um die aktuellen IAM-Richtlinieninformationen in einer Datei zu speichern, den gcloud projects get-iam-policy 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.

  2. Aktualisieren Sie die Datei policy.json mit zusätzlichen Bindungen.

    Im Folgenden wird 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 die im Abschnitt members aufgeführten Hauptkonten zugänglich.

    "bindings": [
        {
          "condition": {
            "description": "DESCRIPTION",
            "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'",
            "title": "TITLE"
          },
          "members": [
            PRINCIPAL
          ],
          "role": "roles/logging.fieldAccessor"
        }
    ]
    

    Im vorherigen Beispiel haben die Felder die folgenden Bedeutungen:

    • 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, die PRINCIPAL haben kann, Siehe Haupt-IDs. Geben Sie im Feld members der policy.json-Datei verwenden, verwenden Sie das Format "PRINCIPAL-TYPE":"ID"
    • DESCRIPTION: Eine Beschreibung der Bedingung.
    • TITLE: Ein Titel für die Bedingung.
  3. Um die aktualisierte Datei policy.json anzuwenden, führen Sie den gcloud projects set-iam-policy Befehl:

    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 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 über die Google Cloud Console Zugriff auf ein eingeschränktes Feld:

  1. Öffnen Sie in der Google Cloud Console die Seite IAM:

    Rufen Sie IAM auf.

    Wenn Sie diese Seite über die Suchleiste finden, wählen Sie das Ergebnis aus, dessen Zwischenüberschrift IAM und Verwaltung.

  2. Wählen Sie die Hauptperson aus und klicken Sie auf Bearbeiten.
  3. Wählen Sie im Bereich Berechtigungen bearbeiten die Option Zugriffsfunktion für Logfelder aus. für die Rolle.
  4. Wählen Sie IAM-Bedingung hinzufügen aus.
  5. Geben Sie in die Felder Titel und Beschreibung einen Titel und eine Beschreibung ein.
  6. 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"
    
  7. 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: führen Sie die folgenden Schritte aus:

  1. Führen Sie zum Speichern der IAM-Informationen in einer Datei den Befehl gcloud projects get-iam-policy und speichern Sie die Ausgabe in einer Datei:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    Der vorherige Befehl speichert die Informationen in einer Datei namens policy.json

  2. Aktualisieren Sie die Datei policy.json mit zusätzlichen Bindungen.

    Im Folgenden werden im Feld expression bestimmte Felder aufgeführt. Daher haben nur die im Abschnitt members aufgeführten Hauptrollen 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 die folgenden Bedeutungen:

    • PRINCIPAL: Eine Kennung für das Hauptkonto, das Sie ausführen möchten dem die Rolle zugewiesen wird. Haupt-IDs haben in der Regel das folgende Format: PRINCIPAL-TYPE:ID Beispiel: user:my-user@example.com Eine vollständige Liste der Formate, die PRINCIPAL haben kann, Siehe Haupt-IDs. Geben Sie im Feld members der policy.json-Datei verwenden, verwenden Sie das Format "PRINCIPAL-TYPE":"ID"
    • DESCRIPTION: Eine Beschreibung der Bedingung.
    • TITLE: Ein Titel für die Bedingung.
  3. Um die aktualisierte Datei policy.json anzuwenden, führen Sie den gcloud projects set-iam-policy Befehl:

    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 einem spezifischen httpRequest-Unterfeld. 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-Feld jsonPayload berechtigt sind, sind alle uneingeschränkten Felder und das Feld jsonPayload sichtbar.

  • Für Nutzer ohne Berechtigung zum Anzeigen der eingeschränkten Felder gilt: 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.