Dienstkonten Rollen zuweisen

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.

  1. Öffnen Sie in der Cloud Console die Seite IAM & Verwaltung.

    Zur Seite "IAM & Verwaltung"

  2. Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.

  3. 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 Drop-down-Liste unter Rolle(n) für das Dienstkonto, das Sie bearbeiten möchten.
  4. Wählen Sie mindestens eine Rolle aus, die dem Dienstkonto zugewiesen werden soll.

  5. Klicken Sie auf Hinzufügen oder Speichern, um dem Dienstkonto die Rollen zuzuweisen.

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:alice@example.com"
            ]
        },
        {
            "role":"roles/owner",
            "members":
            [
                "user:bob@example.com",
            ]
        },
        {
            "role":"roles/viewer",
            "members":
            [
                "user:john@example.com",
            ]
        },
        {
            "role":"roles/iam.serviceAccountUser",
            "members":
            [
                "user:alice@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:alice@example.com"
        ]
    },
    {
        "role":"roles/owner",
        "members":
        [
            "user:bob@example.com",
        ]
    },
    {
        "role":"roles/viewer",
        "members":
        [
            "user:john@example.com",
        ]
    },
    {
        "role":"roles/iam.serviceAccountUser",
        "members":
        [
            "user:alice@example.com"
        ]
    },
    ]
}

Inhaberschaft für 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 Projekteigentümer- und Projektbearbeiterrollen können bereits Dienstkonten ändern, aber Sie können den Zugriff für Nutzer so einschränken, dass sie nur zu bestimmten Aktionen bei Dienstkontoressourcen berechtigt sind.

Verwenden Sie eine der folgenden Methoden, um einem Dienstkonto Nutzerberechtigungen zu gewähren:

Console

  1. Öffnen Sie in der Cloud Console die Seite IAM & Verwaltung.

    Seite "IAM & Verwaltung" öffnen

  2. Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter.

  3. Klicken Sie in der linken Navigationsleiste auf Dienstkonten.

  4. Wählen Sie ein Dienstkonto aus und öffnen Sie das Infofeld. Alle Nutzer, die Zugriff auf das Dienstkonto haben, werden angezeigt.

  5. Fügen Sie die E-Mail-Adresse eines Projektmitglieds hinzu.

  6. Wählen Sie eine Rolle für das Mitglied aus, um festzulegen, zu welchen Aktionen mit dem Dienstkonto dieses Mitglied berechtigt ist.

  7. 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, sieht der Inhalt der JSON-Datei etwa so aus:

{
  "etag": "ACAB"
}

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:bob@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 alice@example.com die Rolle serviceAccountUser zuzuweisen, müssen Sie das obige Beispiel so ändern:

{
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@example.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
            "user:bob@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:alice@example.com
  role: roles/iam.serviceAccountUser
- members:
  - bob@example.com
  role: roles/owner
etag: BwUjMhXbSPU=
version: 1

Einzelne Bindung hinzufügen:

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:alice@example.com
  role: roles/iam.serviceAccountUser
- members:
  - user:bob@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:alice@example.com
  role: roles/iam.serviceAccountUser
- members:
  - user:bob@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:alice@example.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@example.com"
            ]
        }
        ]
    },
}

Die Antwort enthält die aktualisierte Richtlinie:

{
    "etag": "BwUqMqbViM8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@example.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
        "user:bob@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

  1. Öffnen Sie in der Cloud Console die Seite IAM & Verwaltung.

    Zur Seite "IAM & Verwaltung"

  2. Wählen Sie Ihr Projekt aus und klicken Sie auf Weiter. Auf dieser Seite werden alle Nutzer und ihre jeweiligen Rollen für dieses Projekt aufgelistet.

  3. Klicken Sie in der linken Navigationsleiste auf Dienstkonten.

  4. Klicken Sie das Kästchen neben dem gewünschten Dienstkonto an und klicken Sie dann oben rechts auf der Seite 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 so ausgegeben:

bindings:
- members:
  - user:bob@example.com
  role: roles/owner
- members:
  - user:alice@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:

etag: ACAB

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:alice@example.com"
        ]
    }
    ]
}

Wenn Sie dem Dienstkonto keine Rolle zugewiesen haben, enthält die Antwort lediglich einen etag-Wert:

{
  "etag": "ACAB"
}

Weitere Informationen zu IAM-Richtlinien finden Sie unter Richtlinie.