Log-Ablaufstellen mit nutzerverwalteten Dienstkonten konfigurieren

Auf dieser Seite wird beschrieben, wie Sie Logs weiterleiten, indem Sie Abläufe erstellen, die mit benutzerverwalteten Dienstkonten konfiguriert sind. Standardmäßig verwendet Logging ein Logging-Dienstkonto für alle Senken in einer Ressource. Wenn sich Ihre Protokoll-Sinks jedoch in verschiedenen Projekten befinden, können Sie ein eigenes nutzerverwaltetes Dienstkonto erstellen und verwalten. So können Sie die Berechtigungen für Identity and Access Management zentral über das Projekt verwalten, das Ihr nutzerverwaltetes Dienstkonto enthält.

Sie können nur dann einen Abfluss erstellen, der ein nutzerverwaltetes Dienstkonto verwendet, wenn das Abflussziel ein Log-Bucket oder ein Google Cloud-Projekt ist. Im Beispiel in diesem Dokument wird gezeigt, wie Sie einen Abfluss einrichten, der ein nutzerverwaltetes Dienstkonto verwendet, wobei das Ziel ein Log-Bucket ist.

Hinweise

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Achten Sie darauf, dass Sie ein nutzerverwaltetes Dienstkonto haben, und legen Sie dann die folgenden Variablen auf die entsprechenden Werte für Ihr nutzerverwaltetes Dienstkonto fest:

    • CUSTOM_SA_PROJECT_ID: Die Projekt-ID des Projekts, das Ihr nutzerverwaltetes Dienstkonto enthält.

    • CUSTOM_SA: Die E-Mail-Adresse Ihres nutzerverwalteten Dienstkontos.

    Informationen zum Erstellen eines Dienstkontos finden Sie unter Dienstkonten erstellen.

  3. Achten Sie darauf, dass Sie einen Log-Bucket haben, der als Ziel einer Log-Senke dienen kann. Legen Sie dann die folgenden Variablen auf Werte fest, die für Ihren Log-Bucket geeignet sind. Erstellen Sie gegebenenfalls einen Log-Bucket:

    • LOG_BUCKET_PROJECT_ID: Die Projekt-ID des Projekts, das Ihren Protokoll-Bucket enthält.

    • LOCATION: Der Speicherort Ihres Log-Buckets.

    • BUCKET_NAME: Der Name des Log-Buckets.

  4. Ermitteln Sie den Namen des Logging-Dienstkontos, das im Projekt vorhanden ist, in dem Sie den Log-Sink erstellen möchten, und legen Sie dann die folgenden Variablen auf die entsprechenden Werte fest:

    • SINK_PROJECT_ID: Die Projekt-ID des Projekts, in dem Sie den Log-Sink erstellen möchten.

    • LOGGING_SA: Die E-Mail-Adresse des Standard-Logging-Dienstkontos. Führen Sie den folgenden Befehl aus, um diese Adresse abzurufen:

      gcloud logging settings describe --project=SINK_PROJECT_ID
      

      In der Antwort wird in der Zeile, die mit loggingServiceAccountId beginnt, die E-Mail-Adresse Ihres Dienstkontos aufgeführt.

  5. Achten Sie darauf, dass die boolesche Einschränkung iam.disableCrossProjectServiceAccountUsage der Organisationsrichtlinie im Projekt mit Ihrem nutzerverwalteten Dienstkonto nicht erzwungen wird. Diese Einschränkung wird standardmäßig erzwungen. Führen Sie den folgenden Befehl aus, um diese Einschränkung zu deaktivieren, damit Sie ein Dienstkonto an eine Ressource in einem anderen Projekt anhängen können:

    gcloud resource-manager org-policies disable-enforce \
    iam.disableCrossProjectServiceAccountUsage \
    --project=CUSTOM_SA_PROJECT_ID
    

    Weitere Informationen zum Aktivieren von Dienstkonten über Projekte hinweg finden Sie unter Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können.

IAM-Rollen zuweisen

In diesem Abschnitt werden die Voraussetzungen für das Erstellen eines Sinks beschrieben, der ein benutzerverwaltetes Dienstkonto verwendet.

Nutzerverwaltetem Dienstkonto erlauben, Logeinträge an das Senkenziel zu schreiben

Weisen Sie dem vom Nutzer verwalteten Dienstkonto die Berechtigungen zu, die zum Schreiben von Protokolleinträgen in das Ziel der Senke erforderlich sind, die Sie in einem nachfolgenden Schritt erstellen. Ziel der Senke ist ein Log-Bucket, das im Projekt LOG_BUCKET_PROJECT_ID gespeichert ist.

Um dem nutzerverwalteten Dienstkonto die erforderlichen Berechtigungen zu gewähren, weisen Sie ihm die Rolle „Logs Bucket Writer“ (roles/logging.bucketWriter) für das Projekt zu, das den Log-Bucket enthält:

gcloud projects add-iam-policy-binding LOG_BUCKET_PROJECT_ID \
--member='serviceAccount:CUSTOM_SA' \
--role='roles/logging.bucketWriter'

Weitere Informationen zum vorherigen Befehl finden Sie unter gcloud projects add-iam-policy-binding.

Identitätsübernahme für Dienstkonten konfigurieren

Konfigurieren Sie das standardmäßige Cloud Logging-Dienstkonto LOGGING_SA so, dass es sich als das vom Nutzer verwaltete Dienstkonto CUSTOM_SA ausgeben kann. Das Standarddienstkonto für Cloud Logging muss in dem Google Cloud-Projekt vorhanden sein, in dem Sie Log-Sinks erstellen möchten, die das nutzerverwaltete Dienstkonto verwenden.

Wenn Sie die Identitätsdiebstahl-Funktion für Dienstkonten konfigurieren möchten, weisen Sie dem Cloud Logging-Dienstkonto im nutzerverwalteten Dienstkonto die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator) zu:

gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='serviceAccount:LOGGING_SA' \
--role='roles/iam.serviceAccountTokenCreator'

Die Identitätsübernahme für ein Dienstkonto umfasst zwei Hauptkonten: das Dienstkonto, das keine Berechtigungen zum Zugriff auf eine Ressource hat, und das privilegierte Dienstkonto, das die Berechtigungen zum Zugriff auf eine Ressource hat. In diesem Fall ist das vom Nutzer verwaltete Dienstkonto das Konto mit Berechtigungen, da es Logeinträge in das Senkenziel schreiben kann, das ein Log-Bucket im Projekt LOG_BUCKET_PROJECT_ID ist. Das Logging-Dienstkonto hat die Berechtigungen zum Weiterleiten von Protokollen.

Weitere Informationen zur Rolle „Ersteller von Dienstkontotokens“ finden Sie unter Rollen zum Verwalten und Impersonieren von Dienstkonten: Rolle „Ersteller von Dienstkontotokens“.

Weitere Informationen zur Übernahme der Identität von Dienstkonten finden Sie unter Identitätswechsel für Dienstkonten.

Hauptkonto Vorgänge als nutzerverwaltetes Dienstkonto ausführen lassen

Weisen Sie dem Hauptkonto, das den Abfluss erstellt, die erforderlichen Berechtigungen zum Ausführen von Vorgängen als nutzerverwaltetes Dienstkonto zu.

Um die erforderlichen Berechtigungen zu gewähren, weisen Sie dem Hauptkonto die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) für das Google Cloud-Projekt zu, in dem das nutzerverwaltete Dienstkonto CUSTOM_SA_PROJECT_ID gespeichert ist.

Bevor Sie den folgenden Befehl ausführen, ersetzen Sie die folgenden Werte:

  • 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ür PRINCIPAL finden Sie unter Hauptkonto-IDs.

Führen Sie den Befehl gcloud iam service-accounts add-iam-policy-binding aus:

gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
--project=CUSTOM_SA_PROJECT_ID \
--member='PRINCIPAL' \
--role='roles/iam.serviceAccountUser'

Wenn Sie benutzerdefinierte Rollen verwenden, benötigt das Hauptkonto die Berechtigung iam.serviceAccounts.actAs.

Weitere Informationen zur Rolle „Dienstkontonutzer“ finden Sie unter Rollen zum Verwalten und Impersonieren von Dienstkonten: Rolle „Dienstkontonutzer“.

Log-Senke mit einem vom Nutzer verwalteten Dienstkonto erstellen

Wenn Sie einen Abfluss mit einem nutzerverwalteten Dienstkonto erstellen möchten, führen Sie den Befehl gcloud logging sinks create aus und fügen Sie die Option --custom-writer-identity hinzu.

Bevor Sie den folgenden Befehl ausführen, ersetzen Sie die folgenden Werte:

  • SINK_NAME: Der Name der Log-Senke.

Führen Sie den Befehl gcloud logging sinks create aus:

gcloud logging sinks create SINK_NAME \
logging.googleapis.com/projects/LOG_BUCKET_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME \
--custom-writer-identity=serviceAccount:CUSTOM_SA \
--project=SINK_PROJECT_ID

Prüfen, ob der Empfänger Logs weiterleitet

In diesem Abschnitt schreiben und lesen Sie mit der gcloud CLI einen Logeintrag, um zu prüfen, ob Ihr Sink Protokolle richtig weiterleitet.

So prüfen Sie, ob die Senke Protokolle richtig weiterleitet:

  1. Führen Sie den Befehl gcloud logging write aus:

    Bevor Sie den folgenden Befehl ausführen, ersetzen Sie die folgenden Werte:

    • LOG_NAME: Der Name des Logs. Sie können dieses Feld beispielsweise auf mylog festlegen.

    Führen Sie den Befehl gcloud logging write aus:

    gcloud logging write LOG_NAME "Test log entry" --project=SINK_PROJECT_ID
    

    Der vorherige Befehl gibt die folgende Meldung zurück: Created log entry.

  2. Führen Sie den folgenden Befehl aus, um den gerade erstellten Logeintrag zu lesen:

    gcloud logging read 'textPayload="Test log entry"' \
    --bucket=BUCKET_NAME --location=LOCATION \
    --view=_AllLogs --project=SINK_PROJECT_ID
    

Nächste Schritte