Zugriffssteuerung für Organisationen mit IAM

Die Google Cloud Platform bietet Cloud Identity and Access Management (IAM). Sie können damit bestimmten Google Cloud Platform-Ressourcen detaillierte Zugriffsrechte zuweisen und unerwünschten Zugriff auf andere Ressourcen 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 kontrollieren, wer (Nutzer) welchen Zugriff (Rollen) auf welche Ressourcen hat, indem Sie IAM-Richtlinien festlegen. 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 Rollen von Identity and Access Management (IAM) erläutert. Außerdem erfahren Sie, wie Sie IAM-Richtlinien für Organisationen mit der Resource Manager API erstellen und verwalten. Eine detaillierte Beschreibung von Cloud Identity and Access Management finden Sie in der IAM-Dokumentation. Lesen Sie insbesondere das Kapitel Zugriff gewähren, ändern und widerrufen. Manche der in diesem Thema verlinkten Dokumente sind ggf. nur auf Englisch verfügbar.

Berechtigungen und Rollen

Beim Cloud Identity and Access Management muss das Konto, von dem aus die API-Anfrage gestellt wird, für jede Google Cloud Platform-Methode über die entsprechenden Zugriffsberechtigungen für die Ressource verfügen. Mit Berechtigungen werden Nutzer autorisiert, damit sie bestimmte Aktionen auf Cloud-Ressourcen durchführen können. Die Berechtigung resourcemanager.organizations.list gestattet es einem Nutzer beispielsweise, die ihm gehörenden Organisationen aufzulisten, während er mit der Berechtigung resourcemanager.organizations.update die Metadaten einer Organisation aktualisieren kann.

In der folgenden Tabelle sind die Berechtigungen aufgelistet, die ein Nutzer haben muss, um eine Organisationsmethode aufzurufen:

Methode Erforderliche Berechtigung
cloudresourcemanager.organizations.get() resourcemanager.organizations.get.
cloudresourcemanager.organizations.search() Gibt alle Organisationen zurück, für die der Nutzer die Berechtigung resourcemanager.organizations.get hat.
cloudresourcemanager.organizations.getIamPolicy() resourcemanager.organizations.getIamPolicy
cloudresourcemanager.organizations.setIamPolicy() resourcemanager.organizations.setIamPolicy
cloudresourcemanager.organizations.testIamPermissions() Erfordert keine Berechtigungen.

Sie erteilen 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 Beschreibung Berechtigungen
roles/
resourcemanager.organizationAdmin
Kann alle Ressourcen der Organisation verwalten. Diese Rolle enthält standardmäßig keine Berechtigungen für die Abrechnung oder Administration von Organisationsrollen.
  • orgpolicy.policy.get
  • resourcemanager.folders.get
  • resourcemanager.folders.getIamPolicy
  • resourcemanager.folders.list
  • resourcemanager.folders.setIamPolicy
  • resourcemanager.organizations.get
  • resourcemanager.organizations.getIamPolicy
  • resourcemanager.organizations.setIamPolicy
  • resourcemanager.organizations.update
  • resourcemanager.projectInvites.get
  • resourcemanager.projects.get
  • resourcemanager.projects.getIamPolicy
  • resourcemanager.projects.list
  • resourcemanager.projects.setIamPolicy
roles/
resourcemanager.organizationViewer
Kann den Anzeigenamen der Organisation aufrufen. Diese Rolle ermöglicht es dem Nutzer, die Organisation in der Cloud Console anzusehen, ohne jedoch alle Ressourcen in der Organisation anzeigen zu können.
  • resourcemanager.organizations.get
roles/
browser
Kann Ressourcen der Organisation durchsuchen
  • resourcemanager.folders.get
  • resourcemanager.folders.list
  • resourcemanager.organizations.get
  • resourcemanager.projectInvites.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:
  • List- und Get-Berechtigungen wie resourcemanager.projects.get/list sollten immer gemeinsam erteilt werden.
  • Wenn die benutzerdefinierte Rolle die Berechtigungen folders.list und folders.get enthält, sollte sie auch projects.list und projects.get enthalten.
  • 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. Organisationsrichtlinien können über die Cloud Platform Console, das gcloud-Befehlszeilentool oder die Methode getIamPolicy() aufgerufen werden.

Console

So können Sie über die Google Cloud Platform Console erteilte Rollen auf Organisationsebene ansehen:

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

    Seite "Ressourcen verwalten" öffnen

  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/v1/organizations/12345 aus.

Anfrage:

POST
https://cloudresourcemanager.googleapis.com/v1/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 bereits festgelegte Richtlinie abrufen.

...

crm = discovery.build(
    'cloudresourcemanager', 'v1', 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 Zugriff auf die Ressourcen und APIs einer Organisation gewähren, indem sie ihnen IAM-Rollen zuweisen. Rollen lassen sich über die Cloud Platform Console, das gcloud-Tool oder die Methode setIamPolicy() Teammitgliedern zuweisen.

Console

So steuern Sie den Zugriff auf Organisationsebene mithilfe der Google Cloud Platform Console:

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

    Seite "Ressourcen verwalten" öffnen

  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 Cloud IAM.

  4. Wenn das Infofeld auf der rechten Seite ausgeblendet ist, klicken Sie oben rechts auf die Schaltfläche Infofeld anzeigen.

  5. Geben Sie auf der rechten Seite im Bereich Infofeld unter Berechtigungen die E-Mail-Adressen der Mitglieder ein, die Sie hinzufügen möchten.

  6. Wählen Sie aus der Drop-down-Liste Rolle auswählen die Rolle aus, die Sie diesem Nutzer zuweisen möchten.

  7. Klicken Sie auf Hinzufügen. Es wird ein Dialogfeld angezeigt, in dem Sie das Hinzufügen oder Aktualisieren der neuen Rolle des Mitglieds bestätigen.

gcloud

So legen Sie die IAM-Richtlinie einer Organisation mit dem gcloud-Befehl fest:

  1. Rufen Sie die IAM-Richtlinie der Organisation mit dem Befehl get-iam-policy ab und geben Sie sie 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 zum Organisationsadministrator machen möchten, ändern Sie den obigen Code folgendermaßen:

    {
        "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, indem Sie den folgenden Befehl ausführen:

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

API

Anfrage:

POST https://cloudresourcemanager.googleapis.com/v1/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 Cloud IAM-Richtlinie mit der Organisation verknüpfen. Die Cloud IAM-Richtlinie umfasst eine Reihe von Anweisungen, die die jeweiligen Zugriffsrechte der Nutzer definieren.

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. Cloud Identity and Access Management löst dieses Problem mithilfe einer etag-Eigenschaft in den Cloud IAM-Richtlinien. Damit wird geprüft, ob die Richtlinie seit der letzten Anfrage geändert wurde. Wenn Sie eine Anfrage mit einem etag-Wert an Cloud IAM senden, vergleicht Cloud IAM den etag-Wert in der Anfrage mit dem etag-Wert der Richtlinie. Die Richtlinie wird nur geschrieben, wenn die etag-Werte übereinstimmen.

Wenn Sie eine Richtlinie aktualisieren möchten, rufen Sie diese zuerst mit getIamPolicy() ab, aktualisieren sie und schreiben dann die aktualisierte Richtlinie mit setIamPolicy(). Verwenden Sie den etag-Wert nur dann zum Festlegen der Richtlinie, wenn auch die entsprechende Richtlinie in 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, und gibt die daraus resultierende 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', 'v1', 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)

...

Berechtigungen testen

Mit der Methode testIamPermissions() können Sie Cloud IAM-Berechtigungen eines Nutzers für eine 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 Platform Console verwalten, rufen Sie testIamPermission() normalerweise nicht auf. testIamPermissions() dient für die Integration in Ihre proprietäre Software, wie etwa eine individuelle grafische Benutzeroberfläche. Die Cloud Platform Console verwendet testIamPermissions() beispielsweise intern, um zu ermitteln, welche Oberfläche dem angemeldeten Nutzer zur Verfügung gestellt werden soll.

API

Mit der Methode testIamPermissions() können Sie ermitteln, welche Berechtigungen der Aufrufer für eine bestimmte 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/v1/organization/12345:testIamPermissions

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

Response:

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

Python

...

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

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

print json.dumps(response, indent=2)

...
Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Dokumentation zu Resource Manager