Wenn Sie IAM-Rollen zuweisen, können die Dienstkonten entweder als Ressource oder als Identität behandelt werden.
Ihre Anwendung nutzt ein Dienstkonto als Identität zur Authentifizierung bei den Google Cloud Platform-Diensten. Wenn bei Ihnen beispielsweise eine virtuelle Maschine (VM) von Compute Engine als Dienstkonto ausgeführt wird, können Sie dem Dienstkonto (der Identität) die Bearbeiterrolle für ein Projekt (die Ressource) zuweisen.
Vielleicht möchten Sie gleichzeitig festlegen, wer die VM starten kann. Weisen Sie dazu einem Nutzer (der Identität) die Rolle serviceAccountUser
für das Dienstkonto (die Ressource) zu.
Informationen zu Dienstkonten und weitere Beispiele zur Nutzung von Dienstkonten als Ressource und Identität finden Sie unter Dienstkonten.
Voraussetzungen für diese Anleitung
Installieren Sie das
gcloud
-Befehlszeilentool, wenn Sie die Befehlszeilenbeispiele in dieser Anleitung verwenden möchten.Unter Informationen zu Rollen finden Sie eine Liste der vordefinierten Rollen, die Sie einem Dienstkonto zuweisen können.
Einem Dienstkonto Rollen für bestimmte Ressourcen zuweisen
Sie weisen einem Dienstkonto Rollen zu, damit das Dienstkonto die Berechtigung zur Durchführung bestimmter Aktionen mit den Ressourcen in Ihrem Cloud Platform-Projekt erhält. Sie können beispielsweise die Rolle storage.admin
einem Dienstkonto zuweisen, damit es die Kontrolle über Objekte und Buckets in Google Cloud Storage hat.
Wenn Sie einem Dienstkonto Rollen zuweisen möchten, verwenden Sie eine der folgenden Methoden:
Console
Sie können Rollen von Dienstkonten ebenso verwalten wie Rollen von Nutzern in einem Projekt.
Öffnen Sie in der Cloud Console die Seite IAM & Verwaltung.
Klicken Sie auf Projekt auswählen, wählen Sie ein Projekt aus und klicken Sie auf Öffnen.
Bestimmen Sie das Dienstkonto, dem Sie eine Rolle hinzufügen möchten.
- Wenn sich das Dienstkonto nicht schon in der Mitgliederliste befindet, sind ihm keine Rollen zugewiesen. Klicken Sie auf Hinzufügen und geben Sie die E-Mail-Adresse des Dienstkontos ein.
- Wenn sich das Dienstkonto bereits in der Mitgliederliste befindet, enthält es Rollen. Klicken Sie auf die Schaltfläche Bearbeiten , um die Rollen des Dienstkontos zu bearbeiten.
Wählen Sie mindestens eine Rolle aus, die dem Dienstkonto zugewiesen werden soll.
Klicken Sie auf Speichern, um die Rollen auf das Dienstkonto anzuwenden.
gcloud
Fügen Sie eine Rolle zu einem einzelnen Dienstkonto hinzu.
gcloud projects add-iam-policy-binding my-project-123 \
--member serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com \
--role roles/editor
Der Befehl gibt die aktualisierte Richtlinie aus:
bindings:
- members:
- user:email1@example.com
role: roles/owner
- members:
- serviceAccount:our-project-123@appspot.gserviceaccount.com
- serviceAccount:123456789012-compute@developer.gserviceaccount.com
- serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com
- user:email3@example.com
role: roles/editor
- members:
- user:email2@example.com
role: roles/viewer
etag: BwUm38GGAQk=
version: 1
Informationen zum Gewähren des Zugriffs auf Dienstkonten als Identitäten für Projekte finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
API
Die folgende POST
-Anfrage verwendet die Methode projects.setIamPolicy()
, um dem Dienstkonto my-sa-123
Bearbeiterzugriff auf das Projekt my-project-123
zu gewähren. Der Anfragetext muss die neue Richtlinie enthalten, durch die dem Dienstkonto Berechtigungen zugewiesen werden. Bei jeder Rolle können mehrere Mitglieder vorhanden sein.
POST https://cloudresourcemanager.googleapis.com/v1/projects/my-project-123:setIamPolicy
{
"policy":
{
"version": 1,
"etag": "BwUqMvZQGfo=",
"bindings": [
{
"role": "roles/editor",
"members": [
"serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
"user:robin@example.com"
]
},
{
"role":"roles/owner",
"members":
[
"user:hollis@example.com",
]
},
{
"role":"roles/viewer",
"members":
[
"user:john@example.com",
]
},
{
"role":"roles/iam.serviceAccountUser",
"members":
[
"user:robin@example.com"
]
},
]
},
}
Die Antwort enthält die neuen Richtlinien:
{
"version": 1,
"etag": "BwUqMvZQGfo=",
"bindings": [
{
"role": "roles/editor",
"members": [
"serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
"user:robin@example.com"
]
},
{
"role":"roles/owner",
"members":
[
"user:hollis@example.com",
]
},
{
"role":"roles/viewer",
"members":
[
"user:john@example.com",
]
},
{
"role":"roles/iam.serviceAccountUser",
"members":
[
"user:robin@example.com"
]
},
]
}
Rollen aufrufen, die einem Dienstkonto zugewiesen wurden
Sie können Rollen in Dienstkonten genauso wie Rollen für Nutzer in Ihrem Projekt aufrufen:
- Öffnen Sie in der Cloud Console die Seite "IAM".
- Klicken Sie auf Projekt auswählen.
- Wählen Sie Ihr Projekt aus und klicken Sie auf Öffnen.
- Suchen Sie Ihr Dienstkonto in der Liste der Mitglieder, die mit Ihrem Projekt verknüpft sind. Die Rollen der Dienstkonten werden in der Spalte Rolle aufgeführt.
Eigentum und Zugriff auf ein Dienstkonto konfigurieren
Sie können bestimmten Nutzern die Inhaberschaft für und den Zugriff auf Dienstkonten gewähren, indem Sie diese als Ressource statt als Identität behandeln. Bei den Schritten in diesem Abschnitt werden Dienstkonten als Ressource behandelt. Weitere Informationen zu den Unterschieden zwischen den einzelnen Verwendungstypen finden Sie im Thema Dienstkonten.
Nutzer mit einfachen Projektinhaber- und Projektbearbeiterrollen können Dienstkonten bereits ändern. Möglicherweise möchten Sie jedoch einigen Nutzern erlauben, nur bestimmte Aktionen für Dienstkontoressourcen auszuführen.
Weisen Sie mit einer dieser Methoden einem Dienstkonto Nutzerberechtigungen zu:
Console
Öffnen Sie in der Cloud Console die Seite IAM & Verwaltung.
Klicken Sie auf Projekt auswählen, wählen Sie ein Projekt aus und klicken Sie auf Öffnen.
Klicken Sie in der linken Navigationsleiste auf Dienstkonten.
Wählen Sie ein Dienstkonto aus und klicken Sie auf Infofeld anzeigen. Alle Nutzer, die Zugriff auf das Dienstkonto haben, werden angezeigt.
Klicken Sie auf Mitglied hinzufügen.
Fügen Sie die E-Mail-Adresse eines Projektmitglieds hinzu.
Wählen Sie eine Rolle für das Mitglied aus, um festzulegen, zu welchen Aktionen mit dem Dienstkonto dieses Mitglied berechtigt ist.
Klicken Sie auf Hinzufügen, um dem Projektmitglied die Rolle zuzuweisen.
gcloud
Gesamte Richtlinie aktualisieren:
Rufen Sie zuerst die Richtlinie ab, die Sie ändern möchten, und schreiben Sie sie in eine JSON-Datei. Mit dem Flag --format
können Sie die Ausgabeformate auswählen (verfügbar sind JSON, YAML und Text). In den anderen Beispielen auf dieser Seite werden die standardmäßigen Textausgabeformate verwendet, aber in diesem Beispiel wird die Ausgabe in die JSON-Datei policy.json geschrieben, um die vorhandenen Richtlinie zu ändern, bevor sie festgelegt wird.
gcloud iam service-accounts get-iam-policy \
my-sa-123@my-project-123.iam.gserviceaccount.com \
--format json > policy.json
Beachten Sie, dass durch diesen Befehl nur eine Richtlinie zurückgegeben wird, die für das Dienstkonto selbst festgelegt wurde. Wenn für das Dienstkonto keine Richtlinie festgelegt ist, enthält die JSON-Datei einen standardmäßigen etag-Wert und nichts anderes.
Wenn keine Richtlinie vorhanden ist, können Sie entweder anhand der unten beschriebenen Schritte eine neue Richtlinie mit einer einzelnen Bindung festlegen oder die Richtlinie manuell erstellen, indem Sie die JSON-Datei in den folgenden Schritten als Vorlage verwenden.
Ist hingegen bereits eine Richtlinie in Kraft, sieht der Inhalt der ausgegebenen Datei policy.json etwa so aus:
{
"bindings": [
{
"members": [
"user:hollis@example.com"
],
"role": "roles/owner"
}
],
"etag": "BwUqLaVeua8="
}
Ändern Sie die Datei policy.json in einem Texteditor. Fügen Sie dafür ein neues Objekt in das Array bindings
ein, das die Gruppenmitglieder und ihre Rollen definiert. Erstellen Sie das Array bindings
, falls es nicht bereits vorhanden ist. Um robin@example.com
die Rolle serviceAccountUser
zuzuweisen, müssen Sie das obige Beispiel so ändern:
{
"bindings": [
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:robin@example.com"
]
},
{
"role": "roles/owner",
"members": [
"user:hollis@example.com"
]
}
],
"etag": "BwUqLaVeua8="
}
Aktualisieren Sie die Richtlinie, indem Sie den folgenden Befehl ausführen:
gcloud iam service-accounts set-iam-policy \
my-sa-123@my-project-123.iam.gserviceaccount.com policy.json
Der Befehl gibt die aktualisierte Richtlinie aus:
bindings:
- members:
- user:robin@example.com
role: roles/iam.serviceAccountUser
- members:
- hollis@example.com
role: roles/owner
etag: BwUjMhXbSPU=
version: 1
Sie können einer neuen oder vorhandenen Richtlinie eine einzelne Bindung hinzufügen, indem Sie den folgenden Befehl ausführen:
gcloud iam service-accounts add-iam-policy-binding \
my-sa-123@my-project-123.iam.gserviceaccount.com \
--member='user:jane@example.com' --role='roles/editor'
Durch den Befehl wird die aktualisierte Richtlinie ausgegeben:
bindings:
- members:
- user:robin@example.com
role: roles/iam.serviceAccountUser
- members:
- user:hollis@example.com
role: roles/owner
- members:
- user:jane@example.com
role: roles/editor
etag: BwUqKjVeua8=
version: 1
Einzelne Bindung entfernen:
Sie können eine einfache Verknüpfung aus vorhandenen Richtlinien entfernen, indem Sie den folgenden Befehl ausführen:
gcloud iam service-accounts remove-iam-policy-binding \
my-sa-123@my-project-123.iam.gserviceaccount.com \
--member='user:jane@example.com' --role='roles/editor'
Durch den Befehl wird die aktualisierte Richtlinie ausgegeben:
bindings:
- members:
- user:robin@example.com
role: roles/iam.serviceAccountUser
- members:
- user:hollis@example.com
role: roles/owner
etag: BwUqNkVeua8=
version: 1
API
Anfrage
POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:setIamPolicy
Der Anfragetext muss die zuzuweisenden Richtlinien enthalten:
{
"policy":
{
"etag": "BwUqLaVeua8=",
"bindings": [
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:robin@example.com"
]
},
{
"role": "roles/owner",
"members": [
"user:hollis@example.com"
]
}
]
},
}
Die Antwort enthält die aktualisierte Richtlinie:
{
"etag": "BwUqMqbViM8=",
"bindings": [
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:robin@example.com"
]
},
{
"role": "roles/owner",
"members": [
"user:hollis@example.com"
]
}
]
}
Vorhandene Rollen für ein Dienstkonto aufrufen
Da Dienstkonten wie Ressourcen behandelt werden können, haben sie wie andere Google Cloud-Ressourcen auch Cloud IAM-Richtlinien. Wenn Sie sich also die Mitglieder ansehen möchten, denen Rollen hinsichtlich eines bestimmten Dienstkontos zugewiesen wurden, rufen Sie mithilfe der Methode serviceAccounts.getIamPolicy()
, der GCP Console oder dem gcloud
-Tool die Cloud IAM-Richtlinie für dieses Dienstkonto auf.
Console
Öffnen Sie in der Cloud Console die Seite IAM & Verwaltung.
Klicken Sie auf Projekt auswählen, wählen Sie ein Projekt aus und klicken Sie auf Öffnen. Auf dieser Seite werden alle Nutzer und ihre jeweiligen Rollen für dieses Projekt aufgelistet.
Klicken Sie in der linken Navigationsleiste auf Dienstkonten.
Klicken Sie das Kästchen neben dem gewünschten Dienstkonto an und dann auf Infofeld anzeigen. Eine Liste der Rollen, die für das Dienstkonto zugewiesen wurden, wird angezeigt. Wenn Sie eine Rolle maximieren, können Sie die Mitglieder sehen, denen diese Rolle für das Dienstkonto zugewiesen wurde.
gcloud
Führen Sie den folgenden Befehl aus, um eine Richtlinie für ein Dienstkonto zu erhalten:
gcloud iam service-accounts get-iam-policy \
my-sa-123@my-project-123.iam.gserviceaccount.com
Daraufhin wird die Richtlinie etwa so ausgegeben:
bindings:
- members:
- user:hollis@example.com
role: roles/owner
- members:
- user:robin@example.com
role: roles/iam.serviceAccountUser
etag: BwUqLaVeua8=
version: 1
Wenn Sie dem Dienstkonto keine Rolle zugewiesen haben, wird in der Ausgabe lediglich ein etag-Wert angezeigt:
API
Die folgenden Code-Snippets rufen die IAM-Richtlinie für das Dienstkonto my-sa-123@my-project-123.iam.gserviceaccount.com
ab.
Anfrage
POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:getIamPolicy
Response:
{
"etag": "BwUqLaVeua8=",
"bindings": [
{
"role": "roles/iam.serviceAccountUser",
"members": [
"user:robin@example.com"
]
}
]
}
Wenn Sie dem Dienstkonto keine Rolle zugewiesen haben, enthält die Antwort lediglich einen etag-Wert:
Weitere Informationen zu IAM-Richtlinien finden Sie unter Richtlinie.