Audit-Logging

Übersicht

In diesem Dokument wird beschrieben, wie Sie Cloud-Audit-Logs für Google Distributed Cloud (nur Software) verwenden. Google Distributed Cloud verwendet Kubernetes-Audit-Logging, das Aufrufe an den Kubernetes API-Server eines Clusters chronologisch speichert. Audit-Logs sind nützlich, um verdächtige API-Anfragen zu untersuchen und Statistiken zu erfassen. Informationen zum Audit-Logging für die GKE On-Prem API finden Sie unter Cloud API-Audit-Logging.

Informationen zu Cloud-Audit-Logs

Audit-Logs werden in Cloud-Audit-Logs in Ihrem Google Cloud -Projekt geschrieben. Das Schreiben in Cloud-Audit-Logs hat mehrere Vorteile gegenüber dem Schreiben auf Laufwerke oder dem Erfassen von Logs in einem lokalen Logging-System:

  • Audit-Logs für alle Cluster können zentralisiert werden.
  • In Cloud-Audit-Logs geschriebene Logeinträge sind unveränderlich.
  • Cloud-Audit-Logeinträge werden 400 Tage lang aufbewahrt.
  • Die Cloud-Audit-Logs-Funktion ist im Preis von Google Distributed Cloud enthalten.
  • Sie können Google Distributed Cloud so konfigurieren, dass Logs auf ein Laufwerk oder in Cloud-Audit-Logs geschrieben werden.

Audit-Logging auf Laufwerken

Standardmäßig werden Audit-Logs in einen nichtflüchtigen Speicher geschrieben, sodass VM-Neustarts und -Upgrades nicht zum Verschwinden der Logs führen.

  • Wenn Erweiterter Cluster nicht aktiviert ist:

    In Google Distributed Cloud werden bis zu 12 GB an Audit-Logeinträgen aufbewahrt.

  • Wenn Erweiterter Cluster aktiviert ist

    In Google Distributed Cloud werden bis zu 1 GB an Audit-Logeinträgen aufbewahrt.

Cloud-Audit-Logs

Wenn Sie Cloud-Audit-Logs für einen Cluster aktivieren, werden Audit-Logeinträge zur Administratoraktivität vom Kubernetes API-Server des Clusters über das Google Cloud -Projekt, das Sie im cloudAuditLogging.projectID-Feld Ihrer Clusterkonfigurationsdatei angeben, an Google Cloudgesendet. Dieses Google Cloud Projekt wird als Audit-Logging-Projekt bezeichnet.

Das Audit-Logging-Projekt muss mit dem Flotten-Hostprojekt übereinstimmen.

Für das Zwischenspeichern und Schreiben von Logeinträgen in Cloud-Audit-Logs stellt Google Distributed Cloud einen audit-proxy-Pod im Administratorcluster bereit. Diese Komponente ist auch als Sidecar-Container in Nutzerclustern verfügbar.

Beschränkungen

Für Cloud-Audit-Logs gelten die folgenden Einschränkungen:

  • Das Datenzugriffs-Logging (get, list, watch-Anfragen) wird nicht unterstützt.
  • Das Ändern der Audit-Richtlinie von Kubernetes wird nicht unterstützt.
  • Cloud-Audit-Logs sind gegen größere Netzwerkausfälle nicht resistent. Wenn die Logeinträge nicht in Google Cloudexportiert werden können, werden sie in einem 10-GB-Laufwerkzwischenspeicher gespeichert. Wenn dieser Puffer gefüllt wird, werden die ältesten Einträge gelöscht.
  • Ein Projekt kann bis zu etwa 1.000 Dienstkonten für die Verwendung mit Cloud-Audit-Logs unterstützen. Mehrere Cluster können dasselbe Dienstkonto verwenden.

Anthos Audit API aktivieren

Aktivieren Sie die Anthos Audit API in Ihrem Audit-Logging-Projekt.

Anthos Audit API aktivieren

Dienstkonto für Cloud-Audit-Logs erstellen

Sie haben bereits ein oder mehrere Dienstkonten, die Sie für die Verwendung mit Google Distributed Cloud erstellt haben. Für dieses Feature müssen Sie ein zusätzliches Dienstkonto erstellen, das als Audit-Logging-Dienstkonto bezeichnet wird.

  1. Erstellen Sie Ihr Audit-Logging-Dienstkonto:

    gcloud iam service-accounts create audit-logging-service-account
  2. Erstellen Sie eine JSON-Schlüsseldatei für Ihr Cloud-Audit-Log-Dienstkonto:

    gcloud iam service-accounts keys create audit-logging-key.json \
       --iam-account AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL
    

    Dabei ist AUDIT_LOGGING_SERVICE_ACCOUNT_EMAIL die E-Mail-Adresse Ihres Dienstkontos.

  3. Speichern Sie audit-logging-key.json auf der Administrator-Workstation am selben Speicherort wie Ihre anderen Dienstkontoschlüssel.

ACHTUNG: Bevor Sie dieses Dienstkonto löschen, müssen Sie es zuerst in der Clusterkonfiguration durch das neue Dienstkonto ersetzen. Der Vorgang ähnelt dem Aktivieren von Cloud-Audit-Logs für einen vorhandenen Nutzercluster. Wenn Sie das vergessen haben, folgen Sie der Anleitung zum Bereinigen.

Administratorcluster mit aktivierten Cloud-Audit-Logs erstellen

Sie können Cloud-Audit-Logs nur dann für einen Administratorcluster aktivieren, wenn Sie den Administratorcluster erstellen. Sie können einen vorhandenen Administratorcluster nicht ändern, um Cloud-Audit-Logs zu aktivieren.

  1. Weitere Informationen finden Sie unter Administratorcluster erstellen.

  2. Füllen Sie in der Konfigurationsdatei für den Administratorcluster den Abschnitt cloudAuditLogging aus.

  3. Legen Sie für cloudAuditLogging.projectID die ID Ihres Audit-Logging-Projekts fest.

  4. Legen Sie für cloudAuditLogging.clusterLocation eine Google Cloud Region fest, in der Audit-Logs gespeichert werden sollen. Wählen Sie zum Verbessern der Latenz eine Region in der Nähe Ihres lokalen Rechenzentrums aus.

  5. Legen Sie cloudAuditLogging.serviceAccountKeyPath auf den Pfad der JSON-Schlüsseldatei für Ihr Audit-Logging-Dienstkonto fest.

Beispiele:

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Setzen Sie die Clustererstellung wie gewohnt fort.

Nutzercluster mit aktivierten Cloud-Audit-Logs erstellen

  1. Weitere Informationen finden Sie unter Nutzercluster erstellen.

  2. Füllen Sie in der Nutzercluster-Konfigurationsdatei den Abschnitt cloudAuditLogging aus.

  3. Legen Sie für cloudAuditLogging.projectID die ID Ihres Audit-Logging-Projekts fest.

  4. Legen Sie für cloudAuditLogging.clusterLocation eine Google Cloud Region fest, in der Audit-Logs gespeichert werden sollen. Wählen Sie zum Verbessern der Latenz eine Region in der Nähe Ihres lokalen Rechenzentrums aus.

  5. Legen Sie für cloudAuditLogging.serviceAccounKeyPath den Pfad der JSON-Schlüsseldatei für Ihr Cloud-Audit-Log-Dienstkonto fest.

  6. Prüfen Sie, ob der Abschnitt gkeConnect ausgefüllt ist und gkeConnect.projectID mit cloudAuditLogging.projectID übereinstimmt.

Beispiele:

gkeConnect:
  projectID: "my-project"
  registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"

cloudAuditLogging:
  projectID: "my-project"
  clusterLocation: "us-west1"
  serviceAccountKeyPath: "/my-key-folder/audit-logging-key.json"

Setzen Sie die Clustererstellung wie gewohnt fort.

Cloud-Audit-Logs für einen vorhandenen Nutzercluster aktivieren

Cloud-Audit-Logs können nur im Google Cloud -Projekt aktiviert werden, in dem der Nutzercluster registriert ist.

Wenn ein vorhandener Nutzercluster nicht registriert ist, registrieren Sie ihn anhand der folgenden Schritte, bevor Sie Cloud-Audit-Logs aktivieren:

  1. Fügen Sie der Nutzercluster-Konfigurationsdatei den Abschnitt gkeConnect hinzu. Beispiele:

    gkeConnect:
      projectID: "my-project"
      registerServiceAccountKeyPath: "/my-key-fokder/connect-register-key.json"
    
  2. Aktualisieren Sie den Cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Nach der Registrierung des Nutzerclusters führen Sie die folgenden Schritte aus, um Cloud-Audit-Logs zu aktivieren:

  1. Füllen Sie den Abschnitt cloudAuditLogging in der Nutzercluster-Konfigurationsdatei aus. Weitere Informationen zu den einzelnen Feldern finden Sie unter Nutzercluster mit aktivierten Cloud-Audit-Logs erstellen. Die projectID im Abschnitt cloudAuditLogging muss mit der ID im Abschnitt gkeConnect übereinstimmen.

  2. Aktualisieren Sie den Cluster:

    gkectl update cluster --config USER_CLUSTER_CONFIG --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

Cloud-Audit-Logs für einen vorhandenen Nutzercluster deaktivieren

  1. Löschen Sie in der Nutzercluster-Konfigurationsdatei den Abschnitt cloudAuditLogging.

  2. Aktualisieren Sie den Nutzercluster:

gkectl update cluster --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] --config [USER_CLUSTER_CONFIG]

Auf Audit-Logs zugreifen

Audit-Logging auf Laufwerken

Die Audit-Logs für den Administratorcluster finden Sie auf den Knoten der Steuerungsebene unter /var/log/kube-audit/kube-apiserver-audit.log. Die Audit-Logs für den Nutzercluster befinden sich in PersistentVolumeClaim mit dem Namen kube-audit-kube-apiserver-0. Sie können über volumes-Einträge auf diese Daten in Ihren eigenen Pods zugreifen:

Fügen Sie diesen Eintrag für den Administratorcluster hinzu:

    volumes:
    - name: kube-audit
      hostPath:
        path: /var/log/kube-audit
        type: ""

Fügen Sie diesen Eintrag für den Nutzercluster hinzu:

    volumes:
    - name: kube-audit
      persistentVolumeClaim:
        claimName: kube-audit-kube-apiserver-0

Um Ihren Pod auf dem entsprechenden Administratorclusterknoten (und nur auf diesem Knoten) zu planen, müssen Sie Ihrer Pod-Spezifikation die Abschnitte nodeSelector und tolerations so hinzufügen:

    spec:
      nodeSelector:
        node-role.kubernetes.io/master: ''
      tolerations:
      - key: node-role.kubernetes.io/master
        value: ""
        effect: NoSchedule

Legen Sie für den Nutzercluster namespace als Namen des Nutzerclusters fest und setzen Sie nodeName auf denselben Wert wie kube-apiserver-0:

   spec:
     nodeName: NODE_NAME

Führen Sie den folgenden Befehl aus, um die nodeName von kube-apiserver-0 anzugeben:

kubectl get pod kube-apiserver-0 -n USER_CLUSTER_NAME --kubeconfig kubeconfig -o jsonpath='{.spec.nodeName}'

Der Dateiname jedes Audit-Logs enthält einen Zeitstempel, der angibt, wann die Datei rotiert wurde. Eine Datei enthält Audit-Logs bis zu diesem Zeitpunkt.

Auf Cloud-Audit-Logs zugreifen

Console

  1. Rufen Sie in der Google Cloud Console im Menü Logging die Seite Log-Explorer auf.

    Zu „Log-Explorer“

    Wenn die Seite Legacy-Loganzeige geöffnet wird, wählen Sie im Drop-down-Menü Upgrade die Option Upgrade auf den neuen Log-Explorer durchführen aus.

  2. Klicken Sie in das Feld Abfrage, um eine Abfrage einzugeben.

  3. Geben Sie die folgende Abfrage in das Feld Query ein:

    resource.type="k8s_cluster"
    logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity"
    protoPayload.serviceName="anthosgke.googleapis.com"
    

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

  4. Klicken Sie auf Abfrage ausführen, um alle Audit-Logs von Clustern anzuzeigen, die für die Anmeldung in diesem Projekt konfiguriert wurden.

gcloud

  1. Listen Sie die ersten beiden Logeinträge im Administratoraktivitätslog des Projekts auf, die sich auf den Ressourcentyp k8s_cluster beziehen:
gcloud logging read \
    'logName="projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity" \
    AND resource.type="k8s_cluster" \
    AND protoPayload.serviceName="anthosgke.googleapis.com" ' \
    --limit 2 \
    --freshness 300d
  1. Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

Es werden zwei Logeinträge ausgegeben. Beachten Sie, dass das Feld logName für jeden Logeintrag den Wert projects/PROJECT_ID/logs/externalaudit.googleapis.com%2Factivity hat und protoPayload.serviceName gleich anthosgke.googleapis.com ist.

Audit-Richtlinie

In der Audit-Richtlinie von Kubernetes ist definiert, welche Ereignisse als Logeinträge erfasst werden. Außerdem wird angegeben, welche Daten die Logeinträge enthalten sollen. Das Verhalten von Cloud-Audit-Logs wird durch eine statisch konfigurierte Audit-Logging-Richtlinie von Kubernetes bestimmt. Das Ändern dieser Richtlinie zum Ändern des Verhaltens von Cloud-Audit-Logs wird nicht unterstützt.