Zugriffssteuerung für Organisationsressourcen mit IAM

Google Cloud bietet Identity and Access Management (IAM), mit dem sich der Zugriff auf einzelne Google Cloud Ressourcen präzise steuern und unerwünschter Zugriff auf andere Ressourcen verhindern lässt. 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 Zulassungsrichtlinien 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 erläutert, die für die Organisationsressource verfügbar sind. Außerdem erfahren Sie, wie Sie mit der Cloud Resource Manager API Zulassungsrichtlinien für Organisationsressourcen erstellen und verwalten. Weitere Informationen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

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 aufGoogle Cloud -Ressourcen durchzuführen. Mit der Berechtigung resourcemanager.organizations.get kann ein Nutzer beispielsweise Details zu seiner Organisationsressource 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 Organisationsressource zuzugreifen, sowie eine Beschreibung der Rollen und die damit einhergehenden Berechtigungen.

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.capabilities.*

  • resourcemanager.capabilities.get
  • resourcemanager.capabilities.update

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

cloudasset.assets.analyzeOrgPolicy

cloudasset.assets.exportResource

cloudasset.assets.listResource

cloudasset.assets.searchAllResources

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

recommender.orgPolicyInsights.*

  • recommender.orgPolicyInsights.get
  • recommender.orgPolicyInsights.list
  • recommender.orgPolicyInsights.update

recommender.orgPolicyRecommendations.*

  • recommender.orgPolicyRecommendations.get
  • recommender.orgPolicyRecommendations.list
  • recommender.orgPolicyRecommendations.update

(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

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 Organisations-, Ordner- und Projektressourcen auch alle anderen Berechtigungen erteilt werden. Überlegen Sie sorgfältig, ob dies nötig ist.

Bestehenden Zugriff für eine Organisationsressource ansehen

Welche Rollen einem Nutzer für eine Organisationsressource zugewiesen wurden, sehen Sie in der „allow“-Richtlinie der Ressource. Sie können die Zulassungsrichtlinie für eine Organisationsressource über die Google Cloud -Konsole, die Google Cloud CLI oder die Methode getIamPolicy() aufrufen.

Console

So sehen Sie sich in der Google Cloud -Konsole erteilte Rollen auf Organisationsebene an:

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

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie aus 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 „allow“-Richtlinie für die Organisationsressource mit dem Befehl „get-iam-policy“ ab:

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

Durch diesen Befehl wird die Zulassungsrichtlinie in etwa so ausgegeben:

bindings:
- members:
- user:[email protected]
role: roles/editor
- members:
- user:[email protected]
role:roles/resourcemanager.organizationAdmin
- members:
- user:[email protected]
role: roles/resourcemanager.projectCreator
etag": "BwU1aRxWk30="

API

Das folgende Code-Snippet gibt die Zulassungsrichtlinie 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:[email protected]"
    ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:[email protected]",
            "user:[email protected]",
            "serviceAccount:[email protected]"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
}

Python

Mit der Methode getIamPolicy() können Sie eine zuvor festgelegte Zulassungsrichtlinie abrufen.

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, sodass sie auf die Ressourcen und APIs einer Organisation zugreifen können. Sie können Rollen der E-Mail-Adresse eines Nutzerkontos, einer Google-Gruppe, einem Dienstkonto oder einer G Suite-Domain zuweisen. Mit der Google Cloud Console, der gcloud CLI oder der Methode setIamPolicy() können Sie Rollen zuweisen.

Console

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

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

    Zur Seite "Ressourcen verwalten"

  2. Wählen Sie aus der Drop-down-Liste Organisation Ihre Organisationsressource 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 Nutzerkontos, 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 Zulassungsrichtlinie einer Organisationsressource mit dem Befehl gcloud fest:

  1. Rufen Sie die Zulassungsrichtlinie für die Organisationsressource 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:[email protected]"
        ],
        "role": "roles/editor"
    },
    {
        "members": [
            "user:[email protected]",
        ],
        "role": "roles/resourcemanager.organizationAdmin"
    },
    {
        "members": [
            "user:[email protected]"
        ],
        "role": "roles/resourcemanager.projectCreator"
    },
    ],
    "etag": "BwU1aRxWk30="
}
  1. Öffnen Sie die JSON-Datei in einem Texteditor und fügen Sie einen neuen Eintrag zum Bindungsarray hinzu, in dem Organisationsadministrator definiert sind. Wenn Sie beispielsweise [email protected] als Organisationsadministrator festlegen möchten, ändern Sie das vorherige Beispiel so:
{
    "bindings": [
    {
        "members": [
            "user:[email protected]"
        ],
        "role": "roles/editor"
    },
    {
        "members": [
            "user:[email protected]",
            "user:[email protected]"
        ],
        "role": "roles/resourcemanager.organizationAdmin"
    },
    {
        "members": [
            "user:[email protected]"
        ],
        "role": "roles/resourcemanager.projectCreator"
    },
    ],
    "etag": "BwU1aRxWk30="
}
  1. Aktualisieren Sie die Zulassungsrichtlinie der Organisationsressource, indem Sie den folgenden Befehl ausführen:
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:[email protected]"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
        "user:[email protected]",
        "user:[email protected]",
        "serviceAccount:[email protected]"
        ]
    }
    ]
    "etag": "BwUjHYKHHiQ="
    }
}

Response:

{
    "bindings": [
    {
        "role": "roles/resourcemanager.organizationAdmin",
        "members": [
            "user:[email protected]"
        ]
    },
    {
        "role": "roles/resourcemanager.projectCreator",
        "members": [
            "user:[email protected]",
            "user:[email protected]",
            "serviceAccount:[email protected]"
        ]
    }
    ]
    "etag": "BwUjHYKJUiQ="
}

Mit der Methode setIamPolicy() können Sie Nutzern Rollen zuweisen, indem Sie eine „allow“-Richtlinie mit der Organisationsressource verknüpfen. Die Zulassungsrichtlinie ist eine Sammlung von Bindungen, die Folgendes definieren:

Read-Modify-Write (Lesen-Ändern-Schreiben): Die Metadaten einer Ressource wie etwa die Zulassungsrichtlinie 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. IAM löst dieses Problem durch die Verwendung des Attributs „etag“ in Zulassungsrichtlinien. Mit diesem Attribut wird geprüft, ob sich die Richtlinie zum Zulassen seit der letzten Anfrage geändert hat. Wenn Sie eine Anfrage mit einem ETag-Wert senden, wird der ETag-Wert in der Anfrage mit dem vorhandenen ETag-Wert verglichen, der der Richtlinie zugeordnet ist. Die Zulassungsrichtlinie wird nur geschrieben, wenn die ETag-Werte übereinstimmen.

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

Python

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

Der folgende Beispielcode zeigt das Festlegen einer Zulassungsrichtlinie 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 in der Google Cloud Console und in Suchanfragen sehen, auf die sie Zugriff haben, unabhängig davon, ob sie sich in der ausgewählten Organisationsressource des Nutzers befinden. Mit dem Organisationsrichtliniendienst können Sie die Gruppe von Projekten einschränken, die in Abfragen und in der Google Cloud -Konsole zurückgegeben werden. Damit können Sie festlegen, dass Nutzer nur Projekte innerhalb Ihrer 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 Organisationsressourcen-IDs, die die Organisationsressourcen definieren, die ihre Ressourcen für Nutzer in einer Abfrage oder in der Google Cloud -Konsole sichtbar machen.

Projekte werden unter No organization angezeigt, wenn der Nutzer nicht die Berechtigung resourcemanager.organizations.get für die übergeordnete Organisationsressource des Projekts hat. Dies kann den Anschein haben, dass ein Projekt, das nicht zu Ihrer Organisationsressource gehört, überhaupt nicht mit einer Organisationsressource verknüpft ist. Wenn Sie die Einschränkung resourcemanager.accessBoundaries verwenden, um eine Organisationsressource nicht zuzulassen, werden Projekte, die zu dieser Organisationsressource gehören, nicht in Abfragen oder in der Google Cloud Konsole angezeigt. Projekte, die noch nicht zu einer Organisationsressource migriert wurden, sind nicht sichtbar, wenn diese Einschränkung erzwungen wird.

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

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

Bedingten Zugriff gewähren

Bestimmte IAM-Rollen, z. B. „Organisationsrichtlinien-Administrator“ (roles/orgpolicy.policyAdmin), können nur für eine Organisationsressource gewährt werden. Aufgrund der Richtlinienübernahme wird diese Rolle normalerweise von allen Ressourcen in der Organisation übernommen.

Wenn Sie genauer steuern möchten, für welche Ressourcen die Rolle gewährt wird, können Sie IAM-Bedingungen verwenden. Wenn Sie Tags mit Bedingungen verwenden, können Sie nur dann Zugriff auf Ressourcen gewähren, wenn sie das angegebene Tag haben. Die folgende Zulassungsrichtlinie gewährt die Rolle „Administrator für Organisationsrichtlinien“ beispielsweise nur für Ressourcen mit dem Tag environment: dev und nicht für andere Ressourcen:

{
  "bindings": [
    {
      "members": [
        "group:[email protected]"
      ],
      "role": "roles/orgpolicy.policyAdmin",
      "condition": {
          "title": "Dev_environment_only",
          "description": "Only granted in the development environment",
          "expression":
            "resource.matchTag('123456789012/env', 'dev')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

Berechtigungen testen

Mit der Methode testIamPermissions() können Sie IAM-Berechtigungen eines Nutzers für eine Organisationsressource 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 dieGoogle Cloud -Konsole 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 Google 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 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)