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, zum Interagieren mit anderen Google Cloud Platform-APIs verwendet wird. Anwendungen können Dienstkonto-Anmeldedaten nutzen, um sich für eine Reihe von APIs zu autorisieren und im Rahmen der dem Dienstkonto und der VM-Instanz erteilten Berechtigungen Aktionen auszuführen. Außerdem können Sie Firewallregeln 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.

Diese Identität dient dazu, die auf Ihren VM-Instanzen ausgeführten Anwendungen gegenüber anderen Google Cloud Platform-Diensten zu identifizieren. Wenn Sie zum Beispiel eine Anwendung schreiben, die Dateien auf Google Cloud Storage liest oder schreibt, muss diese sich zuerst bei der Google Cloud Storage API authentifizieren. Sie können ein Dienstkonto erstellen und dem Dienstkonto Rechte auf die Cloud Storage API erteilen. Anschließend bearbeiten Sie Ihren Anwendungscode so, dass er die Anmeldedaten des Dienstkontos an die Cloud Storage API übergibt. So kann sich Ihre Anwendung nahtlos bei der API authentifizieren, ohne geheime Schlüssel oder Nutzeranmeldedaten in Ihre Instanz, Ihr Image oder Ihren Anwendungscode einzubauen.

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

Sie können Ihre eigenen Dienstkonten mithilfe von Google Identitäts- und Zugriffsverwaltung (IAM) erstellen und verwalten. Nachdem Sie es erstellt haben, weisen Sie dem Konto IAM-Rollen zu und richten Instanzen so ein, dass sie als das Dienstkonto ausgeführt werden. Anwendungen, die auf Instanzen laufen, die mit dem Dienstkonto aktiviert wurden, können die Anmeldedaten des Kontos nutzen, um Anfragen an andere Google APIs zu stellen.

Zum Anlegen und Einrichten eines neuen Dienstkontos siehe Dienstkonten für Instanzen erstellen und aktivieren.

Standardmäßiges Compute Engine-Dienstkonto

Für neu erstellte Projekte gibt es das Compute Engine-Standarddienstkonto, das mit der folgenden E-Mail identifiziert werden kann:

[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", aber Sie können die Rollen des Dienstkontos ändern. So bietet sich Ihnen die sichere Möglichkeit, einzuschränken, auf welche Google APIs das Dienstkonto zugreifen kann.

Sie können dieses Dienstkonto aus Ihrem Projekt löschen, dies 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 Platform Console-Projekt erstellt und mit automatisch generiertem Namen und 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 GCP 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 Platform Console erstellen, können Sie angeben, welches Dienstkonto die Instanz beim Aufrufen von GCP APIs verwendet. Die Instanz wird automatisch mit den folgenden Zugriffsbereichen konfiguriert:

  • Nur-Lese-Zugriff auf Google 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-Funktionen:
    https://www.googleapis.com/auth/service.management.readonly
  • Lese-/Schreibzugriff auf die für Google Cloud Endpoints(Alpha) erforderlichen Service Control-Funktionen:
    https://www.googleapis.com/auth/servicecontrol

Mit Zugriffsbereichen werden die standardmäßigen OAuth-Bereiche für Anfragen definiert, die über Clientbibliotheken und gcloud erfolgen. Dies hat zur Folge, dass damit 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. Daher empfiehlt es sich, den vollständigen Zugriffsbereich cloud-platform für die Instanz zu verwenden und dann den Zugriff des Dienstkontos sicher einzuschränken, indem Sie dem Dienstkonto IAM-Rollen zuweisen. 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 Platform Console erstellen, wird der Instanz nicht das Standarddienstkonto zugewiesen. 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 Platform-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 GCP Console aufgeführt. Standardmäßig wird dem Konto automatisch die Projektbearbeiterrolle für das Projekt zugewiesen und das Konto ist im Abschnitt IAM der GCP Console 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 wurde, verfügen über ein Compute Engine System-Dienstkonto, das anhand der folgenden Adresse identifizierbar ist:

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

Dieses Dienstkonto wurde speziell für Google Compute Engine entwickelt, um Dienstaufgaben für Ihr Projekt auszuführen. Es basiert auf der IAM-Richtlinie "Dienstagent", die Ihrem Google Cloud-Projekt erteilt wurde. Es ist auch das Dienstkonto, mit dem Compute Engine auf das kundeneigene Dienstkonto auf VM-Instanzen zugreift. Das Konto gehört Google, ist aber projektspezifisch und wird in der GCP Console unter Dienstkonten und IAM aufgeführt. Standardmäßig erhält das Konto automatisch die Rolle compute.serviceAgent für Ihr Projekt.

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 nicht ändern.

Dienstkontoberechtigungen

Wenn Sie eine Instanz einrichten, um als Dienstkonto ausgeführt zu werden, legen Sie die Zugriffsebene des Dienstkontos über die 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, bei dem es sich um einen OAuth-Bereich für alle Cloud Platform-Dienste handelt. 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

Aktivieren Sie beispielsweise den Zugriffsbereich cloud-platform für eine Instanz und weisen Sie ihr dann die folgenden vordefinierten IAM-Rollen zu:

  • 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. Mit dem Konto können keine Aktionen ausgeführt werden, die außerhalb der Berechtigungen dieser Rollen liegen, obwohl der Zugriffsbereich "Cloud Platform" aktiviert wurde.

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 Google Cloud Storage-Objekte aus dieser Instanz verwaltet werden, obwohl Sie dem Dienstkonto die Rolle roles/storage.ObjectAdmin zugewiesen haben. Im Lesezugriffbereich von Cloud Storage besitzt die Instanz keine Autorisierung, Daten von Cloud Storage zu bearbeiten.

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 Zugriffsbereiche 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 Google Cloud Storage-Objekten und/oder zur Verwaltung von Google Cloud Storage-Buckets zuweisen. So ist das Konto auf die durch diese Rollen gewährten Berechtigungen beschränkt.

IAM-Rollen sind kontospezifisch. Das bedeutet: Sobald Sie einem Dienstkonto eine IAM-Rolle zuweisen, 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.

Als Best Practice wird empfohlen, den vollständigen Zugriffsbereich cloud-platform für die Instanz zu verwenden und dann den API-Zugriff des Dienstkontos mithilfe von 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 Google 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 – vollständiger Zugriff auf alle Google Cloud Platform-Ressourcen.
  • https://www.googleapis.com/auth/compute – vollständige Kontrolle des Zugriffs auf Google Compute Engine-Methoden.
  • https://www.googleapis.com/auth/compute.readonly – Lesezugriff auf Google Compute Engine-Methoden.
  • https://www.googleapis.com/auth/devstorage.read_only – Lesezugriff auf Google Cloud Storage.
  • https://www.googleapis.com/auth/logging.write – Schreibzugriff auf die Google Compute Engine-Logs.

Weitere Informationen