Auf dieser Seite wird beschrieben, wie Sie mit Dienstkonten Anwendungen, die auf VM-Instanzen ausgeführt werden, die Authentifizierung bei Google Cloud APIs ermöglichen und den Zugriff auf Ressourcen autorisieren können.
Weitere Informationen zur Verwendung von Dienstkonten durch Compute Engine finden Sie in der Übersicht zu Dienstkonten.
Hinweis
- Wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten, gehen Sie so vor:
- Installieren Sie die Google Cloud CLI oder aktualisieren Sie sie auf die neueste Version.
- Legen Sie eine Standardregion und -zone fest.
- Wenn Sie die API-Beispiele dieser Anleitung verwenden möchten, richten Sie den API-Zugang ein.
- Lesen Sie den Leitfaden zu Dienstkonten.
Neues Dienstkonto erstellen
Sie können ein neues Dienstkonto mit IAM erstellen und einrichten. Nachdem Sie ein Konto erstellt haben, weisen Sie dem Konto eine oder mehrere IAM-Rollen zu und autorisieren Sie dann, dass eine VM-Instanz als dieses Dienstkonto ausgeführt wird.
Console
Um ein neues Dienstkonto zu erstellen:
Erstellen Sie ein neues Dienstkonto wie unter Dienstkonto erstellen beschrieben.
Ermitteln Sie die E-Mail-Adresse für das Dienstkonto. Sie benötigen die E-Mail-Adresse, um eine Instanz einzurichten, die als dieses Dienstkonto ausgeführt wird. Prüfen Sie die E-Mail-Adresse für das Dienstkonto in der Console:
Rufen Sie die Seite Dienstkonten auf.
Wenn Sie dazu aufgefordert werden, wählen Sie ein Projekt.
Suchen Sie das neue Dienstkonto und notieren Sie sich die angegebene E-Mail-Adresse.
Üblicherweise wird die E-Mail-Adresse für das Dienstkonto von der Dienstkonto-ID im folgenden Format abgeleitet:
[SERVICE-ACCOUNT-NAME]@[PROJECT_ID].iam.gserviceaccount.com
Weisen Sie dem Dienstkonto IAM-Rollen zu. Wenn Sie dem Dienstkonto keine Rollen zuweisen, hat es keinen Zugriff auf Dienste. Eine vollständige Liste von IAM-Rollen finden Sie in der IAM-Dokumentation unter Informationen zu Rollen.
Als Nächstes erstellen Sie eine Instanz, die als ein Dienstkonto ausgeführt werden soll. Folgen Sie der Anleitung zum Erstellen einer Instanz, die als Dienstkonto ausgeführt werden soll.
Terraform
Sie können zum Erstellen eines Dienstkontos die Ressource google_service_account
verwenden.
Ersetzen Sie die Platzhalterwerte für die Attribute account_id
und display_name
.
Informationen zum Anwenden oder Entfernen einer Terraform-Konfiguration finden Sie unter Grundlegende Terraform-Befehle.
Neue Instanz erstellen, die als Dienstkonto ausgeführt werden soll
Nachdem Sie ein neues Dienstkonto erstellt haben, können Sie neue Instanzen der virtuellen Maschine erstellen, die als das Dienstkonto ausgeführt werden sollen. Befindet sich das Dienstkonto in einem anderen Projekt als die Instanzen, müssen Sie das Dienstkonto für eine Ressource in einem anderen Projekt konfigurieren.
Wenn Sie ein Dienstkonto einer bestehenden Instanz zuweisen oder es ändern möchten, lesen Sie stattdessen Dienstkonto- und Zugriffsbereiche für eine Instanz ändern.
Sie können mehrere Instanzen der virtuellen Maschine aktivieren, um das gleiche Dienstkonto zu verwenden, aber die Instanz einer virtuellen Maschine kann nur eine Dienstkonto-ID haben. Wenn Sie das gleiche Dienstkonto mehreren Instanzen der virtuellen Maschine zuweisen, wird jede nachfolgende Änderung am Dienstkonto die Instanzen, die dieses Dienstkonto verwenden, beeinflussen. Dies schließt alle Änderungen an IAM-Rollen ein, die Sie dem Dienstkonto gewährt haben. Wenn Sie zum Beispiel eine Rolle entfernen, werden alle Instanzen, die das Dienstkonto verwenden, die durch diese Rolle gewährten Berechtigungen verlieren.
Im Allgemeinen legen Sie einfach den Zugriffsbereich cloud-platform
fest, um den Zugriff auf die meisten Cloud APIs zuzulassen, und weisen dann dem Dienstkonto nur relevante IAM-Rollen zu. Die Kombination aus den Zugriffsbereichen, die der VM-Instanz zugewiesen wurden, und den dem Dienstkonto zugewiesenen IAM-Rollen bestimmt den Umfang des Zugriffs, den ein Dienstkonto auf diese Instanz hat. Das Dienstkonto kann API-Methoden nur dann ausführen, wenn diese sowohl vom Zugriffsbereich als auch von den IAM-Rollen zugelassen werden.
Alternativ können Sie bestimmte Bereiche festlegen, die den Zugriff auf die entsprechenden API-Methoden erlauben, die der Dienst aufrufen wird. Das Aufrufen der Methode instances.insert
erfordert beispielsweise eine Autorisierung des Bereichs https://www.googleapis.com/auth/compute
oder https://www.googleapis.com/auth/cloud-platform
sowie eine IAM-Rolle, die Zugriff auf diese Methode gewährt. Sie könnten den Bereich compute
anstelle des Bereichs cloud-platform
festlegen, der dann dem Dienst Zugriff zum Aufruf von Methoden in Compute Engine, jedoch nicht von API-Methoden außerhalb von Compute Engine gibt.
Sie können eine neue Instanz so einrichten, dass sie als Dienstkonto ausgeführt wird. Verwenden Sie hierzu die Google Cloud Console, die Google Cloud CLI oder gehen Sie direkt über die API.
Console
Gehen Sie zur Seite Instanz erstellen.
Geben Sie die VM-Details an
Wählen Sie im Abschnitt Identität und API-Zugriff aus der Drop-down-Liste das Dienstkonto aus, das Sie verwenden möchten.
Fahren Sie mit dem VM-Erstellungsprozess fort.
gcloud
Wenn Sie eine neue Instanz erstellen und sie als benutzerdefiniertes Dienstkonto über die Google Cloud CLI autorisieren möchten, geben Sie die E-Mail des Dienstkontos und die gewünschten Zugriffsbereiche für die Instanz an.
gcloud compute instances create [INSTANCE_NAME] \
--service-account [SERVICE_ACCOUNT_EMAIL] \
--scopes [SCOPES,...]
wobei
[SERVICE_ACCOUNT_EMAIL]
ist die E-Mail-Adresse für das Dienstkonto, das Sie verwenden möchten. Beispiel:my-sa-123@my-project-123.iam.gserviceaccount.com
. Wenn Sie die E-Mail-Adresse nicht kennen, finden Sie entsprechende Informationen im Abschnitt zum Beziehen einer E-Mail-Adresse für das Dienstkonto.[INSTANCE_NAME]
ist der Name der Instanz.[SCOPES]
ist eine durch Kommas getrennte Liste aller vollständigen Bereichs-URIs oder Bereichsaliasse, wie in der Beschreibung für das Flag--scopes
angegeben.
Beispiel:
gcloud compute instances create example-vm \
--service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
--scopes https://www.googleapis.com/auth/cloud-platform
Die gcloud CLI bietet auch Bereichsaliasse anstelle der längeren Bereichs-URIs. Zum Beispiel wird der volle Zugriff auf Cloud Storage durch den Bereich https://www.googleapis.com/auth/devstorage.full_control
gewährt. Der Alias für diesen Bereich ist storage-full
.
Eine Liste der Bereiche und Bereichsaliasse finden Sie auf der Seite zu instances create
in der Beschreibung für das Flag --scopes
. In der Hilfe zum Befehl instances create
werden diese Bereiche und Aliasse ebenfalls aufgeführt:
gcloud compute instances create --help
Geben Sie den Alias auf die gleiche Weise an wie beim normalen Bereichs-URI. Beispiel:
gcloud compute instances create [INSTANCE_NAME] \
--service-account [SERVICE_ACCOUNT_EMAIL] \
--scopes cloud-platform
Terraform
Wenn Sie eine neue Instanz einrichten möchten, die als Dienstkonto ausgeführt werden soll, können Sie die Ressource google_compute_instance
verwenden.
API
Richten Sie in der API eine Standardanfrage ein, um eine Instanz zu erstellen, und geben Sie dabei das Attribut serviceAccounts
an.
Rufen Sie die E-Mail-Adresse für Ihr Dienstkonto ab und fügen Sie sie im Attribut email
zusammen mit den gewünschten Zugriffsbereichen für die Instanz ein.
POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances { "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]", "name": "[INSTANCE_NAME]", "serviceAccounts": [ { "email": "[SERVICE_ACCOUNT_EMAIL]", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], ... }
Nachdem Sie eine Instanz zur Ausführung als Dienstkonto eingerichtet haben, kann eine auf der Instanz ausgeführte Anwendung eine der folgenden Authentifizierungsmethoden verwenden:
- Für die meisten Anwendungen können Sie eine der folgenden Optionen auswählen:
- Für Anwendungen, die ein OAuth2-Zugriffstoken benötigen, müssen Sie Zugriffstokens direkt über den Metadatenserver anfordern und verwenden.
Anwendungen mithilfe der Anmeldedaten des Dienstkontos authentifizieren
Nachdem Sie festgelegt haben, dass eine Instanz als Dienstkonto ausgeführt werden soll, können Sie die Anmeldedaten des Dienstkontos zum Authentifizieren von Anwendungen verwenden, die in dieser Instanz ausgeführt werden.
Anwendungen mit einer Clientbibliothek authentifizieren
Clientbibliotheken können Standardanmeldedaten für Anwendungen zum Authentifizieren bei Google APIs verwenden und Anforderungen an diese APIs senden. Mit Standardanmeldedaten für Anwendungen können Anwendungen Anmeldedaten aus mehreren Quellen erhalten, sodass Sie Ihre Anwendung lokal testen und danach einer Compute Engine-Instanz bereitstellen können, ohne den Anwendungscode ändern zu müssen.
Informationen zum Einrichten von Standardanmeldedaten für Anwendungen finden Sie unter Anmeldedaten für Standardanmeldedaten für Anwendungen bereitstellen.
In diesem Beispiel wird die Python-Clientbibliothek verwendet, um eine Anfrage zum Auflisten der Buckets in einem Projekt zu authentifizieren und an die Cloud Storage API zu senden. In diesem Beispiel wird das folgende Verfahren angewendet:
- Rufen Sie die erforderlichen Anmeldedaten zur Authentifizierung für die Cloud Storage API ab und initialisieren Sie den Cloud Storage-Dienst mit der Methode
build()
und den Anmeldedaten. - Listen Sie Buckets in Cloud Storage auf.
Sie können dieses Beispiel auf einer Instanz ausführen, die die Berechtigung zum Verwalten von Buckets in Cloud Storage hat.
Anwendungen direkt mit Zugriffstoken authentifizieren
Bei den meisten Anwendungen können Sie sich mit den Standardanmeldedaten für Anwendungen authentifizieren. Dabei werden Anmeldedaten gesucht und Tokens für Sie verwaltet. Wenn Sie für Ihre Anwendung jedoch ein OAuth2-Zugriffstoken angeben müssen, können Sie in Compute Engine ein Zugriffstoken von seinem Metadatenserver zur Verwendung in Ihrer Anwendung abrufen.
Es gibt verschiedene Möglichkeiten, wie Sie Zugriffstokens zur Authentifizierung Ihrer Anwendungen erhalten und verwenden können. Zum Beispiel können Sie curl
verwenden, um eine einfache Anfrage zu erstellen, oder für mehr Flexibilität eine Programmiersprache wie Python nutzen.
cURL
So verwenden Sie curl
, um ein Zugriffstoken anzufordern und eine Anfrage an eine API zu senden:
Rufen Sie in der Instanz, in der Ihre Anwendung ausgeführt wird, ein Zugriffstoken vom Metadatenserver ab. Führen Sie dazu folgenden Befehl aus:
$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google"
Die Anfrage liefert eine Antwort ähnlich wie hier:
{ "access_token":"ya29.AHES6ZRN3-HlhAPya30GnW_bHSb_QtAS08i85nHq39HE3C2LTrCARA", "expires_in":3599, "token_type":"Bearer" }
Bei API-Anfragen müssen Sie den Wert
access_token
und nicht die gesamte Antwort angeben. Wenn Sie den jq-Befehlszeilen-JSON-Prozessor installiert haben, können Sie mit dem folgenden Befehl den Zugriffstokenwert aus der Antwort extrahieren:$ ACCESS_TOKEN=`curl \ "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" \ -H "Metadata-Flavor: Google" | jq -r '.access_token'`
Kopieren Sie den Wert des Attributs
access_token
aus der Antwort und verwenden Sie ihn, um Anfragen an die API zu senden. Die folgende Anfrage gibt beispielsweise eine Liste der Instanzen aus einer bestimmten Zone in Ihrem Projekt zurück:$ curl https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances \ -H "Authorization":"Bearer [ACCESS_TOKEN]"
wobei
[PROJECT_ID]
ist die Projekt-ID für diese Anfrage.[ZONE]
ist die Zone, aus der Instanzen aufgelistet werden sollen.[ACCESS_TOKEN]
ist der Wert des Zugriffstokens, den Sie in Schritt 1 erhalten haben.
Weitere Informationen zu den Parametern, die Sie in Ihrer Anfrage festlegen können, finden Sie in der Dokumentation Parameter.
Python
Dieses Beispiel zeigt, wie Sie ein Token anfordern, um in einer Python-Anwendung Zugriff auf die Cloud Storage API zu erhalten. In diesem Beispiel wird das folgende Verfahren angewendet:
- Fordern Sie ein Zugriffstoken aus dem Metadatenserver an.
- Extrahieren Sie das Zugriffstoken aus der Antwort des Servers.
- Verwenden Sie das Zugriffstoken, um eine Anfrage an Cloud Storage zu senden.
- Wenn die Anfrage erfolgreich war, druckt das Skript die Antwort.
Zugriffstoken verfallen schon nach kurzer Zeit. Der Metadatenserver behält die Zugriffstoken so lange im Cache, bis sie 5 Minuten Restzeit haben, bevor sie ablaufen. Sie können neue Tokens so oft Sie wollen anfordern, aber Ihre Anwendungen müssen ein gültiges Zugriffstoken haben, damit ihre API-Aufrufe erfolgreich sind.
Tools in einer Instanz mithilfe eines Dienstkontos authentifizieren
Einige Anwendungen könnten Befehle der Tools gcloud
und gsutil
verwenden, die standardmäßig in den meisten Compute Engine-Images enthalten sind. Diese Tools erkennen automatisch das Dienstkonto einer Instanz und entsprechende Berechtigungen, die dem Dienstkonto zugewiesen wurden. Insbesondere dann, wenn Sie dem Dienstkonto die richtigen Rollen zugewiesen haben, können Sie die Tools gcloud
und gsutil
Ihrer Instanz verwenden, ohne gcloud auth login
verwenden zu müssen.
Diese Erkennung des Dienstkontos erfolgt automatisch und gilt nur für die Tools gcloud
und gsutil
, die in der Instanz enthalten sind. Wenn Sie neue Tools erstellen oder benutzerdefinierte Tools hinzufügen, müssen Sie die Anwendung mithilfe einer Clientbibliothek oder mithilfe von Zugriffstokens direkt in der Anwendung authentifizieren.
Wenn Sie die Vorteile einer automatischen Erkennung des Dienstkontos nutzen möchten, können Sie dem Dienstkonto die entsprechenden IAM-Rollen zuweisen und eine Instanz erstellen, die als Dienstkonto ausgeführt werden soll.
Wenn Sie zum Beispiel einem Dienstkonto die Rolle roles/storage.objectAdmin
zuweisen, kann das gsutil
-Tool automatisch Cloud Storage-Objekte verwalten und abrufen.
Analog kann das gcloud compute
-Tool Instanzen automatisch verwalten, wenn Sie roles/compute.instanceAdmin.v1
für das Dienstkonto aktivieren.
Dienstkonto und Zugriffsbereiche für eine Instanz ändern
Wenn Sie die VM als eine andere Identität ausführen möchten oder wenn Sie feststellen, dass die Instanz andere Bereiche benötigt, um die erforderlichen APIs aufzurufen, können Sie das Dienstkonto und die Zugriffsbereiche einer bestehenden Instanz ändern. Beispiel: Sie können Zugriffsbereiche ändern, um den Zugriff auf eine neue API zu gewähren, Sie können das Dienstkonto und die Zugriffsbereiche entfernen, um zu verhindern, dass eine VM auf Google Cloud-Dienste zugreift. Sie können auch eine VM so ändern, dass sie als ein Dienstkonto ausgeführt wird, das Sie anstelle des Compute Engine-Standarddienstkontos erstellt haben. Google empfiehlt jedoch, den Ressourcenzugriff für das Dienstkonto mit detaillierten IAM-Richtlinien statt mit Zugriffsbereichen zu steuern.
Um das Dienstkonto und die Zugriffsbereiche einer Instanz zu ändern, muss die Instanz vorübergehend gestoppt werden. Um Ihre Instanz zu beenden, lesen Sie die Dokumentation zum Beenden einer Instanz (nur auf Englisch verfügbar). Nachdem Sie das Dienstkonto oder die Zugriffsbereiche geändert haben, denken Sie an den Neustart der Instanz. Verwenden Sie eine der folgenden Methoden, um das Dienstkonto oder die Zugriffsbereiche der gestoppten Instanz zu ändern.
Console
Rufen Sie die Seite VM-Instanzen auf.
Klicken Sie auf den Namen der VM-Instanz, für die Sie das Dienstkonto ändern möchten.
Wenn die Instanz nicht beendet ist, klicken Sie auf Beenden. Warten Sie, bis die Instanz angehalten wurde.
Klicken Sie anschließend auf Bearbeiten.
Scrollen Sie nach unten bis zum Abschnitt Dienstkonto.
Wählen Sie aus der Drop-down-Liste das Dienstkonto aus, das der Instanz zugewiesen werden soll.
- Wenn Sie das Standarddienstkonto wählen, können Sie die Zugriffsbereiche in der Cloud Console ändern.
- Wählen Sie zum Ändern von Bereichen im Abschnitt Zugriffsbereiche die Option Zugriff der einzelnen APIs festlegen und legen Sie die entsprechenden Bereiche je nach Ihren Anforderungen fest.
- Wenn Sie nicht sicher sind, welche Zugriffsbereiche benötigt werden, wählen Sie Uneingeschränkten Zugriff auf alle Cloud APIs zulassen und schränken Sie den Zugriff dann durch IAM-Rollen für das Dienstkonto ein.
- Wenn Sie ein anderes Dienstkonto auswählen, entspricht der Zugriffsbereich der VM standardmäßig dem Bereich
cloud-platform
. Sie können den Bereich mit der gcloud CLI oder der Compute Engine API ändern. - Weitere Informationen zum Festlegen von Zugriffsbereichen finden Sie unter Best Practices.
- Wenn Sie das Standarddienstkonto wählen, können Sie die Zugriffsbereiche in der Cloud Console ändern.
Klicken Sie auf Speichern, um die Änderungen zu speichern.
gcloud
Verwenden Sie den Befehl instances set-service-account
und geben Sie den Instanznamen, die E-Mail-Adresse für das Dienstkonto und die gewünschten Bereiche an. Weitere Informationen zum Festlegen von Zugriffsbereichen finden Sie unter Best Practices.
gcloud compute instances set-service-account [INSTANCE_NAME] \
[--service-account [SERVICE_ACCOUNT_EMAIL] | --no-service-account] \
[--no-scopes | --scopes [SCOPES,...]]
wobei
[SERVICE_ACCOUNT_EMAIL]
ist die E-Mail-Adresse für das Dienstkonto, das Sie verwenden möchten. Beispiel:my-sa-123@my-project-123.iam.gserviceaccount.com
.[INSTANCE_NAME]
ist der Name der Instanz.[SCOPES]
ist eine durch Kommas getrennte Liste aller vollständigen Bereichs-URIs oder Bereichsaliasse, wie in der Beschreibung für das Flag--scopes
angegeben. Wenn Sie alle Bereiche für die Instanz entfernen möchten, verwenden Sie stattdessen das Flag--no-scopes
.
Der folgende Befehl weist zum Beispiel einer Instanz namens „example-instance“ das Dienstkonto my-sa-123@my-project-123.iam.gserviceaccount.com
zu und legt Zugriffsbereiche in der Instanz fest, um Schreib- und Lesezugriff auf Compute Engine und Lesezugriff auf Cloud Storage zuzulassen:
gcloud compute instances set-service-account example-instance \
--service-account my-sa-123@my-project-123.iam.gserviceaccount.com \
--scopes compute-rw,storage-ro
API
Führen Sie in der API eine POST
-Anfrage an die Methode setServiceAccount
aus.
https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setServiceAccount
wobei
[PROJECT_ID]
ist die Projekt-ID für diese Anfrage.[ZONE]
ist die Zone, zu der die Instanz gehört.[INSTANCE_NAME]
ist der Name der Instanz.
Geben Sie im Anfragetext die E-Mail-Adresse des Dienstkontos und die gewünschten Bereichs-URIs für die Instanz an. Weitere Informationen zum Festlegen von Zugriffsbereichen finden Sie unter Best Practices.
{
"email": "[SERVICE_ACCOUNT_EMAIL]",
"scopes": [
"[SCOPE_URI]",
"[SCOPE_URI]",
...
]
}
Die folgende Anfrage verwendet zum Beispiel die E-Mail-Adresse my-sa-123@my-project-123.iam.gserviceaccount.com
für das Dienstkonto und legt als Bereiche Cloud Storage und BigQuery fest:
{
"email": "my-sa-123@my-project-123.iam.gserviceaccount.com",
"scopes": [
"https://www.googleapis.com/auth/bigquery",
"https://www.googleapis.com/auth/devstorage.read_only"
]
}
E-Mail-Adresse für das Dienstkonto beziehen
Um ein Dienstkonto zu identifizieren, benötigen Sie die E-Mail-Adresse für das Dienstkonto. Um eine E-Mail-Adresse für ein Dienstkonto zu erhalten, haben Sie folgende Optionen:
Console
Rufen Sie die Seite Dienstkonten auf.
Wenn Sie dazu aufgefordert werden, wählen Sie ein Projekt. Auf der Seite der Dienstkonten sind alle Dienstkonten für das Projekt und deren E-Mail-Adressen aufgelistet.
gcloud
Verwenden Sie auf Ihrem lokalen Rechner den Befehl gcloud compute instances describe
:
gcloud compute instances describe [INSTANCE_NAME] --format json
{ ... "serviceAccounts":[ { "email":"123845678986-compute@developer.gserviceaccount.com", "scopes":[ "https://www.googleapis.com/auth/devstorage.full_control" ] } ] ... }
Wenn die Instanz kein Dienstkonto verwendet, erhalten Sie eine Antwort ohne das Attribut serviceAccounts
.
Metadatenserver
Fragen Sie den Metadatenserver aus der Instanz selbst heraus ab. Stellen Sie eine Anfrage an http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/
:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
-H "Metadata-Flavor: Google"
Wenn Sie beim Erstellen der Instanz ein oder mehrere Dienstkonten aktiviert haben, gibt der Befehl curl
eine Ausgabe wie diese hier zurück:
123845678986-compute@developer.gserviceaccount.com/
default/
Wenn die Instanz kein Dienstkonto verwendet, erhalten Sie eine leere Antwort.
API
Senden Sie eine Anfrage an die Dienstkonten-API.
Compute Engine-Standarddienstkonto verwenden
Wenn Sie mit dem Compute Engine-Standarddienstkonto vertraut sind und die Anmeldeinformationen vom Standarddienstkonto nutzen möchten, anstatt neue Dienstkonten zu erstellen, dann können Sie dem Standarddienstkonto IAM-Rollen zuweisen.
Alle Compute Engine-Instanzen können standardmäßig als das Standarddienstkonto ausgeführt werden. Wenn Sie eine Instanz mithilfe der Google Cloud CLI oder der Cloud Console erstellen und keine Dienstkontospezifikation angeben, wird der Instanz das Standarddienstkonto zugewiesen.
Bevor Sie dem Standarddienstkonto IAM-Rollen zuweisen, beachten Sie Folgendes:
Wenn Sie dem Standarddienstkonto eine IAM-Rolle zuweisen, dann betrifft dies alle Instanzen, die als Standarddienstkonto ausgeführt werden. Wenn Sie dem Standarddienstkonto zum Beispiel die Rolle
roles/storage.objectAdmin
zuweisen, erhalten alle Instanzen mit den erforderlichen Zugriffsbereichen, die als Standarddienstkonto ausgeführt werden, die durch die Rolleroles/storage.objectAdmin
gewährten Berechtigungen. Auch wenn Sie den Zugriff durch das Weglassen von bestimmten Rollen einschränken, wirkt sich das auf alle Instanzen aus, die als Standarddienstkonto ausgeführt werden.Sie müssen die Berechtigung „Projektbearbeiter“ für das Dienstkonto widerrufen. Das Standarddienstkonto wird den Projekten standardmäßig als Projektbearbeiter hinzugefügt. Zum Verwenden von IAM-Rollen müssen Sie die Berechtigung „Projektbearbeiter“ widerrufen.
Wenn Sie sich nicht sicher sind, ob Sie dem Standarddienstkonto IAM-Rollen zuweisen können, erstellen Sie stattdessen ein neues Dienstkonto.
Befolgen Sie diese Anleitungen, um dem Standarddienstkonto eine IAM-Rolle zuzuweisen:
Öffnen Sie in der Google Cloud Console die Seite IAM.
Wenn Sie dazu aufgefordert werden, wählen Sie ein Projekt.
Suchen Sie nach dem Dienstkonto mit dem Namen Compute Engine-Standarddienstkonto.
Maximieren Sie in der Spalte Rolle(n) das Drop-down-Menü für das Compute Engine-Standarddienstkonto.
Entfernen Sie die Zugriffsrechte des Bearbeiters und speichern Sie Ihre Änderungen.
Alle VM-Instanzen, die derzeit als Standarddienstkonto ausgeführt werden, haben nun entsprechend den IAM-Rollen, die Sie dem Konto zugewiesen haben, Zugriff auf andere Google Cloud APIs.
Wenn Sie eine neue Instanz einrichten möchten, die als Standarddienstkonto ausgeführt werden soll, gehen Sie so vor:
Console
Gehen Sie zur Seite Instanz erstellen.
Geben Sie die VM-Details an
Wählen Sie im Abschnitt Identität und API-Zugriff die Option Compute Engine-Standarddienstkonto aus der Drop-down-Liste Dienstkonto.
Fahren Sie mit dem VM-Erstellungsprozess fort.
gcloud
So erstellen Sie eine neue Instanz und autorisieren sie, sodass sie unter Verwendung des Standarddienstkontos vollen Zugriff auf alle Google Cloud-Dienste hat:
gcloud compute instances create [INSTANCE_NAME] \
--scopes cloud-platform
API
Erstellen Sie in der API eine Standardanfrage, um eine Instanz zu erstellen, und geben Sie dabei das Attribut serviceAccounts
an.
Rufen Sie Ihre Standarddienstkonto-ID ab und fügen Sie sie als email
des Dienstkontos ein. Danach legen Sie einen oder mehrere Bereiche im Attribut scopes
fest.
POST https://compute.googleapis.com/compute/v1/projects/zones/[ZONE]/instances { "machineType": "https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/machineTypes/[MACHINE_TYPE]", "name": "[INSTANCE_NAME]", "serviceAccounts": [ { "email": "[DEFAULT_SERVICE_ACCOUNT_EMAIL]", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], ... }
Best Practices
- Google empfiehlt, dass jede VM-Instanz, die Google-APIs aufrufen muss, als ein Dienstkonto ausgeführt werden sollte, und zwar mit den Mindestberechtigungen zur Ausführung des Jobs dieser VM.
Folgen Sie dieser Anleitung, um Dienstkonten für Ihre VMs zu konfigurieren:
- Erstellen Sie ein neues Dienstkonto, anstatt das Compute Engine-Standarddienstkonto zu verwenden.
- Weisen Sie diesem Dienstkonto nur die IAM-Rollen für die Ressourcen zu, die es benötigt.
- Konfigurieren Sie die VM so, dass sie als das neue Dienstkonto ausgeführt wird, das Sie erstellt haben.
- Weisen Sie Ihrer VM den
https://www.googleapis.com/auth/cloud-platform
-Bereich zu, um den Zugriff auf die meisten Google Cloud APIs zu ermöglichen, sodass die IAM-Berechtigungen der VM vollständig durch die IAM-Rollen bestimmt werden, die Sie dem Dienstkonto der VM gewährt haben. Das Dienstkonto kann nur API-Methoden ausführen, die sowohl vom Zugriffsbereich als auch von den spezifischen IAM-Rollen des Dienstkontos zugelassen werden.
Beschränken Sie die Berechtigungen von Dienstkonten und prüfen Sie regelmäßig Ihre Dienstkontoberechtigungen, um sie aktuell zu halten.
Beim Löschen von Dienstkonten ist Vorsicht geboten. Achten Sie darauf, dass das Dienstkonto, das Sie löschen möchten, von Ihren kritischen Anwendungen nicht mehr verwendet wird. Wenn Sie unsicher sind, ob ein Dienstkonto verwendet wird, empfehlen wir Ihnen, das Dienstkonto zu deaktivieren, anstatt es zu löschen. Deaktivierte Dienstkonten lassen sich wieder aktivieren, wenn sie noch benötigt werden.
Reduzieren Sie die Sicherheitsrisiken für Ihr Dienstkonto. Weitere Informationen finden Sie unter Best Practices für die Arbeit mit Dienstkonten.
Nächste Schritte
Überzeugen Sie sich selbst
Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit von Compute Engine in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
Compute Engine kostenlos testen