Zugriffssteuerung für Organisationen mit IAM

Google Cloud bietet mit der Identitäts- und Zugriffsverwaltung (Identity and Access Management, IAM) die Möglichkeit, bestimmten Google Cloud-Ressourcen detaillierte Zugriffsrechte zuzuweisen und unerwünschten Zugriff auf andere Ressourcen zu verhindern. Durch IAM haben Sie die Möglichkeit, das Prinzip der geringsten Berechtigung anzuwenden und somit nur den notwendigen Zugriff auf Ihre Ressourcen zu gewähren.

Mit IAM können Sie durch Festlegung von Richtlinien steuern, wer (Nutzer) welchen Zugriff (Rollen) auf welche Ressourcen hat. Durch sie werden einem Nutzer bestimmte Rollen zugewiesen, mit denen wiederum gewisse Berechtigungen verknüpft sind.

Auf dieser Seite werden die auf Organisationsebene verfügbaren IAM-Rollen erläutert. Außerdem erfahren Sie, wie Sie IAM-Richtlinien für Organisationen mit der Resource Manager API erstellen und verwalten. Eine ausführliche Beschreibung von IAM finden Sie in der IAM-Dokumentation. Lesen Sie insbesondere den Abschnitt Zugriff gewähren, ändern und aufheben.

Berechtigungen und Rollen

Damit der Zugriff auf die Ressourcen gesteuert werden kann, verlangt Google Cloud, dass Konten, die API-Anfragen senden, über entsprechende IAM-Rollen verfügen. IAM-Rollen beinhalten Berechtigungen, die es Nutzern erlauben, bestimmte Aktionen auf Google Cloud-Ressourcen durchzuführen. Mit der Berechtigung resourcemanager.organizations.get kann ein Nutzer beispielsweise Details zu seiner Organisation abrufen.

Sie erteilen den Nutzern die Berechtigungen nicht direkt, sondern Sie weisen ihnen Rollen zu, die eine oder mehrere Berechtigungen enthalten.

Sie können für dieselbe Ressource eine oder mehrere Rollen zuweisen.

Vordefinierte Rollen verwenden

Die folgende Tabelle enthält die Rollen, die Sie zuweisen können, um auf die Eigenschaften einer Organisation zuzugreifen, sowie eine Beschreibung der Rollen und die damit einhergehenden Berechtigungen.

Rolle Rollenname Beschreibung Berechtigungen
roles/resourcemanager.organizationAdmin Organisationsadministrator

Kann alle Ressourcen der Organisation verwalten

  • orgpolicy.constraints.*
  • orgpolicy.policies.list
  • orgpolicy.policy.get
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.organizations.*
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list
  • resourcemanager.projects.setIamPolicy
roles/resourcemanager.organizationViewer Organisationsbetrachter

Berechtigung zum Anzeigen einer Organisation

  • resourcemanager.organizations.get
roles/orgpolicy.policyAdmin Administrator für Unternehmensrichtlinien

Ermöglicht den Zugriff, um festzulegen, welche Einschränkungen eine Organisation auf die Konfiguration von Cloud-Ressourcen durchführen möchte, indem sie Organisationsrichtlinien festlegt.

  • orgpolicy.*
roles/browser Browser

Lesezugriff zum Suchen in der Hierarchie nach einem Projekt, einschließlich Ordner, Organisation und IAM-Richtlinie. Diese Rolle berechtigt nicht zum Aufrufen von Ressourcen des Projekts.

  • resourcemanager.folders.get
  • resourcemanager.folders.list
  • resourcemanager.organizations.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list

Benutzerdefinierte Rollen erstellen

Neben den vordefinierten Rollen, die in diesem Thema beschrieben werden, können Sie auch benutzerdefinierte Rollen erstellen. Dabei handelt es sich um Sammlungen von Berechtigungen, die Sie an Ihre Bedürfnisse anpassen. Beachten Sie die folgenden Punkte, wenn Sie eine benutzerdefinierte Rolle für die Verwendung mit Resource Manager erstellen:
  • Berechtigungen zum Auflisten und Abrufen, z. B. resourcemanager.projects.get/list, sollten immer als Paar von Berechtigungen zugewiesen werden.
  • Wenn Ihre benutzerdefinierte Rolle die Berechtigungen folders.list und folders.get hat, sollte sie auch die Berechtigungen projects.list und projects.get einschließen.
  • Beachten Sie, dass einem Nutzer mit der Berechtigung setIamPolicy für Organisationen, Ordner und Projekte auch alle anderen Berechtigungen erteilt werden. Überlegen Sie sorgfältig, ob dies nötig ist.

Bestehenden Zugriff für eine Organisation anzeigen

Welche Rollen einem Nutzer für eine Organisation zugewiesen wurden, sehen Sie in der IAM-Richtlinie auf Organisationsebene. Sie können die Richtlinie einer Organisation in der Google Cloud Console, über das gcloud-Befehlszeilentool oder mit der Methode getIamPolicy() anzeigen lassen.

Console

So sehen Sie sich in der Cloud Console erteilte Rollen auf Organisationsebene an:

  1. Öffnen Sie in der Cloud Console die Seite Ressourcen verwalten:

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie aus der Drop-down-Liste Organisation Ihre Organisation aus.

  3. Klicken Sie auf das Kästchen für die Organisationsressource.

  4. Klicken Sie auf der rechten Seite im Infofeld unter Berechtigungen auf eine Rolle und zeigen Sie alle Mitglieder mit dieser Rolle an.

gcloud

Die IAM-Richtlinie für eine Organisation rufen Sie mit dem Unterbefehl "get-iam-policy" ab:

gcloud alpha organizations get-iam-policy [ORGANIZATION_ID] --format json >
[FILENAME.JSON]

Durch diesen Befehl wird die Richtlinie in etwa so ausgegeben:

bindings:
- members:
  - user:testuser1@gcp-test.com
  role: roles/editor
- members:
  - user:admin@gcp-test.com
  role:roles/resourcemanager.organizationAdmin
- members:
  - user:testuser2@gcp-test.com
  role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="

API

Das folgende Code-Snippet gibt die Richtlinie für die Organisationsressource https://cloudresourcemanager.googleapis.com/v3/organizations/12345 zurück.

Anfrage:

POST
https://cloudresourcemanager.googleapis.com/v3/organizations/12345:getIamPolicy

Antwort:

 {
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
        "user:email1@gmail.com"
    ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:email2@gmail.com",
            "user:email3@gmail.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
}

Python

Mit der Methode getIamPolicy() können Sie eine Richtlinie abrufen, die zuvor festgelegt wurde.

...

crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
    resource=flags.organizationId, body={}).execute()
print json.dumps(policy, indent=2)

...

Zugriff auf eine Organisation gewähren

Organisationsadministratoren können Teammitgliedern IAM-Rollen zuweisen, sodass sie auf die Ressourcen und APIs einer Organisation zugreifen können. Sie können Rollen der E-Mail-Adresse eines Google-Kontos, einer Google-Gruppe, einem Dienstkonto oder einer G Suite-Domain zuweisen. Mit der Cloud Console, dem gcloud-Tool oder der Methode setIamPolicy() können Sie Rollen zuweisen.

Console

So legen Sie die Zugriffssteuerung auf Organisationsebene mit der Cloud Console fest:

  1. Öffnen Sie in der Cloud Console die Seite Ressourcen verwalten:

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie aus der Drop-down-Liste Organisation Ihre Organisation aus.

  3. Klicken Sie auf das Kästchen für die Organisationsressource. Wenn Sie keine Ordnerressource haben, ist die Organisationsressource nicht sichtbar. Weitere Informationen finden Sie in der Anleitung zum Gewähren von Rollen auf der Seite IAM.

  4. Wenn das Infofeld auf der rechten Seite ausgeblendet ist, klicken Sie oben rechts auf Infofeld ansehen.

  5. Klicken Sie im Infofeld unter dem Tab Berechtigungen auf Mitglied hinzufügen.

  6. Geben Sie in das Feld Neue Mitglieder die Teammitglieder ein, die Sie hinzufügen möchten. Sie können die E-Mail-Adresse eines Google-Kontos, eine Google-Gruppe, ein Dienstkonto oder eine G Suite-Domain angeben.

  7. Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle aus, die Sie den Teammitgliedern zuweisen möchten.

  8. Klicken Sie auf Hinzufügen.

gcloud

So legen Sie die IAM-Richtlinie einer Organisation mithilfe des gcloud-Befehls fest:

  1. Rufen Sie die IAM-Richtlinie für die Organisation mit dem Befehl get-iam-policy ab und geben Sie die Richtlinie in eine JSON-Datei aus:

    gcloud alpha organizations get-iam-policy [ORGANIZATION_ID]
    --format json > [FILENAME.JSON]
    
  2. Der Inhalt der JSON-Datei sieht in etwa so aus:

    {
        "bindings": [
        {
            "members": [
                "user:testuser1@gcp-test.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
                "user:admin@gcp-test.com",
            ],
            "role": "roles/resourcemanager.organizationAdmin"
        },
        {
            "members": [
                "user:testuser2@gcp-test.com"
            ],
            "role": "roles/resourcemanager.projectCreator"
        },
        ],
        "etag": "BwU1aRxWk30="
    }
    
  3. Öffnen Sie die JSON-Datei in einem Texteditor und fügen Sie einen neuen Eintrag zum Bindungsarray hinzu, in dem die Organisationsadministratoren definiert sind. Wenn Sie beispielsweise anotheradmin@gcp-test.com als Organisationsadministrator festlegen möchten, ändern Sie das oben gezeigte Beispiel so:

    {
        "bindings": [
        {
            "members": [
                "user:testuser1@gcp-test.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
                "user:admin@gcp-test.com",
                "user:anotheradmin@gcp-test.com"
            ],
            "role": "roles/resourcemanager.organizationAdmin"
        },
        {
            "members": [
                "user:testuser20@gcp-test.com"
            ],
            "role": "roles/resourcemanager.projectCreator"
        },
        ],
        "etag": "BwU1aRxWk30="
    }
    
  4. Aktualisieren Sie die Richtlinie der Organisation durch Ausführung des folgenden Befehls:

    gcloud alpha organizations set-iam-policy [ORGANIZATION_ID] policy.json
    

API

Anfrage

POST https://cloudresourcemanager.googleapis.com/v3/organizations/12345:setIamPolicy
{
    "policy": {
    "version": "0",
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:email1@gmail.com"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
        "user:email2@gmail.com",
        "user:email3@gmail.com",
        "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
    }
}

Antwort

{
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:email1@gmail.com"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:email2@gmail.com",
            "user:email3@gmail.com",
            "serviceAccount:my-other-app@appspot.gserviceaccount.com"
        ]
    }
    ]
    "etag": "BwUjHYKJUiQ="
}

Mit der Methode setIamPolicy() können Sie Nutzern Rollen zuweisen, indem Sie eine IAM-Richtlinie mit der Organisation verknüpfen. Die IAM-Richtlinie umfasst eine Reihe von Anweisungen, die definieren, wer welchen Zugriff hat.

Read-Modify-Write (Lesen-Ändern-Schreiben): Die Metadaten einer Ressource wie etwa die Richtlinie werden häufig nach dem folgenden Muster aktualisiert: Der aktuelle Zustand wird gelesen, die Daten werden lokal aktualisiert und die geänderten Daten anschließend zum Schreiben übermittelt. Dabei kann es jedoch zu Konflikten kommen, wenn zwei oder mehr voneinander unabhängige Prozesse gleichzeitig nach diesem Muster verfahren. Dies ist möglicherweise der Fall, wenn zum Beispiel zwei Inhaber eines Projekts gleichzeitig versuchen, gegensätzliche Änderungen an derselben Richtlinie vorzunehmen. Die Änderungen von einem der beiden Projektinhaber werden eventuell nicht übernommen. Bei IAM wird dieses Problem durch die Eigenschaft „etag“ in IAM-Richtlinien gelöst. Mit diesem Attribut wird geprüft, ob die Richtlinie seit der letzten Anfrage geändert wurde. Wenn Sie eine Anfrage mit einem ETag-Wert an IAM senden, vergleicht IAM den ETag-Wert in der Anfrage mit dem vorhandenen ETag-Wert, der der Richtlinie zugeordnet ist. Die Richtlinie wird nur geschrieben, wenn die etag-Werte übereinstimmen.

Wenn Sie eine Richtlinie aktualisieren, rufen Sie zuerst die Richtlinie mit getIamPolicy() ab, aktualisieren Sie sie und schreiben Sie die aktualisierte Richtlinie dann mit setIamPolicy(). Verwenden Sie den etag-Wert beim Festlegen der Richtlinie nur dann, wenn die entsprechende Richtlinie unter GetPolicyResponse einen etag-Wert enthält.

Python

Mit der Methode setIamPolicy() können Sie eine Richtlinie mit einer Ressource verknüpfen. Die Methode setIamPolicy akzeptiert eine SetIamPolicyRequest, die eine festzulegende Richtlinie sowie die Ressource enthält, mit der die Richtlinie verknüpft ist. Sie gibt die entsprechende Richtlinie zurück. Sie sollten nach dem Read-Modify-Write-Muster (Lesen-Ändern-Schreiben) vorgehen, wenn Sie eine Richtlinie mit setIamPolicy() aktualisieren.

Der folgende Beispielcode zeigt das Festlegen einer Richtlinie für eine Organisation:

...

crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))
policy = crm.organizations().getIamPolicy(
    resource=flags.organizationId, body={}).execute()

admin_binding = next(
    (binding
        for binding in policy['bindings']
        if binding['role'] == 'roles/resourcemanager.organizationAdmin'),
        None)

# Add an empty Organization Admin binding if not present.
if not admin_binding:
    admin_binding = {
        'role': 'roles/resourcemanager.organizationAdmin',
        'members': []
    }
policy['bindings'].append(admin_binding)

# Add the new Admin (if necessary).
new_admin = 'user:' + flags.adminEmail
if new_admin not in admin_binding['members']:
    admin_binding['members'].append(new_admin)
policy = crm.organizations().setIamPolicy(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'policy': policy
    }).execute()

print json.dumps(policy, indent=2)

...

Projektsichtbarkeit für Nutzer einschränken

Nutzer können alle Projekte, auf die sie Zugriff haben, in der Cloud Console und in Suchanfragen sehen, unabhängig davon, ob sie in der aktuell ausgewählten Organisation des Nutzers enthalten sind oder nicht. Mit dem Organisationsrichtliniendienst können Sie die Gruppe von Projekten einschränken, die in Abfragen und in der Cloud Console zurückgegeben werden. So können Sie festlegen, dass Nutzer nur Projekte in Ihrer eigenen Domain sehen können.

Die Einschränkung der Organisationsrichtlinie constraints/resourcemanager.accessBoundaries ist eine Listeneinschränkung, die für Ihre Organisationsressource erzwungen wird. Die Einschränkung akzeptiert eine Liste von Organisations-IDs, die die Gruppen von Organisationen definieren, die ihre Ressourcen für Nutzer in einer Abfrage oder in der Cloud Console sichtbar machen.

Projekte werden unter No organization angezeigt, wenn der Nutzer nicht die Berechtigung resourcemanager.organizations.get für die übergeordnete Organisation des Projekts hat. Dadurch kann es so aussehen, als ob ein Projekt, das nicht zu Ihrer Organisation gehört, mit keiner Organisation verknüpft ist. Wenn Sie mit der Einschränkung resourcemanager.accessBoundaries eine Organisation nicht zulassen, werden Projekte, die zu dieser Organisation gehören, in Abfragen oder in der Cloud Console überhaupt nicht angezeigt. Jedes Projekt, das noch nicht zu einer Organisation migriert wurde, ist nicht sichtbar, wenn diese Einschränkung erzwungen wird.

Wir empfehlen, Projekte unter No organization in Ihre Organisation zu migrieren, bevor Sie diese Einschränkung erzwingen. Informationen zum Migrieren von Projekten in eine Organisation finden Sie unter Projekt verschieben.

Informationen zum Festlegen einer Organisationsrichtlinie finden Sie unter Einschränkungen verwenden.

Berechtigungen testen

Mit der Methode testIamPermissions() können Sie IAM-Berechtigungen eines Nutzers in einer Organisation testen. Diese Methode nimmt die Ressourcen-URL und den Satz der zu testenden Berechtigungen als Eingabeparameter an und gibt die Teilmenge dieser Berechtigungen zurück, die dem Nutzer zugänglich ist.

Wenn Sie Berechtigungen direkt über die Cloud Console verwalten, wird testIamPermission() in der Regel nicht aufgerufen. testIamPermissions() ist für die Verknüpfung mit Ihrer proprietären Software vorgesehen, etwa einer benutzerdefinierten grafischen Oberfläche. Beispielsweise verwendet die Cloud Console intern testIamPermissions(), um zu bestimmen, welche Benutzeroberfläche dem angemeldeten Nutzer zur Verfügung stehen soll.

API

Mit der Methode testIamPermissions() können Sie prüfen, welche Berechtigungen der Aufrufer für die angegebene Ressource hat. Diese Methode nimmt einen Ressourcennamen und eine Reihe von Berechtigungen als Parameter und gibt den Teil der Berechtigungen des Aufrufenden zurück.

Der folgende Beispielcode zeigt das Testen von Berechtigungen für eine Organisation:

Request:

POST https://cloudresourcemanager.googleapis.com/v3/organization/12345:testIamPermissions

{
    "permissions":  [
        "resourcemanager.organizations.get",
        "resourcemanager.organizations.setIamPolicy"
    ]
}

Response:

{
    "permissions": [
        "resourcemanager.organizations.get"
    ]
}

Python

...

crm = discovery.build(
    'cloudresourcemanager', 'v3', http=creds.authorize(httplib2.Http()))

response = crm.organizations().testIamPermissions(
    resource=flags.organizationId,
    body={
        'resource': flags.organizationId,
        'permissions': [
            'resourcemanager.organizations.setIamPolicy',
            'resourcemanager.projects.patch'
        ]
    }).execute()

print json.dumps(response, indent=2)

...