Zugriffssteuerung für Organisationsressourcen 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 IAM-Rollen auf Ebene der Organisationsressource verfügbar sind und wie Sie IAM-Richtlinien für Organisationsressourcen, die die Cloud Resource Manager API verwenden 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. Beispiel: Der Parameter Mit der Berechtigung resourcemanager.organizations.get können Nutzer Details abrufen über ihre Organisationsressource informieren.

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

In der folgenden Tabelle sind die Rollen aufgeführt, die Sie für den Zugriff auf eine die Attribute der Organisationsressource, die Beschreibung der Funktion der Rolle und Berechtigungen innerhalb dieser Rolle.

Rolle Berechtigungen

(roles/resourcemanager.organizationAdmin)

Kann IAM-Richtlinien verwalten und Organisationsrichtlinien für Organisationen, Ordner und Projekte aufrufen.

Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:

  • Projekt

essentialcontacts.*

  • essentialcontacts.contacts.create
  • essentialcontacts.contacts.delete
  • essentialcontacts.contacts.get
  • essentialcontacts.contacts.list
  • essentialcontacts.contacts.send
  • essentialcontacts.contacts.update

iam.policybindings.*

  • iam.policybindings.get
  • iam.policybindings.list

orgpolicy.constraints.list

orgpolicy.policies.list

orgpolicy.policy.get

resourcemanager.folders.createPolicyBinding

resourcemanager.folders.deletePolicyBinding

resourcemanager.folders.get

resourcemanager.folders.getIamPolicy

resourcemanager.folders.list

resourcemanager.folders.searchPolicyBindings

resourcemanager.folders.setIamPolicy

resourcemanager.folders.updatePolicyBinding

resourcemanager.organizations.*

  • resourcemanager.organizations.createPolicyBinding
  • resourcemanager.organizations.deletePolicyBinding
  • resourcemanager.organizations.get
  • resourcemanager.organizations.getIamPolicy
  • resourcemanager.organizations.searchPolicyBindings
  • resourcemanager.organizations.setIamPolicy
  • resourcemanager.organizations.updatePolicyBinding

resourcemanager.projects.createPolicyBinding

resourcemanager.projects.deletePolicyBinding

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

resourcemanager.projects.searchPolicyBindings

resourcemanager.projects.setIamPolicy

resourcemanager.projects.updatePolicyBinding

(roles/resourcemanager.organizationViewer)

Berechtigung zum Anzeigen einer Organisation

Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:

  • Organisation

resourcemanager.organizations.get

(roles/orgpolicy.policyAdmin)

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.

Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:

  • Organisation

orgpolicy.*

  • orgpolicy.constraints.list
  • orgpolicy.customConstraints.create
  • orgpolicy.customConstraints.delete
  • orgpolicy.customConstraints.get
  • orgpolicy.customConstraints.list
  • orgpolicy.customConstraints.update
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

policysimulator.orgPolicyViolations.list

policysimulator.orgPolicyViolationsPreviews.*

  • policysimulator.orgPolicyViolationsPreviews.create
  • policysimulator.orgPolicyViolationsPreviews.get
  • policysimulator.orgPolicyViolationsPreviews.list

(roles/browser)

Lesezugriff zum Suchen in der Hierarchie nach einem Projekt, einschließlich Ordner, Organisation und "allow"-Richtlinie. Diese Rolle berechtigt nicht zum Ansehen der Ressourcen im Projekt.

Ressourcen auf der niedrigsten Ebene, für die Sie diese Rolle zuweisen können:

  • Projekt

resourcemanager.folders.get

resourcemanager.folders.list

resourcemanager.organizations.get

resourcemanager.projects.get

resourcemanager.projects.getIamPolicy

resourcemanager.projects.list

Benutzerdefinierte Rollen erstellen

Zusätzlich zu den vordefinierten Rollen, die in diesem Thema beschrieben werden, können Sie auch Benutzerdefinierte Rollen, bei denen es sich um Sammlungen von die Sie an Ihre Bedürfnisse anpassen. Beim Erstellen einer benutzerdefinierten Rolle Beachten Sie die folgenden Punkte, wenn Sie mit Resource Manager arbeiten: <ph type="x-smartling-placeholder">
    </ph>
  • Berechtigungen zum Auflisten und Abrufen, z. B. resourcemanager.projects.get/list, sollten immer als Paar von Berechtigungen zugewiesen werden.
  • Wenn Ihre benutzerdefinierte Rolle die folders.list und folders.get enthält sollte es auch projects.list und projects.get enthalten.
  • Die Berechtigung setIamPolicy für Organisation, Ordner und Projektressourcen ermöglichen dem Nutzer alle anderen Berechtigungen. Daher sollte die Zuweisung mit Bedacht erfolgen.

Vorhandenen Zugriff auf eine Organisationsressource aufrufen

Sie können sehen, welchen Rollen ein Nutzer für eine Organisationsressource zugewiesen ist, indem Sie IAM-Richtlinie auf Organisationsressourcenebene abrufen Sie können eine Richtlinie aufrufen, Organisationsressource mit der Google Cloud Console, der Google Cloud CLI, oder die getIamPolicy() .

Console

So sehen Sie sich gewährte Rollen auf Ebene der Organisationsressource in der Google Cloud Console an:

  1. Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf:

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie in der Drop-down-Liste Organisation Ihre Organisationsressource 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

Rufen Sie die IAM-Richtlinie für die Organisationsressource mithilfe des get-iam-policy-Befehl:

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 zurück https://cloudresourcemanager.googleapis.com/v3/organizations/12345

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 Organisationsressource gewähren

Organisationsadministratoren können Teammitgliedern IAM-Rollen zuweisen. damit sie auf die Ressourcen und APIs einer Organisation zugreifen können. Sie können Rollen für die E-Mail-Adresse eines Google-Kontos, eine Google-Gruppe, ein Dienstkonto oder eine G Suite . Sie können die Google Cloud Console, die gcloud CLI oder die setIamPolicy() zum Zuweisen von Rollen.

Console

So legen Sie die Zugriffssteuerung auf Ebene der Organisationsressource über die Google Cloud Console fest:

  1. Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf:

    Zur Seite "Ressourcen verwalten"

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

  3. Klicken Sie auf das Kästchen für die Organisationsressource. Wenn Sie kein Ordnerressource, die Organisationsressource ist 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 Organisationsressource mit dem Befehl gcloud fest:

  1. Rufen Sie die IAM-Richtlinie für die Organisationsressource mit folgendem Befehl ab: den Befehl get-iam-policy 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 mit einem Texteditor und fügen Sie dem Element bindings-Array, das den Organisationsadministrator definiert. Um beispielsweise anotheradmin@gcp-test.com Organisationsadministrator sind, würden Sie dies ändern: Beispiel wie folgt:

    {
        "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 Organisationsressource mit dem folgenden Befehl:

    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="
    }
}

Lösung:

{
    "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 ein IAM-Richtlinie für die Organisationsressource. 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.

Es folgt Beispielcode zum Festlegen einer Richtlinie für eine Organisationsressource:

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 Administrator 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 Google Cloud Console sehen und in Suchanfragen angezeigt wird, unabhängig davon, ob sie in den aktuellen ausgewählte Organisationsressource. Mit dem Organisationsrichtliniendienst können Sie Reihe von Projekten, die in Abfragen und in der Google Cloud Console zurückgegeben werden. Damit können Sie festlegen, dass Nutzer nur Projekte innerhalb Ihrer Domain sehen können.

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

Projekte werden unter No organization angezeigt, wenn der Nutzer nicht über die resourcemanager.organizations.get-Berechtigung für die übergeordnete Organisation Ressource des Projekts. Dadurch kann es den Anschein erwecken, als wäre das Projekt nicht Teil Ihrer Organisationsressource ist keiner Organisationsressource zugeordnet unter alle. Wenn Sie die Einschränkung resourcemanager.accessBoundaries verwenden, um ein werden Projekte, die zu dieser Organisationsressource gehören, überhaupt nicht in Abfragen oder in der Google Cloud Console erscheinen. Jedes Projekt, das noch nicht zu einer Organisationsressource migriert wurden, werden nicht angezeigt, wenn wird diese Einschränkung erzwungen.

Es wird empfohlen, Projekte, die unter No organization liegen, zu Ihrem Organisationsressource vor dem Erzwingen dieser Einschränkung. Informationen zu Migration von Projekten in eine Organisationsressource finden Sie unter Projekt verschieben

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

Berechtigungen testen

Sie können IAM-Berechtigungen eines Nutzers für eine Organisation testen Ressource mit der testIamPermissions() . 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.

In der Regel rufen Sie testIamPermission() nicht auf, wenn Sie die Berechtigungen direkt über die Google Cloud Console verwalten testIamPermissions() ist für die Verknüpfung mit Ihrer proprietären Software vorgesehen, etwa einer benutzerdefinierten grafischen Oberfläche. Die Google Cloud Console verwendet beispielsweise testIamPermissions() intern, um zu bestimmen, welche Benutzeroberfläche für dem angemeldeten Nutzer.

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.

Es folgt Beispielcode zum Testen von Berechtigungen für eine Organisationsressource:

Request:

POST https://cloudresourcemanager.googleapis.com/v3/organizations/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)