Zugriff auf Ressourcen erteilen, ändern und entziehen

Auf dieser Seite wird beschrieben, wie Sie Berechtigungen zum Zugriff auf Ressourcen erteilen, ändern und entziehen. Mithilfe detaillierter Cloud IAM-Rollen können Sie Nutzern unterschiedliche Zugriffsebenen zuweisen und so den Zugriff auf Ihre Ressourcen fein abgestuft steuern.

Nutzerrollen können mit der Cloud Console, dem gcloud-Befehlszeilentool, der REST API, oder den Clientbibliotheken verwaltet werden. Die Verwendung der Cloud Console ist die einfachste Methode und wird in der ersten Hälfte dieses Artikels beschrieben, ebenso wie die schnelle Aktualisierung mithilfe des gcloud-Befehlszeilentools. Die programmgesteuerten Methoden für komplexere Szenarien werden in der zweiten Hälfte behandelt.

Informationen zum Schutz des Zugriffs auf Ihre Anwendungen mit Cloud IAM und dem Cloud Identity-Aware Proxy (IAP) finden Sie in der Dokumentation zu IAP.

Vorbereitung

Mit der Cloud Console

Mit der Cloud Console können Sie schnell und einfach Nutzerrollen verwalten. Nutzer, denen Sie eine Rolle zuweisen, erhalten keine Einladungs-E-Mail. Ihre Zugriffsrechte werden direkt aktualisiert.

Zugriff gewähren

So fügen Sie ein Teammitglied in Ihr Projekt ein und weisen ihm eine Cloud IAM-Rolle zu:

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

    Zur Seite "IAM"

  2. Klicken Sie auf Projekt auswählen, wählen Sie ein Projekt aus und klicken Sie auf Öffnen.

  3. Klicken Sie auf Hinzufügen.

  4. Geben Sie eine E-Mail-Adresse ein. Sie können Einzelpersonen, Dienstkonten oder Google Groups als Mitglieder hinzufügen. Jedes Projekt muss jedoch mindestens eine Einzelperson als Mitglied enthalten.

  5. Wählen Sie eine Rolle aus. Über die Rolle erhalten Mitglieder die geeignete Berechtigungsebene. Als wichtige Sicherheitsmaßnahme empfehlen wir dringend, einem Mitglied nur die geringstmögliche Anzahl an notwendigen Berechtigungen zu gewähren. Mitglieder mit Berechtigungen auf Inhaberebene sind auch Projektinhaber und können alle Aspekte des Projekts verwalten. Sie können auch Projekte beenden.

  6. Klicken Sie auf Speichern.

So erteilen Sie einem Mitglied eine Rolle für mehr als ein Projekt:

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

    Seite "IAM & Verwaltung > Projekte" öffnen

  2. Wählen Sie alle Projekte aus, für die Sie Berechtigungen erteilen möchten.

  3. Klicken Sie auf Infofeld ansehen und den Tab Berechtigungen.

  4. Geben Sie eine E-Mail-Adresse in das Feld Mitglieder hinzufügen ein und wählen Sie die gewünschte Rolle aus dem Drop-down-Menü aus.

  5. Klicken Sie auf Hinzufügen. Dem Mitglied wird die ausgewählte Rolle für alle ausgewählten Projekte zugewiesen.

Zugriff widerrufen

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

    IAM-Seite öffnen

  2. Klicken Sie auf Projekt auswählen.

  3. Wählen Sie ein Projekt aus und klicken Sie auf Öffnen.

  4. Suchen Sie das Mitglied, dem Sie die Zugriffsrechte entziehen möchten, und klicken Sie auf der rechten Seite auf Bearbeiten edit.

  5. Klicken Sie für alle Rollen, die entzogen werden sollen, auf Löschen delete und dann auf Speichern.

Zugriff ändern

Es gibt kein spezielles Verfahren zum Ändern von Zugriffsrechten. Folgen Sie einfach den Schritten zum Zuweisen und Entziehen von Zugriffsrechten, bis der Nutzer über die gewünschte Rolle verfügt.

gcloud für schnelle Aktualisierungen verwenden

Sie können den Zugriff auch schnell mit dem gcloud-Befehlszeilentool gewähren oder widerrufen.

Zugriff gewähren

Wenn Sie einem Mitglied schnell eine Rolle zuweisen möchten, führen Sie den gcloud-Befehl add-iam-policy-binding aus:

gcloud [GROUP] add-iam-policy-binding [RESOURCE] \
    --member [MEMBER] --role [ROLE_ID]

Geben Sie folgende Werte an:

  • [GROUP]: Gruppe des gcloud-Tools für die Ressource, die Sie aktualisieren möchten. Sie können z. B. projects oder organizations verwenden.
  • [RESOURCE]: Name der Ressource.
  • [MEMBER]: Kennung für das Mitglied, die normalerweise die folgende Form hat: member_type:id. Beispiel: user:alice@example.com. Sie finden eine vollständige Liste der zulässigen Werte für [MEMBER] in der Referenz zur Richtlinienbindung.
  • [ROLE_ID]: Name der Rolle.

Wenn Sie beispielsweise dem Nutzer alice@example.com die Rolle Betrachter für das Projekt my-project zuweisen möchten:

gcloud projects add-iam-policy-binding my-project \
    --member user:alice@example.com --role roles/viewer

Zugriff widerrufen

Wenn Sie die Rolle eines Nutzers schnell widerrufen möchten, führen Sie den Befehl remove-iam-policy-binding des gcloud-Tools aus:

gcloud [GROUP] remove-iam-policy-binding [RESOURCE] \
    --member [MEMBER] --role [ROLE_ID]

Geben Sie folgende Werte an:

  • [GROUP]: Gruppe des gcloud-Tools für die Ressource, die Sie aktualisieren möchten. Sie können z. B. projects oder organizations verwenden.
  • [RESOURCE]: Name der Ressource.
  • [MEMBER]: Kennung für das Mitglied, die normalerweise die folgende Form hat: member_type:id. Beispiel: user:alice@example.com. Sie finden eine vollständige Liste der für [MEMBER] zulässigen Werte in der Referenz zur Richtlinienbindung.
  • [ROLE_ID]: Name der Rolle.

So widerrufen Sie z. B. die Rolle Betrachter des Nutzers bob@example.com für das Projekt my-project:

gcloud projects remove-iam-policy-binding my-project \
    --member user:bob@example.com --role roles/viewer

Zugriff programmgesteuert kontrollieren

In einigen Anwendungsfällen ist es einfacher, die Zugriffssteuerung programmgesteuert zu verwalten. Sie können das gcloud-Befehlszeilentool, die REST API oder die Clientbibliotheken verwenden, um den Zugriff programmgesteuert zu kontrollieren. Programmgesteuerte Methoden sind besonders für umfangreiche oder automatische Aktualisierungen geeignet, deren Ausführung in der Cloud Console oder durch Starten von gcloud-Befehlen für jedes Mitglied zeitaufwendig sind.

Cloud IAM-Richtlinien im Überblick

Der Zugriff auf Ressourcen wird über eine Cloud IAM-Richtlinie verwaltet. In einer Richtlinie sind alle Bindungen zusammengestellt, die ein Mitglied, z. B. ein Nutzer- oder Dienstkonto, mit einer Rolle verknüpfen. Richtlinien werden im JSON- oder YAML-Format dargestellt.

Das folgende Beispiel zeigt eine Richtlinie, bei der dem Nutzer alice@example.com die Rolle Inhaber und den Nutzern bob@example.com und service-account-13@appspot.gserviceaccount.com die Rolle Bearbeiter zugewiesen wurde:

{
  "bindings":[
    {
      "members":[
        "user:alice@example.com"
      ],
      "role":"roles/owner"
    },
    {
      "members":[
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:bob@example.com"
      ],
      "role":"roles/editor"
    }
  ],
  "etag":"BwUjMhCsNvY=",
  "version":1
}

Sie können die Richtlinie einer Ressource nach dem Muster Read-Modify-Write (Lesen-Ändern-Schreiben) aktualisieren. Das heißt, es gibt keine unterschiedlichen Verfahren zum Erstellen, Ändern oder Entziehen von Zugriffsrechten. Stattdessen werden alle Änderungen so durchgeführt:

  1. Aktuelle Richtlinie durch Aufrufen von getIamPolicy() lesen.
  2. Zurückgegebene Richtlinie entweder mithilfe eines Texteditors oder programmgesteuert bearbeiten. Dabei Mitglieder und ihre Rollenzuteilungen nach Wunsch hinzufügen oder entfernen.
  3. Aktualisierte Richtlinie durch Aufrufen von setIamPolicy() schreiben.

Es ist üblich, Berechtigungen für ein gesamtes Projekt oder eine Organisation zu erteilen. Sie können Richtlinien jedoch auch für eine Vielzahl von Google Cloud-Ressourcen wie Compute Engine-Instanzen oder Cloud Storage-Buckets detaillierter festlegen. Eine vollständige Liste der Rollen und der niedrigsten Ressourcenebene, für die Sie die Rollen vergeben können, finden Sie unter Informationen zu Rollen.

In den folgenden Abschnitten wird gezeigt, wie Sie eine Richtlinie für ein Projekt abrufen, ändern und festlegen.

Aktuelle Richtlinie abrufen

gcloud-Befehl

Führen Sie den Befehl get-iam-policy aus:

gcloud projects get-iam-policy [PROJECT_ID] --format [FORMAT] > [FILE-PATH]

Geben Sie folgende Werte an:

  • [PROJECT_ID]: Projekt, das Sie aktualisieren möchten (z. B. my-project).
  • [FORMAT]: Wert JSON oder YAML.
  • [FILEPATH]: Pfad zu einer neuen Ausgabedatei für die Richtlinie.

Mit dem folgenden Befehl wird beispielsweise die Richtlinie für das Projekt my-project im JSON-Format abgerufen und im Basisverzeichnis des Nutzers gespeichert:

gcloud projects get-iam-policy my-project --format json > ~/policy.json

REST API

getIamPolicy() aufrufen:

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_ID]:getIamPolicy

Ersetzen Sie [PROJECT_ID] durch das Projekt, zu dem Sie Informationen abrufen (z. B. my-project).

Die Antwort enthält die Richtlinie.

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def get_policy(project_id):
    """Gets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])
    service = googleapiclient.discovery.build(
        'cloudresourcemanager', 'v1', credentials=credentials)
    policy = service.projects().getIamPolicy(
        resource=project_id, body={}).execute()
    print(policy)
    return policy

Richtlinie ändern

Passen Sie die lokale Kopie Ihrer Projektrichtlinie programmgesteuert oder mithilfe eines Texteditors so an, dass sie die Rollen widerspiegelt, die Sie bestimmten Nutzern gewähren oder entziehen möchten.

Rolle zuweisen

So weisen Sie eine Rolle zu, die bereits in der Richtlinie enthalten ist:

gcloud-Befehl

Weisen Sie eine Rolle zu, indem Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Im folgenden Beispiel wird eve@example.com die Rolle "Bearbeiter" zugewiesen. Um diese Rolle zuzuweisen, hängen Sie den Nutzer an das Array members für die Bindung an:

{
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:bob@example.com",
    "user:eve@example.com"
  ],
  "role":"roles/editor"
}

REST API

Weisen Sie eine Rolle zu, indem Sie die vom Befehl get-iam-policy zurückgegebene Richtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Im folgenden Beispiel wird eve@example.com die Rolle "Bearbeiter" zugewiesen. Um diese Rolle zuzuweisen, hängen Sie den Nutzer an das Array members für die Bindung an:

{
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:bob@example.com",
    "user:eve@example.com"
  ],
  "role":"roles/editor"
}

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def modify_policy_add_member(policy, role, member):
    """Adds a new member to a role binding."""

    binding = next(b for b in policy['bindings'] if b['role'] == role)
    binding['members'].append(member)
    print(binding)
    return policy

Wenn Sie eine Rolle zuweisen möchten, die in der Richtlinie noch nicht enthalten ist, fügen Sie eine neue binding hinzu.

gcloud-Befehl

Sie können eine neue Bindung hinzufügen, indem Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Im folgenden Beispiel wird eve@example.com die Rolle "Leser" zugewiesen. Fügen Sie zum Zuweisen dieser Rolle eine neue Bindung zum bindings-Array für die Richtlinie hinzu:

{
  "members": [
    "user:eve@example.com"
  ],
  "role":"roles/reader"
}

REST API

Fügen Sie eine neue Bindung hinzu, indem Sie die vom Befehl get-iam-policy zurückgegebene Richtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Im folgenden Beispiel wird eve@example.com die Rolle "Leser" zugewiesen. Fügen Sie zum Zuweisen dieser Rolle eine neue Bindung zum bindings-Array für die Richtlinie hinzu:

{
  "members": [
    "user:eve@example.com"
  ],
  "role":"roles/reader"
}

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def modify_policy_add_role(policy, role, member):
    """Adds a new role binding to a policy."""

    binding = {
        'role': role,
        'members': [member]
    }
    policy['bindings'].append(binding)
    print(policy)
    return policy

Sie können nur Rollen zuweisen, die sich auf aktivierte API-Dienste beziehen. Wenn zum Beispiel Compute Engine nicht aktiv ist, können Sie keine Rollen zuweisen, die sich ausschließlich auf Compute Engine beziehen. Weitere Informationen finden Sie unter APIs aktivieren und deaktivieren.

Für die Gewährung von Berechtigungen für Projekte gelten einige spezielle Beschränkungen, insbesondere, wenn es um die Rolle Inhaber geht. Weitere Informationen finden Sie in der Referenzdokumentation zu projects.setIamPolicy().

Rolle widerrufen

So entziehen Sie eine Rolle:

gcloud-Befehl

Sie können eine Rolle widerrufen, indem Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie bearbeiten. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Um eine Rolle von einem Mitglied zu widerrufen, löschen Sie die gewünschten Mitglieder oder Bindungen aus dem bindings-Array für die Richtlinie.

REST API

Bearbeiten Sie zum Widerrufen einer Rolle die vom Befehl get-iam-policy zurückgegebene Richtlinie. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Löschen Sie die gewünschten Mitglieder oder Bindungen aus dem bindings-Array für die Richtlinie.

C#

Für dieses Beispiel müssen Sie C# wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM C# API.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def modify_policy_remove_member(policy, role, member):
    """Removes a  member from a role binding."""
    binding = next(b for b in policy['bindings'] if b['role'] == role)
    if 'members' in binding and member in binding['members']:
        binding['members'].remove(member)
    print(binding)
    return policy

Richtlinie festlegen

Nachdem Sie die Richtlinie geändert haben, um die gewünschten Rollen zuzuweisen, rufen Sie setIamPolicy() auf, um Aktualisierungen vorzunehmen.

gcloud-Befehl

Verwenden Sie den Befehl set-iam-policy und geben Sie den Pfad zur JSON-Datei an, die die aktualisierte Richtlinie enthält:

gcloud projects set-iam-policy [PROJECT_ID] [FILEPATH]

Geben Sie folgende Werte an:

  • [PROJECT_ID]: Projekt, das Sie aktualisieren möchten (z. B. my-project).
  • [FILEPATH]: Pfad zu einer Datei, die die neue Richtlinie enthält.

Die Antwort enthält die aktualisierte Richtlinie.

REST API

Rufen Sie setIamPolicy() auf:

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_ID]:setIamPolicy

Ersetzen Sie [PROJECT_ID] durch das Projekt, das Sie gerade aktualisieren (z. B. my-project).

Der Anfragetext muss die aktualisierte IAM-Richtlinie enthalten.

Die Antwort enthält die aktualisierte Richtlinie.

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Python

Für dieses Beispiel müssen Sie Python wie in der Cloud IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben einrichten. Weitere Informationen finden Sie in der Referenzdokumentation zur Cloud IAM Python API.

def set_policy(project_id, policy):
    """Sets IAM policy for a project."""

    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])
    service = googleapiclient.discovery.build(
        'cloudresourcemanager', 'v1', credentials=credentials)

    policy = service.projects().setIamPolicy(
        resource=project_id, body={
            'policy': policy
        }).execute()
    print(policy)
    return policy

Die Richtlinie enthält einen etag-Wert, um Konflikte zu vermeiden, wenn mehrere Quellen gleichzeitig versuchen, die Richtlinie zu aktualisieren. Wenn Sie setIamPolicy() aufrufen, vergleicht Cloud IAM den etag-Wert in der Anfrage mit dem vorhandenen etag und schreibt die Richtlinie nur, wenn die Werte übereinstimmen.

Weitere Informationen