Attributreferenz für Cloud IAM Conditions

In diesem Thema werden die in einem Bedingungsausdruck unterstützten Attribute beschrieben.

Unterstützte Bedingungsattribute

Die folgende Tabelle fasst die unterstützten Attribute zusammen und gibt an, welche Google Cloud-Dienste die einzelnen Attribute erkennen:

Attribut Verwendung Unterstützte Google Cloud-Dienste

Attribut "Zugriffsebenen"

Zugriff über bestimmte Zugriffsebenen beschränken.

Eine Zugriffsebene ist ein berechnetes Attribut auf Grundlage von Standardattributen der Anfrage und des Anforderers, z. B. Quell-IP-Adresse, Geräteattribute, Uhrzeit und weiterem. Für die Zugriffsebene onNetwork kann es beispielsweise erforderlich sein, dass das Gerät, das die Anfrage stellt, aus einem bestimmten IP-Adressbereich stammt. Zugriffsebenen werden von den Administratoren der jeweiligen Organisation festgelegt.

Identity-Aware Proxy

Attribut "Datum/Uhrzeit"

Ablaufenden, geplanten oder zeitlich begrenzten Zugriff auf Google Cloud-Ressourcen festlegen.

Alle Google Cloud-Dienste

Attribute "Ziel-IP" und "Zielport"

Einschränkungen für die erwartete Ziel-IP-Adresse und/oder den Port einer Anfrage. Eine Compute Engine-VM-Instanz kann beispielsweise eine externe IP-Adresse bereitstellen, wie z. B. 10.0.0.2 , aber Port 22 kann nur für administrative Zwecke bereitgestellt werden.

Wird derzeit hauptsächlich für TCP-Weiterleitung mit Cloud Identity-Aware Proxy verwendet.

Identity-Aware Proxy

Weiterleitungsregelattribute

Geben Sie die Arten von Weiterleitungsregeln an, die ein Mitglied erstellen kann. Beispielsweise können Sie einem Mitglied erlauben, Weiterleitungsregeln für interne Google Cloud-Load Balancer zu erstellen, die Traffic verarbeiten, der innerhalb eines Google Cloud-Netzwerks entsteht, jedoch nicht für externe Google Cloud-Load Balancer, die Traffic aus dem Internet verarbeiten.

Ressourcenattribute

Der Ressourcenname, der Ressourcentyp und die Ressourcedienstattribute werden verwendet, um den Umfang einer durch die Rollenbindung bereitgestellten Zugriffsberechtigung auf einen Teil der Ressourcen in der Google Cloud-Ressource einzuschränken, mit der die Cloud IAM-Richtlinie verbunden ist.

  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine

Attribute "URL-Pfad" und "Host"

Legen Sie Beschränkungen für den erwarteten URL-Pfad und/oder Host einer Anfrage fest. Eine Einschränkung könnte beispielsweise angeben, dass https://example.com die Hauptanwendung ist, die von einer allgemeinen Nutzerdomain aufgerufen werden kann, während https://hr.example.com/admin für den Aufruf einer Seite in der Anwendung verwendet wird, auf die nur Personalabteilungs-Administratoren zugreifen können.

Identity-Aware Proxy

Einige Arten von Google Cloud-Ressourcen lassen Bedingungen in ihren Cloud IAM-Richtlinien nicht zu. Sie können jedoch bedingte Rollenbindungen auf Organisations-, Ordner- oder Projektebene hinzufügen und andere Ressourcen übernehmen diese Rollenbindungen über die Ressourcenhierarchie. Weitere Informationen finden Sie unter Ressourcen, die bedingte Rollenbindungen akzeptieren.

Wenn Sie Attribute auf Organisations-, Ordner- oder Projektebene verwenden, beachten Sie Folgendes: Wenn Sie eine Anfrage an einen Dienst senden und der Dienst ein Attribut in einer Bedingung nicht erkennt, wird die Bedingung immer als false ausgewertet. Beispiel: Die Bedingung destination.port == 21 wird für BigQuery immer als false ausgewertet, da BigQuery die Ziel-IP- / Port-Attribute nicht erkennt.

Verwenden Sie zur Vermeidung dieses Problems die Ressourcenattribute auf dieser Seite, um den Gültigkeitsbereich der Bedingung zu begrenzen. Beispiel: Die Bedingung resource.service != "iap.googleapis.com" || destination.port == 21 wird für jeden Dienst außer dem Identity-Aware Proxy mit true ausgewertet. Für den Identity-Aware Proxy dagegen überprüft die Bedingung den Zielport.

Attribut "Zugriffsebenen"

Über das Attribut "Zugriffsebenen" können Nutzer eine Bedingung festlegen, die erfordert, dass eine Anfrage einer oder mehreren bestimmten Zugriffsebenen entspricht, um autorisiert zu werden.

Das Zugriffsebenenattribut wird von Attributen der Anfrage abgeleitet, z. B. von der Quell-IP-Adresse, Geräteattribute, Uhrzeit und weiteren. Beispielsweise kann eine Zugriffsebene mit dem Namen fullyTrusted voraussetzen, dass das Gerät, von dem die Anfrage gesendet wird, dem Unternehmen gehört und über eine Bildschirmsperre verfügt. Für die Zugriffsebene onNetwork kann es erforderlich sein, dass das Gerät, von dem aus die Anfrage gesendet wird, aus einem bestimmten IP-Adressbereich stammt.

Weitere Informationen über Zugriffsebenen finden Sie in der Dokumentation zu Access Context Manager.

Dieses Attribut ist im Identity-Aware Proxy als nicht öffentliche Betaversion verfügbar.

request.auth.access_levels Attribut

Attributvariable request.auth.access_levels
Attributtyp Liste mit Strings
Unterstützte Operatoren in
Unterstützter Operand String
Diskussion

Auf der rechten Seite wird die Variable request.auth.access_levels angezeigt und auf der linken Seite des Operators in wird ein String angezeigt, der einen vollständigen Namen der definierten Zugriffsebene darstellt.

Der vollständige Name einer Zugriffsebene folgt diesem Muster:
"accessPolicies/<policyNumber>/accessLevels/<shortName>"

Hinweis: Beim String einer Zugriffsebene wird zwischen Groß- und Kleinschreibung unterschieden. Er muss genau dem entsprechen, was in Access Context Manager konfiguriert wurde, damit die gewünschte Wirkung erzielt wird. "accessPolicies/199923665455/accessLevels/CorpNet" ist beispielsweise ein gültiges Stringliteral, das im Ausdruck verwendet werden könnte. Mit "accessPolicies/199923665455/accesslevels/CorpNet" wird jedoch nicht die gewünschte Wirkung erzielt.

Beispiel

"accessPolicies/199923665455/accessLevels/CorpNet"
in request.auth.access_levels

Attribut "Datum/Uhrzeit"

Mit dem Attribut "Datum/Uhrzeit" legen Sie ablaufenden, geplanten oder zeitlich begrenzten Zugriff auf Google Cloud-Ressourcen fest.

Dieses Bedingungsattribut wird von allen Google Cloud-Diensten unterstützt.

Unterstützte grundlegende Funktionen und Operatoren

Die für das Datums- / Uhrzeitattribut verwendete Attributvariable lautet request.time und ist vom Typ Zeitstempel. Sie können Strings auch in die Typen Zeitstempel und Dauer umwandeln.

Unterstützte grundlegende Funktionen Typ Beschreibung
date String --> Zeitstempel

Funktion: Konvertiert einen String in einen Zeitstempel.
Parameter: String im Format YYYY-MM-DD , wo YYYY das Jahr, MM der zweistellige Monat und DD der zweistellige Tag ist. Der resultierende Zeitstempel enthält das angegebene Datum und die Uhrzeit 00:00:00.000 UTC.

Beispiel:

date("2020-02-01")
Ein Zeitstempel, der das Datum 2020-02-01 und die Uhrzeit 00:00:00.000 UTC darstellt.

duration String -> Dauer

Funktion: Wandelt einen String in eine Dauer um.
Parameter: String mit einer Anzahl von Sekunden, gefolgt von s

Beispiele:

duration("90s")
Eine Dauer, die 1,5 Minuten entspricht.

duration("2592000s")
Eine Dauer, die 30 Tage darstellt.

timestamp

String --> Zeitstempel

Funktion: Konvertiert einen String in einen Zeitstempel.
Parameter: String im UTC-Format (RFC 3339).

Beispiele:

timestamp("1985-04-12T23:20:50.52Z")
Dies stellt die Umwandlung des Zeitstempels 23 Uhr, 20 Minuten und 50,52 Sekunden am 12. April 1985 in UTC dar.

timestamp("1996-12-19T16:39:57-08:00")
Dies stellt die Umwandlung des Zeitstempels 16 Uhr, 39 Minuten und 57 Sekunden am 19. Dezember 1996 mit einer Verschiebung von -08:00 Stunden gegenüber UTC dar. Beachten Sie, dass dies 1996-12-20T00:39:57Z in UTC entspricht. Diese Verschiebung stellt nicht die Zeitzonenverschiebung dar. Beispielsweise beträgt die Verschiebung für Pacific Standard Time -08:00 im Winter und aufgrund der Sommerzeit -07:00 im Sommer.

Wichtiger Hinweis:
Der String muss der Formatanforderung für einen UTC-String entsprechen. Wenn ein String nicht dem UTC-Format entspricht, kann die Funktion timestamp() ihn nicht in einen Zeitstempelwert konvertieren. Entsprechend führt die Bedingungsevaluierung für den Ausdruck mit timestamp() dazu, dass die Zugriffsprüfung verweigert wird.

<, <=, >, >=

(Zeitstempel, Zeitstempel) -> boolesch

Funktion: Allgemeiner Vergleich mit dem Typ "Zeitstempel".

Beispiele:

request.time < timestamp("2018-04-12T00:00:00.00Z")
request.time <= timestamp("2018-04-12T00:00:00.00Z")
request.time > timestamp("2018-04-12T00:00:00.00Z")
request.time >= timestamp("2018-04-12T00:00:00.00Z")
Mit diesen Ausdrücken wird der Vergleich der Anfragezeit mit einem bestimmten Zeitstempel festgelegt, hier dem 12. April 2018 in UTC. Wird häufig verwendet, um die Beschränkung "Startzeit" oder "Ablaufzeit" für die Rollenzuweisung festzulegen.

Hinweis: Bei einer zeitlichen Genauigkeit im Millisekundenbereich hat die Einbeziehung des Gleichheits- und des Ungleichheitsvergleichs (==, !=) keine signifikante Auswirkung.

+, - (Zeitstempel, Dauer) -> Zeitstempel

Funktion: Fügen Sie eine Dauer aus einem Zeitstempel hinzu oder subtrahieren Sie sie.

Beispiele:

timestamp("2018-04-12T14:30:00.00Z") + duration("1800s")
Findet den Zeitstempel, der 30 Minuten nach 14:30 Uhr GMT am 12. April 2018 liegt.

timestamp("2018-04-12T14:30:00.00Z") - duration("5184000s")
Findet den Zeitstempel, der 30 Minuten nach 14:30 Uhr GMT am 12. April 2018 liegt.

Unterstützte erweiterte Funktionen und Operatoren

Die für das Datums- / Uhrzeitattribut verwendete Attributvariable lautet request.time und ist vom Typ Zeitstempel.

Unterstützte erweiterte Funktionen Typ Beschreibung

<, <=, >, >=, ==, !=

(Ganzzahl, Ganzzahl) --> boolesch

Funktion: Allgemeiner Vergleich mit dem Typ "Ganzzahl".

Diskussion:
Diese Gruppe von Vergleichsoperatoren für Ganzzahlen wird hauptsächlich für die verbleibenden "erweiterten Funktionen" mit Zeitstempelfunktionen verwendet. Alle diese (im Rest dieser Tabelle definierten) Funktionen konvertieren einen bestimmten Teil des Zeitstempelwerts in einen Int. Für jede erweiterte Funktion werden weitere gängig verwendete Beispiele bereitgestellt.

getDate, getDayOfMonth, getDayOfWeek, getDayOfYear

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktionen:
getDate: Ruft den Tag des Monats mit einem auf eins basierenden Index aus dem Zeitstempelwert ab. Mit anderen Worten, der erste Tag des Monats ist 1.

getDayOfMonth: Ruft den Tag des Monats mit einem auf null basierenden Index aus dem Zeitstempelwert ab. Mit anderen Worten, der erste Tag des Monats ist 0.

getDayOfWeek: Ruft den Wochentag mit einem auf null für Sonntag basierenden Index aus dem Zeitstempelwert ab. Mit anderen Worten, Sonntag ist (0), Montag (1), Samstag (6) usw.

getDayOfYear: Ruft den Tag des Jahres mit einem auf null basierenden Index aus dem Zeitstempelwert ab. Mit anderen Worten, der erste Tag des Jahres ist 0.

Parameter:
String als Zeitzone: Konvertierung beruht auf dem Datum mit Zeitzone. Hinweis: Wenn die Zeitzone nicht angegeben wurde, beruht die Konvertierung auf dem Datum in UTC.

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Beispiel:

request.time.getDayOfWeek() > 0 && request.time.getDayOfWeek() < 6
Die Evaluierung dieses Ausdrucks lautet "true", wenn die eingehende Anfrage zwischen Montag und Freitag nach UTC-Zeit gesendet wurde.

Beispiel:

request.time.getDayOfWeek("Europe/Berlin") > 0 && request.time.getDayOfWeek(Europe/Berlin") < 6
Die Evaluierung dieses Ausdrucks lautet "true", wenn die eingehende Anfrage zwischen Montag und Freitag in der Zeitzone von Berlin gesendet wurde.

Beispiel:

request.time.getDayOfYear("America/Los_Angeles") >= 0 && request.time.getDayOfYear("America/Los_Angeles") < 5
Die Evaluierung dieses Ausdrucks lautet "true", wenn die eingehende Anfrage in den ersten 5 Tagen des Jahres in der Zeitzone von Los Angeles gesendet wurde.

getFullYear

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktion: Ruft das Jahr des Datums ab.

Parameter:
Version 1: Kein Parameter; aus dem Datum in UTC
Version 2: Zeitzonenstring; aus dem Datum in der Zeitzone

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Beispiel:

request.time.getFullYear("America/Los_Angeles") == 2018
Die Evaluierung dieses Ausdrucks lautet "true", wenn die eingehende Anfrage im Jahr 2018 in der Zeitzone von Los Angeles gesendet wurde.

Beispiel:

request.time.getFullYear() < 2020
Die Evaluierung dieses Ausdrucks lautet "true", wenn die eingehende Anfrage vor Ende des Jahres 2019 in UTC gesendet wurde.

getHours

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktion: Ruft die Stundenzahl aus dem Datum ab; die Werte reichen von 0 bis 23.

Parameter:
Version 1: Kein Parameter; aus dem Datum in UTC
Version 2: Zeitzonenstring; aus dem Datum in der Zeitzone

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Beispiel:

request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17
Dieser Ausdruck gibt eine Arbeitszeitbedingung an. Er wird mit "true" ausgewertet, wenn die Anfrage zwischen 9:00 und 17:00 Uhr in der Zeitzone von Berlin gesendet wurde.

Hinweis:

Durch Kombination von getHours() mit getDayofWeek() lässt sich eine Bedingung für gesetzliche Arbeitszeiten festlegen, z. B. um eine Zuständigkeitsanforderung zu erfüllen.

getMilliseconds

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktion: Ruft die Millisekunden in einer Sekunde aus dem Zeitstempel ab. Die Werte reichen von 0 bis 999.

Parameter:
Version 1: Kein Parameter; aus dem Datum in UTC
Version 2: Zeitzonenstring; aus dem Datum in der Zeitzone

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Hinweis:

Diese Funktion ist nur begrenzt nützlich, da sie semantisch nur eingeschränkt verwendet werden kann.

getMinutes

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktion: Ruft die Minuten in einer Stunde aus dem Zeitstempel ab. Die Werte reichen von 0 bis 59.

Parameter:
Version 1: Kein Parameter; aus dem Datum in UTC
Version 2: Zeitzonenstring; aus dem Datum in der Zeitzone

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Hinweis:

Diese Funktion ist nur begrenzt nützlich, da sie semantisch nur eingeschränkt verwendet werden kann.

getMonth

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktion: Ruft den Monat eines Jahres aus dem Zeitstempel ab. Die Werte reichen von 0 bis 11.

Parameter:
Version 1: Kein Parameter; aus dem Datum in UTC
Version 2: Zeitzonenstring; aus dem Datum in der Zeitzone

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Beispiel:

request.time.getMonth("America/Los_Angeles") == 3
Die Evaluierung dieses Ausdrucks lautet "true", wenn die eingehende Anfrage im April 2018 in der Zeitzone von Los Angeles gesendet wurde.

getSeconds

Zeitstempel.() -> Ganzzahl

Zeitstempel.(String) -> Ganzzahl

Funktion: Ruft die Sekunden einer Minute aus dem Zeitstempel ab. Die Werte reichen von 0 bis 59.

Parameter:
Version 1: Kein Parameter; aus dem Datum in UTC
Version 2: Zeitzonenstring; aus dem Datum in der Zeitzone

Weitere Informationen zu gültigen Zeitzonenstrings finden Sie unter Unterstützte Zeitzonenwerte.

Hinweis:

Diese Funktion ist nur begrenzt nützlich, da sie semantisch nur eingeschränkt verwendet werden kann.

Attribute "Ziel-IP" und "Zielport"

Mit den Attributen "Ziel-IP" und "Zielport" können Nutzer Einschränkungen für die erwartete Ziel-IP-Adresse und/oder den Zielport einer Anfrage festlegen. Eine Compute Engine-VM-Instanz kann beispielsweise eine externe IP-Adresse 10.0.0.1an Port 3001 für die allgemeine Nutzung bereitstellen und die IP-Adresse 10.0.0.2 und Port 22 werden nur für administrative Zwecke bereitgestellt.

Weitere Informationen zur TCP-Weiterleitung finden Sie in den Identity-Aware Proxy-Dokumenten.

Dieses Attribut wird im Identity-Aware Proxy unterstützt.

destination.ip Attribut

Attributvariable destination.ip
Attributtyp String
Unterstützte Operatoren ==, !=
Unterstützter Operand String
Diskussion

Die Variable destination.ip muss ein String sein, der eine IP-Adresse im IPv4-Format darstellt.

Hinweis: Die Funktionen startsWith(<prefix string of IP>) und die endsWith(<suffix string of IP>) sind nicht für die Verwendung mit dem Attribut destination.ip vorgesehen. Das Festlegen einer Bedingung wie destination.ip.startsWith(<prefix string of IP>) führt bei der Ausführung eines Vorgangs vom Typ setIamPolicy Vorgangs nicht zu Syntaxfehlern. Aufgrund von unvorhergesehenen Ergebnissen wird jedoch davon abgeraten. Es empfiehlt sich nicht, einen Präfixabgleich des IP-Strings für eine Überprüfung des IP-Adressbereichs für CIDRs zu verwenden.

Beispiele

destination.ip == "10.0.0.1"

destination.ip != "10.0.0.1"

destination.port Attribut

Attributvariable destination.port
Attributtyp Integer
Unterstützte Operatoren ==, !=, <, <=, >, >=
Unterstützter Operand Integer
Diskussion

Die Variable destination.port muss eine Ganzzahl sein, die eine TCP-Portnummer darstellt.

Beispiele

destination.port == 21

destination.port < 3001

Weiterleitungsregelattribute

Mit den Weiterleitungsregelattributen können Sie die Typen von Weiterleitungsregeln angeben, die ein Mitglied erstellen kann. Beispielsweise können Sie einem Mitglied erlauben, Weiterleitungsregeln für interne Google Cloud-Load Balancer zu erstellen, die Traffic verarbeiten, der innerhalb eines Google Cloud-Netzwerks entsteht, jedoch nicht für externe Google Cloud-Load Balancer, die Traffic aus dem Internet verarbeiten.

Beim Cloud Load Balancing wirken sich die Weiterleitungsregelattribute nicht darauf aus, dass andere Komponenten eines Google Cloud-Lastenausgleichs wie Back-End-Dienste, Ziel-Proxys, Systemdiagnosen und URL-Zuordnungen erstellet werden können.

Die Weiterleitungsregelattribute werden in den folgenden Google Cloud-Diensten unterstützt:

Unterstützte Funktionen

Unterstützte Funktionen Typ Beschreibung
compute.isForwardingRuleCreationOperation() () -> boolesch

Funktion: Prüft, ob die Anfrage eine Weiterleitungsregel erstellt.

Beispiele: Sehen Sie sich die Beispiele für compute.matchLoadBalancingSchemes() an.

compute.matchLoadBalancingSchemes() Array.(String) -> boolesch

Funktion: Überprüfen Sie, ob die Anfrage einen der angegebenen Typen von Load-Balancing-Schemas betrifft. Die ID für jedes Load-Balancing-Schema sowie Details zu jedem Schema finden Sie unter Cloud IAM Conditions in Google Cloud-Load Balancers verwenden.

Parameter: String-Array

Beispiel:


!compute.isForwardingRuleCreationOperation() || (
      compute.isForwardingRuleCreationOperation() &&
      compute.matchLoadBalancingSchemes([
        'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
      ]))
    )
  • Wenn die Anfrage keine Weiterleitungsregel erstellt, weisen Sie dem Mitglied die Rolle zu.
  • Wenn die Anfrage eine Weiterleitungsregel erstellt, weisen Sie die Rolle nur dann zu, wenn die Weiterleitungsregel ein Lastenausgleichsschema INTERNAL, INTERNAL_MANAGED oder INTERNAL_SELF_MANAGED betrifft.

Ressourcenattribute

Die Attribute "Ressourcenname", "Ressourcentyp" und "Ressourcendienst" dienen in der Regel dazu, den Umfang der durch die Rollenbindung erteilten Zugriffsberechtigungen einzuschränken. Wenn eine Rolle Berechtigungen enthält, die für verschiedene ressourcenspezifische Attribute gelten, können ressourcenbasierte Bedingungen verwendet werden, um für bestimmte Typen oder für bestimmte Dienste nur eine Teilmenge der Rollenberechtigungen zu gewähren.

Die Ressourcenattribute werden in den folgenden Google Cloud-Diensten unterstützt:

  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Cloud Key Management Service
  • Resource Manager (nur Ressourcentyp und Ressourcendienst)

Weitere Informationen zu den Ressourcenattributen, die Sie für jeden einzelnen Dienst verwenden können, finden Sie unter Ressourcenattribute für Cloud IAM Conditions.

Werte aus Ressourcennamen extrahieren

Sie können die Funktion extract() verwenden, um einen Wert aus einem Ressourcennamen zu extrahieren. Mit dieser Funktion können Bedingungsausdrücke auf einen beliebigen Teil des Ressourcennamens verweisen.

Um einen Wert zu extrahieren, verwenden Sie die extract() -Funktion und stellen eine Extraktionsvorlage bereit, die den zu extrahierenden Teil des Ressourcennamens angibt. Beispielsweise können Sie die Vorlage projects/{project}/ verwenden, um eine Projekt-ID aus dem Ressourcennamen einer Compute Engine-VM-Instanz zu extrahieren.

Eine Extraktionsvorlage enthält die folgenden Teile:

  • Eine ID in geschweiften Klammern, die den zu extrahierenden Teilstring kennzeichnet. Wählen Sie eine kurze, aussagekräftige ID aus, aus der hervorgeht, welchen Wert Sie extrahieren möchten. Verwenden können Sie hierzu Groß- und Kleinbuchstaben von A bis Z; numerische Ziffern; Bindestriche (-); und Unterstriche (_).

    In der Vorlage projects/{project}/ lautet die ID project.

  • (Optional) EinPräfix , das vor dem zu extrahierenden Teilstring erscheinen muss.

    In der Vorlage projects/{project}/ lautet das Präfix projects/.

  • (Optional) Ein Suffix, das nach dem zu extrahierenden Teilstring erscheinen muss.

    In der Vorlage projects/{project}/ lautet das Suffix /.

Die Funktion extract() gibt unterschiedliche Werte zurück, je nachdem, ob die Extraktionsvorlage ein Präfix, ein Suffix oder beides beinhaltet:

beinhaltet ein Präfix beinhaltet ein Suffix Extrahierter Wert
Der gesamte Ressourcenname
check Die Zeichen nach dem ersten Vorkommen des Präfixes oder ein leerer String, wenn hinter dem Präfix keine Zeichen stehen
check Die Zeichen vor dem ersten Vorkommen des Suffixes oder ein leerer String, wenn vor dem Suffix keine Zeichen stehen
check check Die Zeichen zwischen dem ersten Vorkommen des Präfixes und dem ersten nachfolgenden Auftreten des Suffixes oder ein leerer String, wenn zwischen dem Präfix und dem Suffix keine Zeichen stehen

Wenn Sie ein Präfix oder Suffix angeben, das nicht im Ressourcennamen enthalten ist, oder wenn das Suffix nur vor dem Präfix angezeigt wird, gibt die extract()-Funktion null zurück.

Die folgenden Beispiele zeigen die Ausgabe mehrerer verschiedener Extraktionsvorlagen. In diesen Beispielen ist die Ressource ein Cloud Storage-Objekt mit dem Namen projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876:

Extraktionsvorlage Ausgabe
/order_date={date}/ 2019-11-03
buckets/{name}/ acme-orders-aaa
/orders/{empty}order_date Leerer String
{start}/data_lake projects/_/buckets/acme-orders-aaa
orders/{end} order_date=2019-11-03/aef87g87ae0876
{all} projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876
/orders/{none}/order_date= null
/orders/order_date=2019-11-03/{id}/data_lake null

Sie können auch die Datums- / Uhrzeitfunktionen und -Operatoren auf dieser Seite verwenden, um den extrahierten Wert in einen Zeitstempel umzuwandeln. Beispiele finden Sie unter Ressourcenbasierten Zugriff konfigurieren.

resource.name Attribut

Attributvariable resource.name
Attributtyp String
Unterstützte Operatoren startsWith(), endsWith(), extract(), ==, !=
Unterstützter Operand

String

Jeder Ressourcentyp verwendet ein bestimmtes Format für den Ressourcennamen. Eine Liste der Formate finden Sie unter Ressourcennamensformat.

Diskussion

resource.name enthält den relativen Ressourcennamen für die Zielressource in der Anfrage. Der relative Ressourcenname ist ein URI-Pfad ohne vorangestellten Schrägstrich (/).

Bei der Funktion startsWith() wird das Präfix Stringliteral gegen resource.name ausgewertet.

Bei der Funktion endsWith() wird das Suffix-Stringliteral gegen resource.name ausgewertet.

Die Funktion extract() verwendet eine Extraktionsvorlage, um einen Teil von resource.name zu extrahieren. Weitere Informationen finden Sie unter Werte aus Ressourcennamen extrahieren auf dieser Seite.

Die Operatoren == und != dienen zum Vergleich mit dem gesamten resource.name oder einem extrahierten Teil von resource.name.

Beispiele

Beispiel 1 (für eine Compute Engine-VM-Instanz):


resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")

Beispiel 2 (für einen Cloud Storage-Bucket):


resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")

Beispiel 3 (für ein Cloud Storage-Objekt):


resource.name.endsWith(".jpg")

Beispiel 4 (für mehrere Ressourcentypen):


resource.name.extract("projects/{project}/")

Beispiel 5 (für einen Cloud Storage-Bucket):


resource.name != "projects/_/buckets/secret-bucket-123"

resource.service Attribut

Attributvariable resource.service
Attributtyp String
Unterstützte Operatoren ==, !=
Unterstützter Operand String


Eine Liste aller unterstützten ressource.service-Stringliterale finden Sie unter Ressourcenattribute für Cloud IAM-Bedingungen.

Diskussion Die optionale Variable resource.serviceresource.type ist für Gleichheits- und Ungleichheitsvergleiche vorgesehen.

Hinweis: Die Funktionen .startsWith(<prefix string>) und .endsWith(<suffix string>) sind nicht für die Verwendung mit dem Attribut resource.service vorgesehen. Hiervon wird aufgrund unerwarteter Evaluierungsergebnisse abgeraten.

Beispiele

Beispiel 1:


resource.service == "compute.googleapis.com"

resource.type Attribut

Attributvariable resource.type
Attributtyp String
Unterstützte Operatoren ==, !=
Unterstützter Operand String


Eine Liste aller unterstützten ressource.type-Stringliterale finden Sie unter Ressourcenattribute für Cloud IAM-Bedingungen.

Diskussion Die optionale Variable resource.typeresource.type ist für Gleichheits- und Ungleichheitsvergleiche vorgesehen.

Hinweis: Die Funktionen .startsWith(<prefix string>) und .endsWith(<suffix string>) sind nicht für die Verwendung mit dem Attribut resource.type vorgesehen. Hiervon wird aufgrund unerwarteter Evaluierungsergebnisse abgeraten.

Beispiele

Beispiel 1:


resource.type != "compute.googleapis.com/Image"

Beispiel 2:


(resource.type == "compute.googleapis.com/Image" ||
resource.type == "compute.googleapis.com/Disk")

Attribute "URL-Pfad" und "Host"

Die Attribute "URL-Pfad" und "Host" ermöglichen es Nutzern, Einschränkungen für den erwarteten URL-Pfad und/oder Host einer Anfrage festzulegen. Eine Einschränkung könnte beispielsweise angeben, dass https://example.com die Hauptanwendung ist, die sich von einer allgemeinen Nutzerdomain aufrufen lässt, , während https://hr.example.com/admin für den Zugriff auf eine Seite in der Anwendung verwendet wird, auf die nur Administratoren des Personalwesens zugreifen können.

Dieses Attribut wird im Identity-Aware Proxy unterstützt.

request.path Attribut

Attributvariable request.path
Attributtyp String
Unterstützte Operatoren ==, startsWith(), endsWith()
Unterstützte Operanden/Parameter
  • STRING ==
  • Konstanter Präfixstring startsWith()
  • Konstanter Suffixstring: endsWith()
Diskussion Hinweis: Der Operator != wird nicht empfohlen. Anstelle eines negativen Vergleichs wie

request.path != "/admin"
wird das Verwenden des Präfixabgleichs empfohlen. Beispiel:

! request.path.startsWith("/admin")
Auf diese Weise sind alle URL-Pfade, denen "/admin" übergeordnet ist, z. B. "/admin/payroll/", vor unbeabsichtigten Zugriffen geschützt.
Beispiele

Beispiel 1:


request.path == "/admin"

request.path == "/admin/payroll"

Der im Gleichheitsvergleich (====) in den zwei Beispielen oben verwendete String muss gemäß den Path-Standards als URL-Pfad formatiert sein.

Beispiel 2:


request.path.startsWith("/admin")

In der Funktion wird ein String verwendet, der das Präfix eines URL-Pfads darstellt.

Beispiel 3:


request.path.endsWith("/payroll.js")

In der Funktion wird ein String verwendet, der das Suffix eines URL-Pfads darstellt.

request.host Attribut

Attributvariable request.host
Attributtyp String
Unterstützte Operatoren ==, endsWith()
Unterstützte Operanden/Parameter
  • STRING ==
  • Konstanter Suffixstring: endsWith()
Diskussion Die Funktion .startsWith(<prefix string>) ist nicht für die Verwendung mit dem Attribut request.host vorgesehen. Das Festlegen einer Bedingung wie request.host.startsWith(<prefix string>) führt nicht zu Syntaxfehlern beim Ausführen eines setIamPolicy-Vorgangs, wird jedoch aufgrund unerwarteter Ergebnisse nicht empfohlen. Ebenso wird auch != nicht empfohlen.
Beispiele

Beispiel 1:


request.host == "www.example.com"

request.host == "hr.example.com"

Der im Gleichheitsvergleich (====) in den zwei Beispielen oben verwendete String muss als URL-String für den Hostnamen einer Website formatiert sein.

Beispiel 2:


request.host.endsWith("example.com")

Ein String, der das Suffix eines Hostnamens einer Website darstellt.