Bei einigen Google Cloud-Ressourcen können Sie ein nutzerverwaltetes Dienstkonto angeben, das von der Ressource als Standardidentität verwendet wird. Dieser Vorgang wird als Anhängen des Dienstkontos an die Ressource oder Verknüpfen des Dienstkontos mit der Ressource bezeichnet. Wenn Code, der auf der Ressource ausgeführt wird, auf Google Cloud-Dienste und -Ressourcen zugreift, verwendet er das an die Ressource angehängte Dienstkonto als Identität. Beispiel: Sie hängen ein Dienstkonto an eine Compute Engine-Instanz an und die Anwendungen auf der Instanz verwenden eine Clientbibliothek, um Google Cloud APIs aufzurufen. Diese Anwendungen verwenden automatisch das angehängte Dienstkonto für die Authentifizierung und Autorisierung.
Auf dieser Seite wird beschrieben, wie Sie Dienstkonten so konfigurieren, dass Sie sie an Ressourcen anhängen können.
Hinweis
Enable the IAM and Resource Manager APIs.
Informieren Sie sich darüber, wie Dienstkonten funktionieren.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle Dienstkontonutzer (roles/iam.serviceAccountUser
) für das Dienstkonto zuzuweisen, um die Berechtigung zu erhalten, ein Dienstkonto an eine Ressource anzuhängen.
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierte Rolle enthält die Berechtigung iam.serviceAccounts.actAs
, die zum Anhängen eines Dienstkontos an eine Ressource erforderlich ist.
Sie können diese Berechtigung auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Dienstkonto an eine Ressource anhängen
In den meisten Fällen müssen Sie beim Erstellen einer Ressource ein Dienstkonto an eine Ressource anhängen. Nachdem die Ressource erstellt wurde, können Sie nicht mehr ändern, welches Dienstkonto an der Ressource angehängt ist. Compute Engine-Instanzen sind eine Ausnahme von dieser Regel. Sie können je nach Bedarf ändern, welches Dienstkonto an eine Instanz angehängt ist.
Bevor Sie ein Dienstkonto an eine Ressource anhängen, müssen Sie das Dienstkonto konfigurieren. Dieser Vorgang unterscheidet sich je nachdem, ob sich das Dienstkonto und die Ressource im selben Projekt oder in verschiedenen Projekten befinden. Nachdem Sie das Dienstkonto konfiguriert haben, können Sie die Ressource erstellen und das Dienstkonto an diese Ressource anhängen.
Für eine Ressource im selben Projekt konfigurieren
Bevor Sie ein Dienstkonto an eine andere Ressource im selben Projekt anhängen, weisen Sie dem Dienstkonto Rollen zu, damit es auf die entsprechenden Ressourcen zugreifen kann, genauso wie Sie anderen Hauptkonten Rollen zuweisen würden.
Für eine Ressource in einem anderen Projekt konfigurieren
In manchen Fällen müssen Sie ein Dienstkonto an eine Ressource anhängen, die sich in einem anderen Projekt befindet. Wenn Sie beispielsweise alle Dienstkonten in einem einzelnen Projekt erstellen, müssen Sie sie möglicherweise mit einer neuen Ressource in einem anderen Projekt verknüpfen.
Führen Sie die folgenden Schritte aus, bevor Sie ein Dienstkonto an eine Ressource in einem anderen Projekt anhängen:
- Führen Sie im Projekt, in dem sich das Dienstkonto befindet, die Schritte auf dieser Seite aus, um zu ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können.
- Identifizieren Sie das Projekt, in dem Sie die Ressource erstellen möchten.
Ermitteln Sie den Art der Ressource, an die Sie das Dienstkonto anhängen möchten, sowie den Dienst, der diese Art von Ressource besitzt.
Wenn Sie beispielsweise ein Pub/Sub-Abo erstellen, ist Pub/Sub der Dienst, der die Ressource besitzt.
Suchen Sie die E-Mail-Adresse des Dienst-Agents für den Dienst.
Unterschiedliche Dienste verwenden unterschiedliche Dienst-Agents. Weitere Informationen finden Sie unter Dienst-Agents.
Gewähren Sie den Dienst-Agents die Rolle "Ersteller von Dienstkonto-Tokens" (
roles/iam.serviceAccountTokenCreator
):Console
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf:
Wählen Sie das Projekt aus, dem das Dienstkonto gehört, das Sie an eine Ressource anhängen möchten.
Klicken Sie auf die E-Mail-Adresse des Dienstkontos, das Sie an eine Ressource anhängen möchten.
Wechseln Sie zum Tab Berechtigungen und suchen Sie den Abschnitt Hauptkonten mit Zugriff auf dieses Dienstkonto.
Klicken Sie auf
Zugriff gewähren und geben Sie dann die E-Mail-Adresse des Dienst-Agent ein.Klicken Sie auf Rolle auswählen, geben Sie
Service Account Token Creator
ein und klicken Sie dann auf die Rolle.Klicken Sie auf Speichern, um die Änderungen zu speichern.
Optional: Wenn Sie die Rolle einem anderen Dienst-Agent zuweisen möchten, wiederholen Sie die vorherigen Schritte.
gcloud
Führen Sie den Befehl
gcloud iam service-accounts add-iam-policy-binding
aus:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:SERVICE_AGENT_EMAIL \ --role=roles/iam.serviceAccountTokenCreator
Ersetzen Sie die folgenden Werte:
SERVICE_ACCOUNT_NAME
: Der Name des nutzerverwalteten Dienstkontos, das Sie an eine Ressource anhängen.PROJECT_ID
: Die Projekt-ID, in der sich das vom Nutzer verwaltete Dienstkonto befindet.SERVICE_AGENT_EMAIL
: Die E-Mail-Adresse des Dienstkontos.
Der Befehl gibt die aktualisierte „allow”-Richtlinie für das vom Nutzer verwaltete Dienstkonto aus.
Optional: Wenn Sie die Rolle einem anderen Dienst-Agent zuweisen möchten, führen Sie den Befehl noch einmal aus.
REST
Verwenden Sie zum Zuweisen dieser Rolle das Read-Modify-Write-Muster, um die „allow”-Richtlinie für Ihr vom Nutzer verwaltetes Dienstkonto zu aktualisieren.
Lesen Sie als Erstes die „allow”-Richtlinie für das vom Nutzer verwaltete Dienstkonto:
Die Methode
projects.serviceAccounts.getIamPolicy
gibt die „allow”-Richtlinie für das Dienstkonto zurück.Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_ID
: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wiemy-project
.-
USER_SA_NAME
: Der Name des nutzerverwalteten Dienstkontos, das Sie an eine Ressource binden.
HTTP-Methode und URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy
JSON-Text anfordern:
{ "requestedPolicyVersion": 3 }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] } ] }
Ändern Sie als Nächstes die „allow”-Richtlinie, um dem Dienst-Agent die Rolle „Ersteller von Dienstkonto-Tokens” zuzuweisen.
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" ] } ] }
Ersetzen Sie Folgendes:
SERVICE_AGENT_EMAIL
: Die E-Mail-Adresse des Dienst-Agents.SERVICE_ACCOUNT_NAME
: der Name des nutzerverwalteten Dienstkontos.PROJECT_ID
: Die Projekt-ID, in der sich das vom Nutzer verwaltete Dienstkonto befindet.
Schreiben Sie anschließend die aktualisierte Zulassungsrichtlinie:
Die Methode
projects.serviceAccounts.setIamPolicy
aktualisiert die „allow”-Richtlinie für Ihr Dienstkonto.Ersetzen Sie diese Werte in den folgenden Anfragedaten:
PROJECT_ID
: Ihre Google Cloud-Projekt-ID. Projekt-IDs sind alphanumerische Strings, wiemy-project
.-
USER_SERVICE_ACCOUNT_NAME
: Der Name des nutzerverwalteten Dienstkontos, das Sie an eine Ressource binden. -
SERVICE_AGENT_EMAIL
: Die E-Mail-Adresse des Dienst-Agents, der die Zugriffstokens für Ihr nutzerverwaltetes Dienstkonto erstellt.
HTTP-Methode und URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy
JSON-Text anfordern:
{ "policy": { "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" ] } ] } }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie sollten eine JSON-Antwort ähnlich wie diese erhalten:
{ "version": 1, "etag": "BwWo331TkHE=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com" ] } ] }
Dienstkonto an die neue Ressource anhängen
Nachdem Sie das nutzerverwaltete Dienstkonto konfiguriert haben, können Sie eine neue Ressource erstellen und das Dienstkonto an diese Ressource anhängen. Achten Sie darauf, dass Sie die neue Ressource im entsprechenden Projekt erstellen.
Weitere Informationen finden Sie in der Anleitung für den Ressourcentyp, den Sie erstellen möchten:
Dienstkonto beim Erstellen einer Ressource anhängen | |
---|---|
AI Platform Prediction | Modellversionen |
AI Platform Training | Jobs |
App Engine-Standardumgebung | App-Versionen |
Flexible App Engine-Umgebung | App-Versionen |
Cloud Composer | Umgebungen |
Cloud Run-Funktionen | Cloud Run-Funktion |
Cloud Life Sciences | Pipelines |
Cloud Run | Services |
Cloud Scheduler | Jobs |
Cloud Quell-Repositories |
|
Compute Engine | |
Dataflow | Jobs |
Datalab | Instanzen |
Dataproc | Cluster |
Eventarc | Trigger |
Google Kubernetes Engine | |
Notebooks | Notebookinstanzen |
Pub/Sub | Abos |
Vertex AI | |
Workflows | Workflows |
Nachdem Sie die Ressource erstellt und das Dienstkonto an diese Ressource angehängt haben, können Sie dem Dienstkonto Rollen zuweisen, damit es auf die entsprechenden Ressourcen zugreifen kann. Dieser Vorgang ist derselbe wie das Zuweisen einer Rolle an andere Hauptkonten.
Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
Dienstkonto an eine Ressource in einem anderen Projekt anhängen
Standardmäßig können Sie ein Dienstkonto nicht in einem Projekt erstellen und es mit einer Ressource in einem anderen Projekt verknüpfen. Wenn Sie alle Dienstkonten in einem Projekt behalten möchten, müssen Sie die Organisationsrichtlinie für dieses Projekt aktualisieren.
Ermöglichen, dass Dienstkonten projektübergreifend angehängt werden können
Damit Nutzer Dienstkonten in einem Projekt an Ressourcen in einem anderen Projekt anhängen können, prüfen Sie die folgenden booleschen Einschränkungen in der Organisationsrichtlinie für das Projekt, in dem sich Ihre Dienstkonten befinden:
Achten Sie darauf, dass die boolesche Einschränkung
iam.disableCrossProjectServiceAccountUsage
für das Projekt nicht erzwungen wird.Diese boolesche Einschränkung steuert, ob Sie ein Dienstkonto an eine Ressource in einem anderen Projekt anhängen können. Die Einschränkung wird standardmäßig erzwungen.
Wenn diese Einschränkung nicht erzwungen wird, fügt IAM eine Projektsperre hinzu, die das Löschen des Projekts verhindert. Diese Sperre hat den Ursprung
iam.googleapis.com/cross-project-service-accounts
. Wir raten Ihnen dringend davon ab, diese Sperre zu löschen.Empfohlen: Achten Sie darauf, dass die boolesche Einschränkung
iam.restrictCrossProjectServiceAccountLienRemoval
für das Projekt erzwungen wird.Diese boolesche Einschränkung sorgt dafür, dass Hauptkonten die Projektsperre nur dann entfernen können, wenn sie auf Organisationsebene die Berechtigung
resourcemanager.projects.updateLiens
haben. Wenn diese Einschränkung nicht erzwungen wird, können Hauptkonten die Projektsperre entfernen, wenn sie die Berechtigung auf Projektebene haben.
Wie Sie eine boolesche Einschränkung in einer Organisationsrichtlinie aufrufen oder ändern, erfahren Sie unter Organisationsrichtlinien erstellen und verwalten.
Deaktivieren, dass Dienstkonten projektübergreifend angehängt werden können
Wenn Sie zuvor das projektübergreifende Anhängen von Dienstkonten aktiviert haben, raten wir Ihnen dringend davon ab, diese Funktion zu deaktivieren, insbesondere in Produktionsumgebungen.
Insbesondere sollten Sie in dem Projekt, in dem sich Ihre Dienstkonten befinden, keine dieser Änderungen vornehmen:
- Aktualisieren Sie nicht die Organisationsrichtlinie des Projekts, um die boolesche Einschränkung
iam.disableCrossProjectServiceAccountUsage
zu erzwingen. - Aktualisieren Sie die Organisationsrichtlinie des Projekts nicht, um die boolesche Einschränkung
iam.restrictCrossProjectServiceAccountLienRemoval
nicht zu erzwingen. - Entfernen Sie die Projektsperre mit dem Ursprung
iam.googleapis.com/cross-project-service-accounts
nicht, welche verhindert, dass das Projekt gelöscht werden kann. - Löschen Sie das Projekt nicht.
Wenn Sie bereit sind, die Risiken dieser Funktion anzunehmen, können Sie die Dienstkonten deaktivieren, die Sie projektübergreifend verwenden. Danach überwachen Sie Ihre Google Cloud-Umgebung für Probleme. Sollten Sie Probleme feststellen, können Sie die Dienstkonten wieder aktivieren. Wenn Sie keine Probleme sehen, haben Sie möglicherweise keine Google Cloud-Ressourcen, die von einem Dienstkonto in einem anderen Projekt abhängen.
Audit-Logs für das Anhängen von Dienstkonten
Wenn ein Hauptkonto die Berechtigung iam.serviceAccounts.actAs
verwendet, um ein Dienstkonto an eine Ressource anzuhängen, generiert IAM ein Audit-Log. Dieses Audit-Log enthält die folgenden Informationen:
- Die E-Mail-Adresse des Hauptkontos, das das Dienstkonto an die Ressource angehängt hat
- Details zum Dienstkonto, das an die Ressource angehängt wurde
Eine Liste der Ressourcen, an die Sie Dienstkonten anhängen können, finden Sie auf dieser Seite unter Dienstkonto an die neue Ressource anhängen.
Ein Beispiel für diese Art von Audit-Log finden Sie unter Logs zur Verwendung der Berechtigung iam.serviceAccounts.actAs
. Weitere Informationen zu Audit-Logs finden Sie unter Cloud-Audit-Logs – Übersicht.
Nächste Schritte
- Dienstkonto an eine Compute Engine-Instanz anhängen
- Best Practices zum Schutz von Dienstkonten prüfen und anwenden.
- Weitere Informationen zum Audit-Logging für IAM.