Dienstkonten

Auf dieser Seite werden Dienstkonten und Dienstkontoberechtigungen beschrieben, die sowohl durch Zugriffsbereiche für VM-Instanzen als auch durch Rollen der Identitäts- und Zugriffsverwaltung (IAM) für Dienstkonten eingeschränkt werden können. Wie Sie Dienstkonten erstellen und verwenden, erfahren Sie unter Dienstkonten für Instanzen erstellen und aktivieren.

Ein Dienstkonto ist ein spezielles Konto, das von Diensten und Anwendungen, die auf Ihrer Compute Engine-Instanz ausgeführt werden, für die Interaktion mit anderen Google Cloud APIs verwendet werden kann. Anwendungen können Dienstkonto-Anmeldedaten nutzen, um sich für eine Reihe von APIs zu autorisieren und im Rahmen der Berechtigungen, die dem Dienstkonto und der VM-Instanz erteilt wurden, Aktionen auszuführen. Außerdem besteht die Möglichkeit, Firewallregeln zu erstellen, durch die Traffic zu und von einer Instanz entsprechend dem mit ihr verknüpften Dienstkonto zugelassen oder verweigert wird.

Was ist ein Dienstkonto?

Ein Dienstkonto ist eine Identität, die eine Instanz oder eine Anwendung zum Ausführen von API-Anfragen in Ihrem Namen verwenden kann.

Mit dieser Identität können Anwendungen, die auf Ihren VM-Instanzen ausgeführt werden, bei anderen Google Cloud-Diensten authentifiziert werden. Wenn Sie beispielsweise eine Anwendung schreiben, die Dateien in Cloud Storage liest und schreibt, muss diese sich zuerst bei der Cloud Storage API authentifizieren. Sie können ein Dienstkonto erstellen und dem Dienstkonto Zugriff auf die Cloud Storage API gewähren. Aktualisieren Sie anschließend Ihre Anwendung, damit die Anmeldedaten des Dienstkontos an die Cloud Storage API gesendet werden. Die Anwendung kann dann nahtlos bei der API authentifiziert werden, ohne geheime Schlüssel oder Nutzeranmeldedaten in Ihre Instanz, Ihr Image oder Ihren Anwendungscode einzubinden.

Wenn die Dienstkonten die erforderlichen IAM-Berechtigungen haben, können diese Dienstkonten Instanzen und andere Ressourcen erstellen und verwalten. Ressourcen können von den Dienstkonten nur dann geändert oder gelöscht werden, wenn Sie dem Dienstkonto auf Projekt- oder Ressourcenebene die erforderlichen IAM-Berechtigungen erteilen. Sie können einer Instanz auch ein anderes Dienstkonto zuordnen.

Einer Instanz kann nur ein Dienstkonto zugeordnet werden, und das Dienstkonto muss in demselben Projekt erstellt worden sein wie die Instanz.

Für Compute Engine-Instanzen stehen zwei Arten von Dienstkonten zur Verfügung:

  • Nutzerverwaltete Dienstkonten
  • Von Google verwaltete Dienstkonten

Nutzerverwaltete Dienstkonten

Zu den nutzerverwalteten Dienstkonten gehören neue Dienstkonten, die Sie explizit erstellen, und das standardmäßige Compute Engine-Dienstkonto.

Neue Dienstkonten

Mit Identity and Access Management können Sie eigene Dienstkonten erstellen und verwalten. Nachdem Sie ein Konto erstellt haben, weisen Sie ihm IAM-Rollen zu und richten Instanzen so ein, dass sie als das Dienstkonto ausgeführt werden. Anwendungen, die auf Instanzen ausgeführt werden, die mit dem Dienstkonto aktiviert wurden, können anhand der Anmeldedaten des Kontos Anfragen an andere Google APIs senden.

Informationen zum Erstellen und Einrichten eines neuen Dienstkontos finden Sie unter Dienstkonten für Instanzen erstellen und aktivieren.

Standardmäßiges Compute Engine-Dienstkonto

Neue Projekte, für die die Compute Engine API aktiviert ist, haben ein Compute Engine-Standarddienstkonto mit der folgenden E-Mail-Adresse:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

Google erstellt das Compute Engine-Standarddienstkonto und fügt es automatisch Ihrem Projekt hinzu. Sie haben jedoch die volle Kontrolle über das Konto.

Bei der Erstellung erhält das Compute Engine-Standarddienstkonto die IAM-Rolle "Projektbearbeiter". Sie können die Rollen des Dienstkontos jedoch ändern. So bietet sich Ihnen die sichere Möglichkeit einzuschränken, auf welche Google APIs das Dienstkonto zugreifen kann.

Sie haben die Möglichkeit, dieses Dienstkonto zu deaktivieren oder aus Ihrem Projekt zu löschen. Das kann aber dazu führen, dass alle Anwendungen fehlschlagen, die auf die Anmeldedaten des Dienstkontos angewiesen sind. Wenn Sie das Compute Engine-Standarddienstkonto versehentlich löschen, können Sie es innerhalb von 30 Tagen wiederherstellen. Weitere Informationen finden Sie unter Dienstkonten erstellen und verwalten.

Das Compute Engine-Standarddienstkonto hat kurz gesagt also folgende Eigenschaften:

  • Es wird automatisch vom Google Cloud Console-Projekt erstellt und mit einem automatisch generierten Namen und einer E-Mail-Adresse versehen.
  • Es wird Ihrem Projekt automatisch mit der IAM-Rolle "Projektbearbeiter" hinzugefügt.
  • Es ist standardmäßig für alle Instanzen aktiviert, die mit dem gcloud-Befehlszeilentool und der Cloud Console erstellt wurden. Sie können dies überschreiben, indem Sie beim Erstellen der Instanz ein anderes Dienstkonto angeben oder Dienstkonten für diese Instanz explizit deaktivieren.

Ein Dienstkonto einer Instanz zuordnen

Wenn Sie eine Instanz mit dem gcloud-Befehlszeilentool oder der Google Cloud Console erstellen, können Sie festlegen, welches Dienstkonto die Instanz beim Aufrufen von Google Cloud APIs verwenden soll. Die Instanz wird automatisch mit den folgenden Zugriffsbereichen konfiguriert:

  • Lesezugriff auf Cloud Storage:
    https://www.googleapis.com/auth/devstorage.read_only
  • Schreibzugriff, um Compute Engine-Logs zu schreiben:
    https://www.googleapis.com/auth/logging.write
  • Schreibzugriff, um Messdaten über Ihre Google Cloud-Projekte zu veröffentlichen:
    https://www.googleapis.com/auth/monitoring.write
  • Lesezugriff auf die für Google Cloud Endpoints(Alpha) erforderlichen Service Management-Features:
    https://www.googleapis.com/auth/service.management.readonly
  • Lese-/Schreibzugriff auf die für Google Cloud Endpoints(Alpha) erforderlichen Service Control-Features:
    https://www.googleapis.com/auth/servicecontrol

Mit Zugriffsbereichen werden die standardmäßigen OAuth-Bereiche für Anfragen definiert, die über Clientbibliotheken und gcloud erfolgen. Das hat zur Folge, dass damit bei der Authentifizierung über OAuth unter Umständen der Zugriff auf API-Methoden eingeschränkt wird. Sie wirken sich jedoch nicht auf andere Authentifizierungsprotokolle wie gRPC aus. Daher wird empfohlen, den vollständigen Zugriffsbereich cloud-platform für die Instanz zu verwenden und dann den Zugriff des Dienstkontos sicher einzuschränken. Dazu gewähren Sie dem Dienstkonto IAM-Rollen. Weitere Informationen finden Sie unter Dienstkontoberechtigungen.

Wenn Sie eine Instanz durch eine direkte API-Anfrage und nicht mithilfe des gcloud-Befehlszeilentools oder der Google Cloud Console erstellen, wird das Standarddienstkonto nicht mit der Instanz aktiviert. Sie können das Standarddienstkonto jedoch immer noch aktivieren, indem Sie es explizit in der Nutzlast der Anfrage spezifizieren.

Von Google verwaltete Dienstkonten

Diese Dienstkonten werden von Google erstellt und verwaltet und Ihrem Projekt automatisch zugewiesen. Diese Konten repräsentieren verschiedene Google-Dienste und jedes Konto hat in gewissem Umfang Zugriff auf Ihr Google Cloud-Projekt.

Google APIs-Dienstkonto

Neben dem Standarddienstkonto haben alle Projekte, die mit der Compute Engine aktiviert wurden, ein Google APIs-Dienstkonto, das an dieser E-Mail erkennbar ist:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Dieses Dienstkonto ist speziell dafür vorgesehen, interne Google-Prozesse in Ihrem Namen auszuführen. Das Konto ist Eigentum von Google und ist nicht im Abschnitt Dienstkonten der Cloud Console aufgeführt. Standardmäßig wird dem Konto automatisch die Rolle "Projektbearbeiter" für das Projekt zugewiesen und es wird in der Cloud Console im Bereich "IAM" aufgeführt. Dieses Dienstkonto wird erst dann gelöscht, wenn das Projekt gelöscht wird. Allerdings können Sie die Rollen ändern, die diesem Konto zugewiesen sind. Sie können ihm auch jeden Zugriff auf Ihr Projekt entziehen.

Bestimmte Ressourcen sind auf dieses Dienstkonto und die standardmäßigen Bearbeiterrechte, die ihm erteilt sind, angewiesen. So nutzen zum Beispiel verwaltete Instanzgruppen und die automatische Skalierung die Anmeldedaten dieses Kontos, um Instanzen zu erstellen, zu löschen und zu verwalten. Wenn Sie dem Dienstkonto Berechtigungen entziehen oder die Berechtigungen so verändern, dass es keine Berechtigungen erteilt, Instanzen zu erstellen, wird dies dazu führen, dass verwaltete Instanzgruppen und automatische Skalierung nicht mehr funktionieren.

Aus diesen Gründen sollten Sie die Rollen dieses Dienstkontos nicht ändern.

Compute Engine System-Dienstkonto

Alle Projekte, für die die Compute Engine API aktiviert ist, haben ein Compute Engine-Systemdienstkonto mit der folgenden E-Mail-Adresse:

service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

Dieses Dienstkonto wurde speziell für Compute Engine entwickelt, um Dienstaufgaben für Ihr Projekt auszuführen. Es basiert auf der IAM-Richtlinie "Dienstagent", die Ihrem Google Cloud-Projekt zugewiesen wurde. Es ist auch das Dienstkonto, mit dem Compute Engine auf das kundeneigene Dienstkonto auf VM-Instanzen zugreift. Google ist zwar der Inhaber dieses Kontos, das Konto ist aber projektspezifisch und wird im Abschnitt "IAM" der Console aufgeführt. Standardmäßig wird dem Konto automatisch die Rolle compute.serviceAgent für das Projekt zugewiesen.

Dieses Dienstkonto wird nur gelöscht, wenn Sie Ihr Projekt löschen. Sie können die diesem Konto zugewiesenen Rollen ändern und über das Konto den gesamten Zugriff auf Ihr Projekt aufheben. Durch den Widerruf oder die Änderung der Berechtigungen für dieses Dienstkonto wird verhindert, dass Compute Engine die Dienstkonten-Identitäten auf Ihren VMs verwenden kann. Dies kann zu Softwareausfällen in Ihren VMs führen.

Aus diesen Gründen sollten Sie die Rollen für dieses Dienstkonto möglichst nicht ändern.

Dienstkontoberechtigungen

Wenn Sie eine Instanz für die Ausführung als Dienstkonto einrichten, legen Sie die Zugriffsebene des Dienstkontos anhand der IAM-Rollen fest, die Sie dem Dienstkonto zuweisen. Wenn das Dienstkonto keine IAM-Rollen hat, können vom Dienstkonto für diese Instanz keine API-Methoden ausgeführt werden.

Darüber hinaus werden mit den Zugriffsbereichen einer Instanz die standardmäßigen OAuth-Bereiche für Anfragen festgelegt, die auf der Instanz über das gcloud-Tool und Clientbibliotheken erfolgen. Dies hat zur Folge, dass mit Zugriffsbereichen bei der Authentifizierung über OAuth möglicherweise der Zugriff auf API-Methoden eingeschränkt wird. Sie wirken sich jedoch nicht auf andere Authentifizierungsprotokolle wie gRPC aus.

Als Best Practice wird empfohlen, den vollständigen Zugriffsbereich cloud-platform für die Instanz zu verwenden und dann den Zugriff des Dienstkontos mithilfe von IAM-Rollen sicher einzuschränken.

Im Wesentlichen:

  • schränkt IAM den Zugriff auf APIs basierend auf den IAM-Rollen ein, die dem Dienstkonto zugewiesen sind;
  • wird mit Zugriffsbereichen bei der Authentifizierung über OAuth möglicherweise der Zugriff auf API-Methoden eingeschränkt.

Zugriffsbereiche und IAM-Rollen werden in den Abschnitten weiter unten detailliert beschrieben.

Es gibt viele Zugriffsbereiche, aus denen Sie auswählen können. Sie können aber auch einfach den Zugriffsbereich cloud-platform verwenden, der ein OAuth-Bereich für alle Google Cloud-Dienste ist. Anschließend können Sie den Zugriff des Dienstkontos sicher einschränken, indem Sie ihm IAM-Rollen zuweisen.

https://www.googleapis.com/auth/cloud-platform

Beispiel: Sie haben den Zugriffsbereich cloud-platform für eine Instanz aktiviert und dann die folgenden vordefinierten IAM-Rollen zugewiesen:

  • roles/compute.instanceAdmin.v1
  • roles/storage.objectViewer
  • roles/compute.networkAdmin

Das Dienstkonto verfügt dann nur über die Berechtigungen, die in diesen drei IAM-Rollen enthalten sind. Das Konto kann trotz des Google Cloud-Zugriffsbereichs keine Aktionen außerhalb dieser Rollen ausführen.

Wenn Sie dagegen der Instanz einen eingeschränkteren Bereich, z. B. den schreibgeschützten Bereich "Cloud Storage" (https://www.googleapis.com/auth/devstorage.read_only), und dem Dienstkonto die Administratorrolle roles/storage.objectAdmin zuweisen, dann können mit Anfragen vom gcloud-Tool und den Clientbibliotheken standardmäßig keine Cloud Storage-Objekte aus dieser Instanz verwaltet werden, obwohl Sie dem Dienstkonto die Rolle roles/storage.ObjectAdmin zugewiesen haben. Dies liegt daran, dass die Instanz im Lesebereich von Cloud Storage nicht zum Bearbeiten von Cloud Storage-Daten autorisiert ist.

Im Allgemeinen werden in der Dokumentation für jede API-Methode die für diese Methode erforderlichen Bereiche aufgeführt. So wird beispielsweise mit der Methode instances.insert eine Liste der gültigen Bereiche im Abschnitt Autorisierung aufgerufen.

IAM-Rollen

Sie müssen einem Dienstkonto die entsprechenden IAM-Rollen zuweisen, um dem Dienstkonto Zugriff auf relevante API-Methoden zu gewähren.

Beispielsweise können Sie einem Dienstkonto die IAM-Rollen zur Verwaltung von Cloud Storage-Objekten und/oder zur Verwaltung von Cloud Storage-Buckets zuweisen. Das Konto ist dann auf die Berechtigungen beschränkt, die durch diese Rollen gewährt werden.

IAM-Rollen sind kontospezifisch. Wenn Sie also einem Dienstkonto eine IAM-Rolle zugewiesen haben, kann diese Rolle von jeder Instanz genutzt werden, die als dieses Dienstkonto ausgeführt wird. Berücksichtigen Sie außerdem Folgendes:

  • Einige IAM-Rollen sind aktuell in der Betaphase.

    Wenn für die gewünschte Zugriffsebene keine vordefinierte IAM-Rolle vorhanden ist, können Sie eine der einfachen Rollen zuweisen, z. B. „Projektbearbeiter“, oder benutzerdefinierte Rollen erstellen und zuweisen.

  • Sie müssen Zugriffsbereiche auf der Instanz festlegen, um den Zugriff zu autorisieren.

    Die Zugriffsebene eines Dienstkontos wird anhand der IAM-Rollen festgelegt, die dem Dienstkonto zugewiesen sind. Mit den Zugriffsbereichen einer Instanz werden die standardmäßigen OAuth-Bereiche für Anfragen festgelegt, die auf der Instanz über das gcloud-Tool und Clientbibliotheken erfolgen. Dies hat zur Folge, dass mit Zugriffsbereichen bei der Authentifizierung über OAuth möglicherweise der Zugriff auf API-Methoden eingeschränkt wird.

Zugriffsbereiche

Zugriffsbereiche sind die alte Methode, Berechtigungen für Ihre Instanz festzulegen. Zugriffsbereiche sind kein Sicherheitsmechanismus. Mit Zugriffsbereichen werden stattdessen die standardmäßigen OAuth-Bereiche definiert, die in Anfragen über das gcloud-Tool oder die Clientbibliotheken verwendet werden. Sie haben keine Auswirkungen auf Anfragen, die nicht über OAuth authentifiziert wurden, z. B. gRPC oder die SignBlob APIs.

Sie müssen Zugriffsbereiche einrichten, wenn Sie eine Instanz konfigurieren, die als Dienstkonto ausgeführt werden soll.

Eine Best Practice besteht darin, den vollständigen Zugriffsbereich cloud-platform für die Instanz festzulegen und dann den API-Zugriff des Dienstkontos mit IAM-Rollen sicher einzuschränken.

Zugriffsbereiche gelten jeweils für eine Instanz. Sie legen Zugriffsbereiche beim Erstellen einer Instanz fest. Die Zugriffsbereiche bleiben nur für die Lebensdauer der Instanz bestehen.

Zugriffsbereiche haben keine Auswirkungen, wenn Sie die zugehörige API für das Projekt, zu dem das Dienstkonto gehört, nicht aktiviert haben. Wenn Sie zum Beispiel einer VM-Instanz einen Zugriffsbereich für Cloud Storage zuweisen, kann die Instanz die Cloud Storage API nur dann aufrufen, wenn die Cloud Storage API im Projekt aktiviert ist.

Beispiel für Zugriffsbereiche:

  • https://www.googleapis.com/auth/cloud-platform: Uneingeschränkter Zugriff auf alle Google Cloud-Ressourcen
  • https://www.googleapis.com/auth/compute: Uneingeschränkter Zugriff auf Compute Engine-Methoden
  • https://www.googleapis.com/auth/compute.readonly: Lesezugriff auf Compute Engine-Methoden
  • https://www.googleapis.com/auth/devstorage.read_only: Lesezugriff auf Cloud Storage
  • https://www.googleapis.com/auth/logging.write. Schreibzugriff auf die Compute Engine-Logs

Weitere Informationen