Auf dieser Seite wird beschrieben, wie Sie den Zugriff auf bestimmte Ressourcen mithilfe von bedingten Rollenbindungen in Ihren Zulassungsrichtlinien verwalten. Mithilfe von Ressourcenattributen in einem Bedingungsausdruck können Sie steuern, ob ein Prinzipal eine Berechtigung für den Zugriff auf eine Ressource verwenden kann, basierend auf dem Namen, Typ und Google Cloud Dienst der Ressource.
Vorbereitung
- Lesen Sie die Übersicht über IAM-Bedingungen (Identity and Access Management), um die Grundlagen von bedingten IAM-Rollenbindungen zu verstehen.
- Sehen Sie sich die Ressourcenattribute an, die in einem Bedingungsausdruck verwendet werden können.
- Das Attribut „Ressourcenname“ kann den Zugriff auf die folgenden Google Cloud Dienste steuern:
- Apigee
- Application Integration
- Apigee API-Hub
- Sicherung und Notfallwiederherstellung
- BigQuery
- BigQuery Reservation API
- Bigtable
- Binärautorisierung
- Cloud Deploy
- Cloud Key Management Service
- Cloud Logging
- Cloud SQL
- Cloud Storage
- Compute Engine
- Dataform
- Cloud DNS
- Google Kubernetes Engine
- Firestore
- Cloud NGFW
- Integration Connectors
- Google Cloud Managed Service for Apache Kafka
- Netzwerksicherheitsintegration
- Parameter Manager
- Pub/Sub Lite
- Secret Manager
- Spanner
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwalten bedingter Rollenbindungen benötigen:
-
Zum Verwalten des Zugriffs auf Projekte: Projekt-IAM-Administrator (
roles/resourcemanager.projectIamAdmin) für das Projekt -
Zum Verwalten des Zugriffs auf Ordner: Folder Admin (
roles/resourcemanager.folderAdmin) für den Ordner -
Zum Verwalten des Zugriffs auf Projekte, Ordner und Organisationen: Organisationsadministrator (
roles/resourcemanager.organizationAdmin) für die Organisation -
Zum Verwalten des Zugriffs auf fast alle Google Cloud Ressourcen:
Sicherheitsadministrator (
roles/iam.securityAdmin) für das Projekt, den Ordner oder die Organisation, für die Sie den Zugriff verwalten möchten
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Verwalten von bedingten Rollenbindungen erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:
Erforderliche Berechtigungen
Die folgenden Berechtigungen sind zum Verwalten bedingter Rollenbindungen erforderlich:
-
Zum Verwalten des Zugriffs auf Projekte:
resourcemanager.projects.getIamPolicyfür das Projektresourcemanager.projects.setIamPolicyfür das Projekt
-
Zum Verwalten des Zugriffs auf Ordner:
-
resourcemanager.folders.getIamPolicyfür den Ordner -
resourcemanager.folders.setIamPolicyfür den Ordner
-
-
Zum Verwalten des Zugriffs auf Organisationen:
-
resourcemanager.organizations.getIamPolicyfür die Organisation -
resourcemanager.organizations.setIamPolicyfür die Organisation
-
Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.
Zugriff auf eine Gruppe von Ressourcen anhand von Ressourcennamenspräfixen gewähren
Mit einer bedingten Rollenbindung können Sie Hauptkonten Zugriff auf Ressourcen zuweisen, deren Ressourcennamen einem Präfix entsprechen, beispielsweise Compute Engine VM-Instanzen, deren Namen mit einem bestimmten String beginnen. Das Präfix für Ressourcennamen wird normalerweise zum Gruppieren von Ressourcen verwendet, die für bestimmte Zwecke vorgesehen sind oder bestimmte Attribute haben.
Angenommen, Sie führen Arbeitslasten auf bestimmten VM-Instanzen aus, die möglicherweise mit vertraulichen Gesundheitsdaten arbeiten. Andere nicht vertrauliche Arbeitslasten müssen im selben Projekt ausgeführt werden. Sie möchten sicherstellen, dass Ihre Entwickler eingeschränkten Zugriff auf VM-Instanzen haben, die mit vertraulichen Daten arbeiten. Dazu benennen Sie datensensible VM-Instanzen mit dem Präfix sensitiveAccess und andere VM-Instanzen mit dem Präfix devAccess. Anschließend verwenden Sie bedingte Rollenbindungen, um sicherzustellen, dass die Entwickler mit normalen devAccess-VM-Instanzen produktiv bleiben können, ohne dass ihnen Zugriff auf sensitiveAccess-VM-Instanzen gewährt wird.
Sie können zwar den Zugriff auch nur mit dem Bedingungsattribut resource.name verwalten, aber die Attribute resource.type und resource.service sind ebenfalls gebräuchlich. Mit diesen zusätzlichen Attributen verringern Sie die Wahrscheinlichkeit, dass eine Bedingung den Zugriff auf verschiedene Ressourcentypen mit ähnlichen Namen beeinträchtigt.
Außerdem können Sie den Umfang der Bedingung einschränken, sodass Hauptkonten weiterhin Berechtigungen in der Rolle verwenden können, um auf andere Ressourcentypen oder Dienste zuzugreifen.
Im Beispiel in diesem Abschnitt wird der Zugriff mit den Attributen resource.name und resource.type gesteuert. Weitere Informationen zu Bereichsbedingungen auf Containerebene finden Sie im Abschnitt Übernommene Bedingungen in diesem Dokument.
So weisen Sie Compute Engine-Laufwerken und -Instanzen in einem Projekt Zugriff anhand eines Namenspräfixes zu:
Console
Rufen Sie in der Google Cloud Console die Seite IAM auf.
Suchen Sie in der Liste der Hauptkonten das gewünschte Hauptkonto und klicken Sie auf den Button .
Suchen Sie im Bereich Berechtigungen bearbeiten die gewünschte Rolle, für die Sie eine Bedingung konfigurieren möchten. Klicken Sie dann unter IAM-Bedingung (optional) auf IAM-Bedingung hinzufügen.
Geben Sie im Bereich Bedingung bearbeiten einen Titel und eine optionale Beschreibung für die Bedingung ein.
Sie können einen Bedingungsausdruck entweder mit dem Builder für IAM-Bedingungen oder dem Bedingungseditor hinzufügen. Der Builder für IAM-Bedingungen bietet eine interaktive Oberfläche, in der Sie die gewünschte Bedingung, den Operator und andere Details zum Ausdruck auswählen können. Der Bedingungseditor bietet eine textbasierte Oberfläche zur manuellen Eingabe eines Ausdrucks mit der CEL-Syntax.
Tool zur Bedingungserstellung:
- Löschen Sie alle vorhandenen Bedingungsfelder aus dem Tool zur Bedingungserstellung. Das einzige Feld im Tool zur Bedingungserstellung sollte die Schaltfläche Hinzufügen sein.
- Erstellen Sie einen gruppierten Bedingungsausdruck, der als
trueausgewertet wird, wenn die Ressource ein Laufwerk ist, das mit dem angegebenen Präfix beginnt:- Klicken Sie auf das Drop-down-Menü Hinzufügen und dann auf Gruppierte Bedingungen.
- Wählen Sie im Drop-down-Menü Bedingungstyp die Option Ressource > Typ aus.
- Wählen Sie aus dem Drop-down-Menü Operator den Wert ist aus.
- Wählen Sie im Drop-Down-Menü Ressourcentyp die Option compute.googleapis.com/Disk aus.
- Klicken Sie direkt unter der Bedingung, die Sie gerade eingegeben haben, auf die erste Schaltfläche Hinzufügen, um dem Ausdruck eine weitere Klausel hinzuzufügen.
- Wählen Sie im Drop-down-Menü Bedingungstyp die Option Ressource > Name aus.
- Wählen Sie im Drop-down-Menü Operator die Option Beginnt mit aus.
- Geben Sie im Feld Wert den Ressourcennamen einschließlich des gewünschten Präfixes im entsprechenden Format ein. Verwenden Sie beispielsweise
projects/PROJECT_ID/region/ZONE_ID/disks/PREFIX, um Laufwerke im ProjektPROJECT_IDund in der ZoneZONE_IDzu identifizieren, deren Namen mitPREFIXbeginnen. - Klicken Sie links neben jeder Bedingung auf Und, damit beide Klauseln wahr sein müssen.
- Erstellen Sie einen gruppierten Bedingungsausdruck, der als
trueausgewertet wird, wenn die Ressource eine Instanz ist, die mit dem angegebenen Präfix beginnt:- Klicken Sie außerhalb der vorhandenen Bedingungsgruppe auf die Schaltfläche Hinzufügen und dann auf Gruppierte Bedingungen.
- Wählen Sie im Drop-down-Menü Bedingungstyp die Option Ressource > Typ aus.
- Wählen Sie aus dem Drop-down-Menü Operator den Wert ist aus.
- Wählen Sie im Drop-Down-Menü Ressourcentyp die Option compute.googleapis.com/Instance aus.
- Klicken Sie in derselben Bedingungsgruppe auf Hinzufügen.
- Wählen Sie im Drop-down-Menü Bedingungstyp die Option Ressource > Name aus.
- Wählen Sie im Drop-down-Menü Operator die Option Beginnt mit aus.
- Geben Sie im Feld Wert den Ressourcennamen mit dem gewünschten Präfix im entsprechenden Format ein. Verwenden Sie beispielsweise
projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX, um Instanzen im ProjektPROJECT_IDund in der ZoneZONE_IDzu identifizieren, deren Namen mitPREFIXbeginnen. - Der logische Operator, der die Bedingungen in der Gruppe verbindet, muss auf And festgelegt sein.
- Erstellen Sie einen gruppierten Bedingungsausdruck, der zu
trueausgewertet wird, wenn die Ressource kein Laufwerk und keine Instanz ist:- Klicken Sie außerhalb der vorhandenen Bedingungsgruppen auf die Schaltfläche Hinzufügen und dann auf Gruppierte Bedingungen.
- Wählen Sie im Drop-down-Menü Bedingungstyp die Option Ressource > Typ aus.
- Wählen Sie aus dem Drop-down-Menü Operator ist nicht aus.
- Wählen Sie im Drop-Down-Menü Ressourcentyp die Option compute.googleapis.com/Disk aus.
- Klicken Sie in derselben Bedingungsgruppe auf Hinzufügen.
- Wählen Sie im Drop-down-Menü Bedingungstyp die Option Ressource > Typ aus.
- Wählen Sie aus dem Drop-down-Menü Operator ist nicht aus.
- Wählen Sie im Drop-Down-Menü Ressourcentyp die Option compute.googleapis.com/Instance aus.
- Der logische Operator, der die Bedingungen in der Gruppe verbindet, muss auf And festgelegt sein.
Der Logikoperator, der alle Gruppen von Bedingungsausdrücken verbindet, muss Or sein.
Wenn Sie fertig sind, sollte das Tool zur Bedingungserstellung in etwa so aussehen:

Klicken Sie auf Speichern, um die Bedingung anzuwenden.
Sobald der Bereich Bedingung bearbeiten geschlossen wurde, klicken Sie im Bereich Berechtigungen bearbeiten noch einmal auf Speichern, um die Zulassungsrichtlinie zu aktualisieren.
Bedingungseditor:
Klicken Sie auf den Tab Bedingungseditor und geben Sie diesen Ausdruck ein:
(resource.type == "compute.googleapis.com/Disk" && resource.name.startsWith("projects/PROJECT_ID/zones/ZONE_ID/disks/PREFIX")) || (resource.type == "compute.googleapis.com/Instance" && resource.name.startsWith("projects/PROJECT_ID/zones/ZONE_ID/instances/PREFIX")) || (resource.type != "compute.googleapis.com/Disk" && resource.type != "compute.googleapis.com/Instance")