Logsenken mit nutzerverwalteten Dienstkonten konfigurieren

Auf dieser Seite wird beschrieben, wie Sie Logs durch Erstellen von Senken weiterleiten, die mit nutzerverwalteten Dienstkonten konfiguriert sind. Standardmäßig verwendet Logging für alle Senken in einer Ressource ein Logging-Dienstkonto. Wenn sich Ihre Logsenken jedoch in verschiedenen Projekten befinden, können Sie ein eigenes, vom Nutzer verwaltetes Dienstkonto erstellen und verwalten. Damit können Sie die Berechtigungen für Identity and Access Management in dem Projekt verwalten, das Ihr nutzerverwaltetes Dienstkonto enthält.

Sie können eine Senke, die ein vom Nutzer verwaltetes Dienstkonto verwendet, nur erstellen, wenn das Senkenziel ein Log-Bucket oder ein Google Cloud-Projekt ist. Das Beispiel in diesem Dokument zeigt, wie Sie eine Senke einrichten, die ein von Nutzern verwaltetes Dienstkonto verwendet, wobei das Ziel ein Log-Bucket ist.

Hinweise

  1. Installieren und konfigurieren Sie die Google Cloud CLI, um die Befehlszeilenbeispiele in dieser Anleitung zu verwenden.

  2. Prüfen Sie, ob Sie ein vom Nutzer verwaltetes Dienstkonto haben. Informationen zum Erstellen eines Dienstkontos finden Sie unter Dienstkonten erstellen.

  3. Identifizieren Sie die folgenden Werte, um die Befehle in diesem Dokument zu verwenden:

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

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

    • SINK_PROJECT_ID: Die Projekt-ID des Projekts, in dem Sie die Logsenke erstellen möchten.

    • CUSTOM_SA: Ihr vom Nutzer verwaltetes Dienstkonto. Informationen zum Erstellen von Dienstkonten finden Sie unter Dienstkonten erstellen.

      Ein vom Nutzer verwaltetes Dienstkonto hat folgendes Format:

      SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    • LOGGING_SA: Das Standard-Logging-Dienstkonto. Führen Sie den folgenden Befehl aus, um diese E-Mail abzurufen:

         gcloud logging settings describe --project=SINK_PROJECT_ID
      

      Die Ausgabe enthält die folgenden Informationen zu Ihrem Dienstkonto:

      loggingServiceAccountId: serviceAccount:service-123456789012@gcp-sa-logging.iam.gserviceaccount.com

    • BUCKET_NAME: Der Name Ihres Log-Buckets.

      Der Senkenzielpfad für einen Log-Bucket sieht so aus:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME

  4. Achten Sie darauf, dass im Projekt, das Ihr nutzerverwaltetes Dienstkonto enthält, die boolesche Einschränkung iam.disableCrossProjectServiceAccountUsage der Organisationsrichtlinie nicht erzwungen wird. Standardmäßig wird diese Einschränkung 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 projektübergreifenden Aktivieren von Dienstkonten finden Sie unter Projektübergreifendes Anhängen von Dienstkonten aktivieren.

IAM-Rollen zuweisen

In diesem Abschnitt werden die Voraussetzungen zum Erstellen einer Senke beschrieben, die ein vom Nutzer verwaltetes Dienstkonto verwendet.

Führen Sie in dem Projekt, das den Log-Bucket enthält, der als Ziel der Logsenken dient, die folgenden Schritte aus:

  1. Weisen Sie dem nutzerverwalteten Dienstkonto die Rolle „Log-Bucket-Autor“ (roles/logging.bucketWriter) zu. Mit dieser Rolle kann das vom Nutzer verwaltete Dienstkonto Logs in den Log-Bucket schreiben:

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

Führen Sie in dem Google Cloud-Projekt, für das Sie Logsenken erstellen möchten, die das vom Nutzer verwaltete Dienstkonto verwenden, die folgenden Schritte aus:

  1. Weisen Sie dem Cloud Logging-Dienstkonto des nutzerverwalteten Dienstkontos die Rolle „Service Account Token Creator“ (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"
    

    Mit dem vorherigen Befehl kann das Logging-Dienstkonto die Identität des nutzerverwalteten Dienstkontos übernehmen. Dazu verwendet es die Rolle „Ersteller von Dienstkonto-Tokens“ (roles/iam.serviceAccountTokenCreator).

    Die Identitätsübernahme für Dienstkonten umfasst zwei Hauptkonten: das Dienstkonto, das keine Berechtigungen für den Zugriff auf eine Ressource hat, und das privilegierte Dienstkonto, das die Berechtigungen für den Zugriff auf eine Ressource hat. In diesem Fall ist das nutzerverwaltete Dienstkonto das privilegierte Konto, da es Logs in einen Log-Bucket im Zielprojekt schreiben kann. Das Logging-Dienstkonto hat die Berechtigungen zum Weiterleiten von Logs.

    Weitere Informationen zur Rolle „Ersteller von Dienstkonto-Tokens“ finden Sie unter Rollen für die Verwaltung und Identitätsübernahme von Dienstkonten: Rolle „Ersteller von Dienstkonto-Tokens“.

    Weitere Informationen zur Identitätsübernahme von Dienstkonten finden Sie unter Identitätsübernahme von Dienstkonten.

  2. Weisen Sie dem Hauptkonto, das die Logsenken erstellt, die Rolle „Dienstkontonutzer“ (roles/iam.serviceAccountUser) zu. Ein Hauptkonto benötigt insbesondere die Berechtigung iam.serviceAccounts.actAs für das Dienstkonto:

     gcloud iam service-accounts add-iam-policy-binding CUSTOM_SA \
     --member 'user:user@example.com' \
     --role "roles/iam.serviceAccountUser"
    

    Mit dem vorherigen Befehl kann ein Nutzer Vorgänge als vom Nutzer verwaltetes Dienstkonto ausführen.

    Weitere Informationen zur Rolle „Dienstkontonutzer“ finden Sie unter Rollen für die Verwaltung und Identitätsübernahme von Dienstkonten: Rolle „Dienstkontonutzer“.

Logsenke erstellen, die ein vom Nutzer verwaltetes Dienstkonto verwendet

gcloud

Zum Erstellen einer Senke mit einem vom Nutzer verwalteten Dienstkonto ersetzen Sie die Variablen durch Ihre eigenen Informationen und führen den Befehl gcloud logging sinks create mit dem Flag --custom-writer-identity aus:

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

API

  1. Verwenden Sie zum Erstellen einer Logsenke in Ihrem Google Cloud-Projekt projects.sinks.create in der Logging API. Übergeben Sie im LogSink den Parameter customWriterIdentity und geben Sie die entsprechenden erforderlichen Werte im Anfragetext an:

    • name: Eine Kennung für die Senke. Nachdem Sie die Senke erstellt haben, können Sie sie nicht mehr umbenennen. Sie können sie jedoch löschen und eine neue Senke erstellen.
    • destination: Der Log-Bucket, an den Ihre Logs weitergeleitet werden sollen. Der Zielpfad hat das folgende Format:

      logging.googleapis.com/projects/DESTINATION_PROJECT_ID/locations/LOCATION/buckets/BUCKET_NAME
      
  2. Rufen Sie projects.sinks.create auf, um die Senke zu erstellen.

Weitere Informationen zum Erstellen von Senken mit der Logging API finden Sie in der LogSink.

Prüfen, ob die Senke Logs weiterleitet

In diesem Abschnitt verwenden Sie die gcloud CLI, um einen Logeintrag zu schreiben und zu lesen und so zu prüfen, ob die Senke Logs korrekt weiterleitet.

So prüfen Sie, ob die Senke Logs korrekt weiterleitet:

  1. Ersetzen Sie die Variablen durch Ihre eigenen Informationen und schreiben Sie mit dem Befehl gcloud logging write einen Beispiel-Logeintrag:

    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 geschriebenen Logeintrag zu lesen:

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

Nächste Schritte