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 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, mit 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 programmatischen Methoden für komplexere Szenarien werden in der zweiten Hälfte dieses Artikels behandelt.

Wenn Sie IAM mit Identity-Aware Proxy (IAP) verwenden möchten, um den Zugriff auf Ihre Anwendungen zu schützen, finden Sie Informationen dazu in der Dokumentation zu IAP.

Hinweis

Erforderliche Berechtigungen

Sie benötigen eine Rolle mit den folgenden Berechtigungen, um den Zugriff auf ein Projekt zu verwalten:

  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.setIamPolicy

Damit Sie diese Berechtigungen erhalten und gleichzeitig das Prinzip der geringsten Berechtigung anwenden, bitten Sie Ihren Administrator, Ihnen eine der folgenden Rollen zu gewähren:

  • Projekt-IAM-Administrator (roles/resourcemanager.projectIamAdmin)
  • Sicherheitsadministrator (roles/iam.securityAdmin)

Alternativ kann Ihr Administrator Ihnen eine andere Rolle mit den erforderlichen Berechtigungen zuweisen, z. B. eine benutzerdefinierte Rolle oder eine vordefinierte Rolle mit mehr Berechtigungen.

Mit der Cloud Console

Mit der Cloud Console können Sie die Rollen Ihrer Mitglieder schnell und einfach verwalten. IAM-Mitglieder können Nutzer, Dienstkonten, Google-Gruppen und Domains sein.

Aktuelle Zugriffsrechte ansehen

So sehen Sie sich die IAM-Rollen an, die Ihre Mitglieder für ein Projekt und dessen Ressourcen haben:

  1. Rufen Sie in der Cloud Console die Seite IAM auf.

    Zur Seite „IAM“

  2. Auf dieser Seite werden alle Mitglieder Ihres Projekts angezeigt, die IAM-Rollen für Ihr Projekt haben.

Zugriff gewähren

So weisen Sie einem Mitglied eine IAM-Rolle für ein Projekt zu:

  1. Rufen Sie in der Cloud Console die Seite IAM auf.

    Zur Seite "IAM"

  2. Klicken Sie auf Hinzufügen.

  3. 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.

  4. 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.

  5. Klicken Sie auf Speichern.

So weisen Sie einem Mitglied eine Rolle für mehrere Projekte zu:

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Seite "Ressourcen verwalten" ö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 Neue Mitglieder ein und wählen Sie die gewünschte Rolle aus dem Drop-down-Menü aus.

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

Zugriff widerrufen

  1. Rufen Sie in der Cloud Console die Seite IAM auf.

    Zur Seite "IAM"

  2. Suchen Sie das Mitglied, dem Sie die Zugriffsrechte entziehen möchten, und klicken Sie auf der rechten Seite auf die Schaltfläche Bearbeiten .

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

Zugriff ändern

Es gibt kein spezielles Verfahren zum Ändern von Zugriffsrechten. Folgen Sie den Schritten zum Zuweisen und Entziehen von Zugriffsrechten, bis das Mitglied die gewünschten Rollen hat.

gcloud für schnelle Aktualisierungen verwenden

Mit den Befehlen add-iam-policy-binding und remove-iam-policy-binding des gcloud-Befehlszeilentools können Sie eine einzelne Rolle hinzufügen oder widerrufen.

Zugriff gewähren

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

gcloud group add-iam-policy-binding resource \
    --member=member --role=role-id

Geben Sie folgende Werte an:

  • group: Die Gruppe des gcloud-Tools für die Ressource, die Sie aktualisieren möchten. Sie können z. B. projects oder organizations verwenden.
  • resource: Der Name der Ressource.
  • member: Die Kennung für das Mitglied, in der Regel im Format member-type:id. Beispiel: user:my-user@example.com. Eine vollständige Liste der für member zulässigen Werte finden Sie in der Referenz zur Richtlinienbindung.

  • role-id: Name der Rolle.

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

gcloud projects add-iam-policy-binding my-project \
    --member=user:my-user@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: Die Gruppe des gcloud-Tools für die Ressource, die Sie aktualisieren möchten. Sie können z. B. projects oder organizations verwenden.
  • resource: Der Name der Ressource.
  • member: Die Kennung für das Mitglied, in der Regel im Format member-type:id. Beispiel: user:my-user@example.com. Eine vollständige Liste der für member zulässigen Werte finden Sie in der Referenz zur Richtlinienbindung.

  • role-id: Name der Rolle.

Für das Widerrufen der Rolle Betrachter des Nutzers my-user@example.com für das Projekt my-project geben Sie beispielsweise Folgendes ein:

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

Zugriff programmatisch steuern

In einigen Anwendungsfällen ist es einfacher, die Zugriffssteuerung programmatisch zu verwalten. Sie können das gcloud-Befehlszeilentool, die REST API oder die Clientbibliotheken verwenden, um den Zugriff programmatisch zu steuern. Programmatische 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.

IAM-Richtlinien im Überblick

Der Zugriff auf Ressourcen wird über eine 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 fatima@example.com die Rolle Inhaber und den Nutzern wei@example.com und service-account-13@appspot.gserviceaccount.com die Rolle Bearbeiter zugewiesen wurde:

{
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:fatima@example.com"
      ]
    },
    {
      "role": "roles/editor",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:wei@example.com"
      ]
    }
  ],
  "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.

Aktuelle Richtlinie abrufen

gcloud

Führen Sie den Befehl get-iam-policy für die Ressource aus. Das folgende Beispiel zeigt den Befehl get-iam-policy für Projekte:

gcloud projects get-iam-policy project-id --format=format > filepath

Geben Sie folgende Werte an:

  • project-id: Das Projekt, das Sie aktualisieren möchten (z. B. my-project).
  • format: Den Wert json oder yaml.
  • filepath: Den 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

Die Methode projects.getIamPolicy der Resource Manager API ruft die IAM-Richtlinie eines Projekts ab.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • project-id: Ihre Google Cloud-Projekt-ID.
  • policy-version: Die Richtlinienversion, die zurückgegeben werden soll. Anfragen sollten die neueste Richtlinienversion angeben. Diese ist Richtlinienversion 3. Weitere Informationen finden Sie unter Richtlinienversion beim Abrufen einer Richtlinie festlegen.

HTTP-Methode und URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

JSON-Text anfordern:

{
  "options": {
    "requestedPolicyVersion": policy-version
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten ungefähr so eine JSON-Antwort erhalten:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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;
    }
}

Java

Richten Sie für dieses Beispiel Java wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Python API.

def get_policy(project_id, version=1):
    """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={"options": {"requestedPolicyVersion": version}},
        )
        .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

Ändern Sie die Rollenbindungen in der Richtlinie, um Ihren Mitgliedern Rollen zuzuweisen. Informationen zu den Rollen, die Sie zuweisen können, finden Sie unter Informationen zu Rollen.

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

gcloud

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

Im folgenden Beispiel wird wei@example.com die Rolle "Sicherheitsprüfer" (roles/iam.securityReviewer) zugewiesen. Zum Zuweisen der Rolle hängen Sie den Nutzer an das Array members für die Bindung an:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:fatima@example.com",
    "user:wei@example.com"
  ]
}

REST

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

Im folgenden Beispiel wird wei@example.com die Rolle "Sicherheitsprüfer" (roles/iam.securityReviewer) zugewiesen. Zum Zuweisen der Rolle hängen Sie den Nutzer an das Array members für die Bindung an:

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:fatima@example.com",
    "user:wei@example.com"
  ]
}

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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;
    }
}

Java

Richten Sie für dieses Beispiel Java wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

import com.google.api.services.cloudresourcemanager.model.Binding;
import com.google.api.services.cloudresourcemanager.model.Policy;
import java.util.List;

public class AddMember {

  // Adds a member to a preexisting role.
  public static void addMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-add@example.com";

    List<Binding> bindings = policy.getBindings();

    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        b.getMembers().add(member);
        System.out.println("Member " + member + " added to role " + role);
        return;
      }
    }

    System.out.println("Role not found in policy; member not added");
  }
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Zum Hinzufügen einer neuen Bindung bearbeiten Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie entsprechend. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

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

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

REST

Zum Hinzufügen einer neuen Bindung bearbeiten Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie entsprechend. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

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

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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;
    }
}

Java

Richten Sie für dieses Beispiel Java wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

import com.google.api.services.cloudresourcemanager.model.Binding;
import com.google.api.services.cloudresourcemanager.model.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddBinding {

  // Adds a member to a role with no previous members.
  public static void addBinding(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/role-to-add";
    List<String> members = new ArrayList<String>();
    members.add("user:member-to-add@example.com");

    Binding binding = new Binding();
    binding.setRole(role);
    binding.setMembers(members);

    policy.getBindings().add(binding);
    System.out.println("Added binding: " + binding.toString());
  }
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Zum Widerrufen einer Rolle bearbeiten Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie entsprechend. Die Richtlinienänderung tritt erst in Kraft, wenn Sie die aktualisierte Richtlinie festgelegt haben.

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

REST

Zum Widerrufen einer Rolle bearbeiten Sie die vom Befehl get-iam-policy zurückgegebene JSON- oder YAML-Richtlinie entsprechend. Die Richtlinienänderung tritt erst in Kraft, wenn Sie die aktualisierte Richtlinie festgelegt haben.

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

C#

Richten Sie für dieses Beispiel C# wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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;
        }
    }
}

Java

Richten Sie für dieses Beispiel Java wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

import com.google.api.services.cloudresourcemanager.model.Binding;
import com.google.api.services.cloudresourcemanager.model.Policy;
import java.util.List;

public class RemoveMember {

  // Removes member from a role; removes binding if binding contains 0 members.
  public static void removeMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-remove@example.com";

    List<Binding> bindings = policy.getBindings();
    Binding binding = null;
    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        binding = b;
      }
    }
    if (binding.getMembers().contains(member)) {
      binding.getMembers().remove(member);
      System.out.println("Member " + member + " removed from " + role);
      if (binding.getMembers().isEmpty()) {
        policy.getBindings().remove(binding);
      }
      return;
    }

    System.out.println("Role not found in policy; member not removed");
    return;
  }
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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

Verwenden Sie den Befehl set-iam-policy und geben Sie den Pfad zur JSON-Datei an, die die aktualisierte Richtlinie enthält. Das folgende Beispiel zeigt den Befehl set-iam-policy für Projekte:

gcloud projects set-iam-policy project-id filepath

Geben Sie folgende Werte an:

  • project-id: Das Projekt, das Sie aktualisieren möchten (z. B. my-project).
  • filepath: Der Pfad zu einer Datei, die die neue Richtlinie enthält.

Die Antwort enthält die aktualisierte Richtlinie.

REST

Die Methode projects.setIamPolicy der Resource Manager API legt die Richtlinie in der Anfrage als neue IAM-Richtlinie des Projekts fest.

Ersetzen Sie diese Werte in den folgenden Anweisungen:

  • project-id: Ihre Google Cloud-Projekt-ID.
  • policy: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

HTTP-Methode und URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

JSON-Text anfordern:

{
  "policy": {
    policy
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

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();
    }
}

Java

Richten Sie für dieses Beispiel Java wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur IAM Java API.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.model.Policy;
import com.google.api.services.cloudresourcemanager.model.SetIamPolicyRequest;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class SetPolicy {

  // Sets a project's policy.
  public static void setPolicy(Policy policy, String projectId) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    try {
      SetIamPolicyRequest request = new SetIamPolicyRequest();
      request.setPolicy(policy);
      Policy response = service.projects().setIamPolicy(projectId, request).execute();
      System.out.println("Policy set: " + response.toString());
    } catch (IOException e) {
      System.out.println("Unable to set policy: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Richten Sie für dieses Beispiel Python wie in der IAM-Kurzanleitung zur Verwendung von Clientbibliotheken beschrieben ein. Weitere Informationen finden Sie in der Referenzdokumentation zur 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 IAM den etag-Wert in der Anfrage mit dem vorhandenen etag und schreibt die Richtlinie nur, wenn die Werte übereinstimmen.

Weitere Informationen