Zugriff auf Projekte, Ordner und Organisationen verwalten

Auf dieser Seite wird beschrieben, wie Sie den Zugriff auf Projekte, Ordner und Organisationen erteilen, ändern und widerrufen. Informationen zum Verwalten des Zugriffs auf andere Ressourcen finden Sie in den folgenden Anleitungen:

In Identity and Access Management (IAM) wird der Zugriff über IAM-Richtlinien verwaltet. Eine IAM-Richtlinie ist mit einer Google Cloud-Ressource verknüpft. Jede Richtlinie enthält eine Sammlung von Rollenbindungen, die ein oder mehrere Mitglieder, z. B. Nutzer oder Dienstkonten, mit einer IAM-Rolle verknüpfen. Diese Rollenbindungen gewähren den Mitgliedern die angegebenen Rollen sowohl für die Ressource, mit der die Richtlinie verbunden ist, als auch für alle Nachfolger der Ressource. Weitere Informationen zu IAM-Richtlinien finden Sie unter Informationen zu Richtlinien.

Sie können den Zugriff auf Projekte, Ordner und Organisationen mit der Google Cloud Console, dem gcloud-Befehlszeilentool, der REST API oder den Resource Manager-Clientbibliotheken verwalten.

Hinweis

Aktivieren Sie die Cloud Resource Manager API.

Aktivieren Sie die API

Erforderliche Berechtigungen

Zum Verwalten des Zugriffs auf ein Projekt, einen Ordner oder eine Organisation benötigen Sie eine Rolle mit den folgenden Berechtigungen, wobei RESOURCE_TYPE der Ressourcentyp ist, für den das Mitglied den Zugriff verwaltet (projects, folders oder organizations):

  • resourcemanager.RESOURCE_TYPE.get
  • resourcemanager.RESOURCE_TYPE.getIamPolicy
  • resourcemanager.RESOURCE_TYPE.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:

  • Zugriff auf Projekte verwalten: Projekt-IAM-Administrator (roles/resourcemanager.projectIamAdmin)
  • Zugriff auf Projekte und Ordner verwalten: Ordneradministrator (roles/resourcemanager.folderAdmin)
  • Zugriff auf Projekte, Ordner und Organisationen verwalten: Organisationsadministrator (roles/resourcemanager.organizationAdmin)
  • Zugriff auf fast alle Google Cloud-Ressourcen verwalten: 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.

Aktuellen Zugriff ansehen

Mit der Cloud Console, dem gcloud-Tool, der REST API oder den Resource Manager-Clientbibliotheken können Sie sehen, wer Zugriff auf Ihr Projekt, Ihren Ordner oder Ihre Organisation hat.

Console

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

    IAM aufrufen

  2. Wählen Sie ein Projekt, einen Ordner oder eine Organisation aus.

    In der Cloud Console werden alle Mitglieder aufgelistet, denen Rollen für Ihr Projekt, Ihren Ordner oder Ihre Organisation zugewiesen wurden. Diese Liste enthält Mitglieder, die von übergeordneten Ressourcen Rollen für die Ressource übernommen haben. Weitere Informationen zur Richtlinienübernahme finden Sie unter Richtlinienübernahme und die Ressourcenhierarchie.

  3. Optional: Klicken Sie auf das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen, um Rollenzuweisungen für von Google verwaltete Dienstkonten aufzurufen.

gcloud

Rufen Sie die IAM-Richtlinie für die Ressource ab, um zu sehen, wer Zugriff auf Ihr Projekt, Ihren Ordner oder Ihre Organisation hat. Informationen zum Interpretieren von IAM-Richtlinien finden Sie unter Richtlinien verstehen.

Um die IAM-Richtlinie für die Ressource abzurufen, führen Sie den Befehl get-iam-policy für die Ressource aus:

gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

Geben Sie folgende Werte an:

  • RESOURCE_TYPE: Der Ressourcentyp, für den Sie sich den Zugriff ansehen möchten. Verwenden Sie einen der folgenden Werte: projects, resource-manager folders oder organizations.
  • RESOURCE_ID: Ihr Google Cloud-Projekt, Ihr Ordner oder Ihre Organisations-ID. Projekt-IDs sind alphanumerisch, z. B. my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • FORMAT: Das gewünschte Format für die Richtlinie. Verwenden Sie json oder yaml.
  • PATH: Pfad zu einer neuen Ausgabedatei für die Richtlinie.

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

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

REST

Rufen Sie die IAM-Richtlinie für die Ressource ab, um zu sehen, wer Zugriff auf Ihr Projekt, Ihren Ordner oder Ihre Organisation hat. Informationen zum Interpretieren von IAM-Richtlinien finden Sie unter Richtlinien verstehen.

Die Methode getIamPolicy der Resource Manager API ruft die IAM-Richtlinie eines Projekts, des Ordners oder der Organisation ab.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • API_VERSION: Die zu verwendende API-Version. Verwenden Sie v1 für Projekte und Organisationen. Verwenden Sie v2 für Ordner.
  • RESOURCE_TYPE: Der Ressourcentyp, dessen Richtlinie Sie verwalten möchten. Verwenden Sie den Wert projects, folders oder organizations.
  • RESOURCE_ID: Die ID Ihres Google Cloud-Projekts, Ihrer Organisation oder Ihres Ordners. Projekt-IDs sind alphanumerische Strings, wie my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • 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/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

JSON-Text anfordern:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

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

Die Antwort enthält die IAM-Richtlinie des Projekts. Beispiel:

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

C#


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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.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

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

Einzelne Rolle gewähren oder widerrufen

Sie können die Cloud Console und das gcloud-Tool verwenden, um für ein einzelnes Mitglied schnell eine einzelne Rolle zuzuweisen oder zu widerrufen, ohne die IAM-Richtlinie der Ressource direkt zu bearbeiten. Zu den gängigen Mitgliedstypen zählen Google-Konten, Dienstkonten, Google-Gruppen und Domains. Eine Liste der Mitgliedstypen in IAM finden Sie unter Konzepte in Verbindung mit Identität.

Einzelne Rolle gewähren

So weisen Sie einem Mitglied eine einzelne Rolle zu:

Console

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

    IAM aufrufen

  2. Wählen Sie ein Projekt, einen Ordner oder eine Organisation aus.

  3. Wählen Sie ein Mitglied aus, dem Sie eine Rolle zuweisen möchten:

    • Um einem vorhandenen Mitglied eine Rolle zuzuweisen, suchen Sie eine Zeile mit der E-Mail-Adresse des Mitglieds, klicken Sie in dieser Zeile auf Mitglied bearbeiten und dann auf Weitere Rolle hinzufügen.

      Wenn Sie einem von Google verwalteten Dienstkonto eine Rolle zuweisen möchten, müssen Sie das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen anklicken, um die entsprechende E-Mail-Adresse zu sehen.

    • Wenn Sie einem neuen Mitglied eine Rolle zuweisen möchten, klicken Sie auf Hinzufügen und geben Sie dann die E-Mail-Adresse des Mitglieds ein.

  4. Wählen Sie eine Rolle aus der Drop-down-Liste aus. Wählen Sie für Best Practices für die Sicherheit eine Rolle aus, die nur die Berechtigungen enthält, die Ihr Mitglied benötigt.

  5. Optional: Fügen Sie der Rolle eine Bedingung hinzu.

  6. Klicken Sie auf Speichern. Dem Mitglied wird die Rolle für die Ressource zugewiesen.

So weisen Sie einem Mitglied eine Rolle für mehr als ein Projekt, einen Ordner oder eine Organisation zu:

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

    Zur Seite „Ressourcen verwalten“

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

  3. Wenn das Infofeld nicht sichtbar ist, klicken Sie auf Infofeld ansehen. Klicken Sie dann auf Berechtigungen.

  4. Wählen Sie ein Mitglied aus, dem Sie eine Rolle zuweisen möchten:

    • Um einem vorhandenen Mitglied eine Rolle zuzuweisen, suchen Sie eine Zeile mit der E-Mail-Adresse des Mitglieds, klicken Sie in dieser Zeile auf Mitglied bearbeiten und dann auf Weitere Rolle hinzufügen.

    • Wenn Sie einem neuen Mitglied eine Rolle zuweisen möchten, klicken Sie auf Mitglied hinzufügen und geben Sie dann die E-Mail-Adresse des Mitglieds ein.

  5. Wählen Sie eine Rolle aus der Drop-down-Liste aus.

  6. Optional: Fügen Sie der Rolle eine Bedingung hinzu.

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

gcloud

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

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
    --member=MEMBER --role=ROLE_ID \
    --condition=CONDITION

Geben Sie folgende Werte an:

  • RESOURCE_TYPE: Der Ressourcentyp, für den Sie den Zugriff verwalten möchten. Verwenden Sie projects, resource-manager folders oder organizations.
  • RESOURCE_ID: Ihr Google Cloud-Projekt, Ihr Ordner oder Ihre Organisations-ID. Projekt-IDs sind alphanumerisch, z. B. my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • 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.

    Beim Mitgliedstyp user muss der Domainname in der Kennung eine Google Workspace- oder Cloud Identity-Domain sein. Informationen zum Einrichten einer Cloud Identity-Domain finden Sie unter Cloud Identity – Übersicht.

  • ROLE_ID: Der Name der Rolle, die Sie zuweisen möchten. Beispiel: roles/resourcemanager.projectCreator. Eine Liste der Rollen finden Sie unter Informationen zu Rollen.

  • CONDITION: Optional. Die Bedingung, die der Rollenbindung hinzugefügt werden soll. Weitere Informationen zu Bedingungen finden Sie in der Übersicht der Bedingungen.

So gewähren Sie dem Nutzer my-user@example.com für das Projekt my-project beispielsweise die Rolle "Projektersteller":

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

Einzelne Rolle widerrufen

So widerrufen Sie eine einzelne Rolle eines Mitglieds:

Console

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

    IAM aufrufen

  2. Wählen Sie ein Projekt, einen Ordner oder eine Organisation aus.

  3. Suchen Sie die Zeile mit der E-Mail-Adresse des Mitglieds, dessen Zugriff Sie widerrufen möchten. Klicken Sie dann auf Mitglied bearbeiten in dieser Zeile.

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

gcloud

Wenn Sie einem Nutzer schnell eine Rolle entziehen möchten, führen Sie den Befehl remove-iam-policy-binding aus:

gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID \
    --member=MEMBER --role=ROLE_ID

Geben Sie folgende Werte an:

  • RESOURCE_TYPE: Der Ressourcentyp, für den Sie den Zugriff verwalten möchten. Verwenden Sie projects, resource-manager folders oder organizations.
  • RESOURCE_ID: Ihr Google Cloud-Projekt, Ihr Ordner oder Ihre Organisations-ID. Projekt-IDs sind alphanumerisch, z. B. my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • 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.

    Beim Mitgliedstyp user muss der Domainname in der Kennung eine Google Workspace- oder Cloud Identity-Domain sein. Informationen zum Einrichten einer Cloud Identity-Domain finden Sie unter Cloud Identity – Übersicht.

  • ROLE_ID: Der Name der Rolle, die Sie aufheben möchten. Beispiel: roles/resourcemanager.projectCreator. Eine Liste der Rollen finden Sie unter Informationen zu Rollen.

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

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

Mehrere Rollen gewähren oder widerrufen

Um umfangreiche Zugriffsänderungen vorzunehmen, bei denen mehrere Rollen gewährt und widerrufen werden, verwenden Sie das Muster read-modify-write, um die IAM-Richtlinie der Ressource zu aktualisieren:

  1. Aktuelle Richtlinie durch Aufrufen von getIamPolicy() lesen.
  2. Zurückgegebene Richtlinie entweder mithilfe eines Texteditors oder programmatisch bearbeiten, um Mitglieder oder Rollenbindungen hinzuzufügen oder zu entfernen.
  3. Aktualisierte Richtlinie durch Aufrufen von setIamPolicy() schreiben.

Sie können das gcloud-Tool, die REST API oder die Resource Manager-Clientbibliotheken verwenden, um die Richtlinie zu aktualisieren.

Aktuelle Richtlinie abrufen

gcloud

Um die IAM-Richtlinie für die Ressource abzurufen, führen Sie den Befehl get-iam-policy für die Ressource aus:

gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

Geben Sie folgende Werte an:

  • RESOURCE_TYPE: Der Ressourcentyp, für den Sie die Richtlinie abrufen möchten. Verwenden Sie einen der folgenden Werte: projects, resource-manager folders oder organizations.
  • RESOURCE_ID: Ihr Google Cloud-Projekt, Ihr Ordner oder Ihre Organisations-ID. Projekt-IDs sind alphanumerisch, z. B. my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • FORMAT: Das gewünschte Format für die Richtlinie. Verwenden Sie json oder yaml.
  • PATH: Pfad zu einer neuen Ausgabedatei für die Richtlinie.

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

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

REST

Die Methode getIamPolicy der Resource Manager API ruft die IAM-Richtlinie eines Projekts, des Ordners oder der Organisation ab.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • API_VERSION: Die zu verwendende API-Version. Verwenden Sie v1 für Projekte und Organisationen. Verwenden Sie v2 für Ordner.
  • RESOURCE_TYPE: Der Ressourcentyp, dessen Richtlinie Sie verwalten möchten. Verwenden Sie den Wert projects, folders oder organizations.
  • RESOURCE_ID: Die ID Ihres Google Cloud-Projekts, Ihrer Organisation oder Ihres Ordners. Projekt-IDs sind alphanumerische Strings, wie my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • 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/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

JSON-Text anfordern:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

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

Die Antwort enthält die IAM-Richtlinie des Projekts. Beispiel:

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

Speichern Sie die Antwort in einer Datei des entsprechenden Typs (json oder yaml).

C#


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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.v3.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

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 der Richtlinie Ihrer Ressource programmatisch mithilfe eines Texteditors so an, dass sie die Rollen widerspiegelt, die Sie bestimmten Nutzern gewähren oder entziehen möchten.

Bearbeiten Sie das Feld etag der Richtlinie nicht und entfernen Sie es nicht, um sicherzustellen, dass Sie keine anderen Richtlinienänderungen überschreiben. Das Feld etag gibt den aktuellen Richtlinienstatus an. Wenn Sie die aktualisierte Richtlinie festlegen, vergleicht IAM den etag-Wert in der Anfrage mit dem vorhandenen etag und schreibt die Richtlinie nur, wenn die Werte übereinstimmen.

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 oder Zuweisbare Rollen für die Ressource aufrufen.

Um eine Rolle zuzuweisen, die bereits in der Richtlinie enthalten ist, fügen Sie das Mitglied einer vorhandenen Rollenbindung hinzu:

gcloud

Bearbeiten Sie die zurückgegebene Richtlinie, indem Sie das Mitglied einer vorhandenen Rollenbindung hinzufügen. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Angenommen, die zurückgegebene Richtlinie enthält die folgende Rollenbindung, die kai@example.com die Rolle „Sicherheitsprüfer“ (roles/iam.securityReviewer) zuweist:

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

Fügen Sie raha@example.com der vorhandenen Rollenbindung hinzu, um raha@example.com dieselbe Rolle zuzuweisen:

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

REST

Bearbeiten Sie die zurückgegebene Richtlinie, indem Sie das Mitglied einer vorhandenen Rollenbindung hinzufügen. Beachten Sie, dass diese Richtlinienänderung erst wirksam wird, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Angenommen, die zurückgegebene Richtlinie enthält die folgende Rollenbindung, die kai@example.com die Rolle „Sicherheitsprüfer“ (roles/iam.securityReviewer) zuweist:

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

Fügen Sie raha@example.com der vorhandenen Rollenbindung hinzu, um raha@example.com dieselbe Rolle zuzuweisen:

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

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.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

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

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

Fügen Sie eine neue Rollenbindung hinzu, um eine Rolle zuzuweisen, die in der Richtlinie noch nicht enthalten ist.

gcloud

Bearbeiten Sie die zurückgegebene Richtlinie, indem Sie eine neue Rollenbindung hinzufügen, die dem Mitglied die Rolle zuweist. Die Richtlinienänderung tritt erst in Kraft, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Beispiel: Fügen Sie dem Array bindings für die Richtlinie die folgende Rollenbindung hinzu, um raha@example.com die Rolle "Compute Storage-Administrator" (roles/compute.storageAdmin) zuzuweisen:

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

REST

Bearbeiten Sie die zurückgegebene Richtlinie, indem Sie eine neue Rollenbindung hinzufügen, die dem Mitglied die Rolle zuweist. Die Richtlinienänderung tritt erst in Kraft, wenn Sie die aktualisierte Richtlinie festgelegt haben.

Beispiel: Fügen Sie dem Array bindings für die Richtlinie die folgende Rollenbindung hinzu, um raha@example.com die Rolle "Compute Storage-Administrator" (roles/compute.storageAdmin) zuzuweisen:

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

C#

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.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

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

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" (roles/owner) geht. Weitere Informationen finden Sie in der Referenzdokumentation zu projects.setIamPolicy().

Rolle entziehen

Um eine Rolle zu entziehen, entfernen Sie das Mitglied aus der Rollenbindung. Wenn das Mitglied das einzige Mitglied in der Rollenbindung ist, entfernen Sie die gesamte Rollenbindung.

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#

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.


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

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

import com.google.api.services.cloudresourcemanager.v3.model.Binding;
import com.google.api.services.cloudresourcemanager.v3.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

Informationen zum Installieren und Verwenden der Clientbibliothek für Resource Manager finden Sie unter Resource Manager-Clientbibliotheken.

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 und zu widerrufen, rufen Sie setIamPolicy() auf, um Aktualisierungen vorzunehmen.

gcloud

Führen Sie zum Festlegen der IAM-Richtlinie für die Ressource den Befehl set-iam-policy für die Ressource aus:

gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

Geben Sie folgende Werte an:

  • RESOURCE_TYPE: Der Ressourcentyp, für den Sie die Richtlinie festlegen möchten. Verwenden Sie einen der folgenden Werte: projects, resource-manager folders oder organizations.
  • RESOURCE_ID: Ihr Google Cloud-Projekt, Ihr Ordner oder Ihre Organisations-ID. Projekt-IDs sind alphanumerisch, z. B. my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • PATH: Der Pfad zu einer Datei, die die neue Richtlinie enthält.

Die Antwort enthält die aktualisierte Richtlinie.

Mit dem folgenden Befehl wird beispielsweise die in policy.json gespeicherte Richtlinie als Richtlinie für das Projekt my-project festgelegt:

gcloud projects set-iam-policy my-project ~/policy.json

REST

Die Methode setIamPolicy der Resource Manager API legt die Richtlinie in der Anfrage als neue IAM-Richtlinie für das Projekt, den Ordner oder die Organisation fest.

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • API_VERSION: Die zu verwendende API-Version. Verwenden Sie v1 für Projekte und Organisationen. Verwenden Sie v2 für Ordner.
  • RESOURCE_TYPE: Der Ressourcentyp, dessen Richtlinie Sie verwalten möchten. Verwenden Sie den Wert projects, folders oder organizations.
  • RESOURCE_ID: Die ID Ihres Google Cloud-Projekts, Ihrer Organisation oder Ihres Ordners. Projekt-IDs sind alphanumerische Strings, wie my-project. Ordner- und Organisations-IDs sind numerisch, z. B. 123456789012.
  • POLICY: Eine JSON-Darstellung der Richtlinie, die Sie festlegen möchten. Weitere Informationen zum Format einer Richtlinie finden Sie in der Richtlinienreferenz.

    Zum Festlegen der im vorherigen Schritt angezeigten Richtlinie ersetzen Sie beispielsweise POLICY durch Folgendes:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:owner@example.com"
          ]
        }
      ]
    }
    

HTTP-Methode und URL:

POST https://iam.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_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

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.v3.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.v3.model.Policy;
import com.google.api.services.cloudresourcemanager.v3.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

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

Nächste Schritte

Jetzt testen

Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis zu prüfen und zu bewerten. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.

Jetzt kostenlos starten