Documentation de référence sur les attributs pour les conditions Cloud IAM

Cet article décrit les attributs disponibles dans une expression de condition.

Attributs de condition disponibles

Les sections suivantes récapitulent les attributs disponibles et indiquent les services Google Cloud qui reconnaissent chaque attribut.

Attributs de ressource

Les attributs suivants sont liés à la ressource qui fait l'objet de la requête.

Attribut Récapitulatif d'utilisation Services Google Cloud compatibles

Attribut du service de ressource

Gérez l'accès en fonction du service Google Cloud utilisé.
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Cloud IAP
  • Cloud Key Management Service
  • Resource Manager (type de ressource et service de ressource uniquement)
  • Secret Manager

Attribut du type de ressource

Gérez l'accès en fonction du type de ressource.

Attribut du nom de ressource

Gérez l'accès en fonction du nom de la ressource.

Pour plus d'informations sur les attributs de ressource, consultez la section Attributs de ressource sur cette page.

Attributs de requête

Les attributs suivants sont liés aux détails de la requête.

Attribut Récapitulatif d'utilisation Services Google Cloud compatibles

Attribut de niveaux d'accès

Gérez l'accès en fonction de niveaux d'accès spécifiques.

Un niveau d'accès est un attribut calculé en fonction des attributs bruts d'une requête et de son origine, tels que l'adresse IP d'origine, les attributs de l'appareil, l'heure de la journée, etc. Par exemple, un niveau d'accès onNetwork peut exiger que l'appareil à l'origine de la requête provienne d'une plage d'adresses IP spécifique. Les niveaux d'accès sont définis par les administrateurs de l'organisation.

Cloud IAP

Attributs d'API

Gérez l'accès en fonction des données fournies par une API ou un service Google Cloud spécifique.

Cloud Storage

Attributs de date et d'heure

Définissez un accès planifié, de durée limitée ou pouvant expirer pour les ressources Google Cloud.

Tous les services Google Cloud

Attributs d'adresse IP et de port de destination

Gérez l'accès en fonction de l'adresse IP et/ou du port de destination d'une requête. Par exemple, une instance de machine virtuelle (VM) Compute Engine peut exposer une adresse IP externe, telle que 10.0.0.2, mais le port 22 peut être exposé pour une utilisation administrative uniquement.

L'utilisation actuelle concerne principalement le transfert TCP Identity-Aware Proxy.

Cloud IAP

Attributs de règle de transfert

Spécifiez les types de règles de transfert qu'un membre peut créer. Par exemple, vous pouvez autoriser un membre à créer des règles de transfert pour les équilibreurs de charge Google Cloud internes, qui gèrent le trafic provenant d'un réseau Google Cloud, mais pas pour les équilibreurs de charge Google Cloud externes qui gèrent le trafic provenant d'Internet.

Attributs de chemin/nom d'hôte d'URL

Gérez l'accès en fonction du chemin et/ou de l'hôte de l'URL d'une requête. Par exemple, une condition peut spécifier que https://example.com est l'application principale à laquelle un domaine général d'utilisateurs peut accéder, tandis que https://hr.example.com/admin permet d'accéder à une page de l'application uniquement accessible par les administrateurs des ressources humaines.

Cloud IAP

Pour plus d'informations sur les attributs de requête, consultez la section Attributs de requête sur cette page.

Compatibilité avec les conditions héritées

Certains types de ressources Google Cloud n'acceptent pas de conditions dans leurs stratégies IAM. Toutefois, vous pouvez ajouter des liaisons de rôles conditionnelles au niveau de l'organisation, du dossier ou du projet. Les autres ressources hériteront de ces liaisons via la hiérarchie de ressources. Pour en savoir plus, consultez la page Ressources acceptant les liaisons de rôles conditionnelles.

Lorsque vous utilisez des attributs au niveau de l'organisation, du dossier ou du projet, n'oubliez pas que si vous envoyez une requête à un service, et que ce service ne reconnaît pas un attribut dans une condition, celle-ci est toujours définie sur false. Par exemple, la condition destination.port == 21 est toujours définie sur false pour BigQuery, car BigQuery ne reconnaît pas les attributs d'adresse IP et de port de destination.

Afin d'éviter ce problème, utilisez les attributs de ressource sur cette page afin de limiter le champ d'application de la condition. Par exemple, la condition resource.service != "iap.googleapis.com" || destination.port == 21 est définie sur true pour chaque service, sauf Identity-Aware Proxy. En revanche, pour Identity-Aware Proxy, la condition vérifie le port de destination.

Attributs de ressource

En général, les attributs "nom de ressource", "type de ressource" et "service de ressource" permettent de changer le niveau d'accès accordé par la liaison de rôle. Lorsqu'un rôle contient des autorisations qui s'appliquent à différents attributs spécifiques aux ressources, des conditions basées sur les ressources peuvent servir à accorder un sous-ensemble d'autorisations de rôle pour un ou plusieurs types et services spécifiques.

Les attributs de ressource sont compatibles avec les services Google Cloud suivants :

  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Cloud IAP
  • Cloud Key Management Service
  • Resource Manager (type de ressource et service de ressource uniquement)
  • Secret Manager

Pour plus d'informations sur les attributs de ressource que vous pouvez utiliser pour chaque service, consultez la page Attributs de ressource pour les conditions Cloud IAM.

Attribut resource.service

L'attribut resource.service vous permet de définir une condition en fonction du service Google Cloud utilisé. Par exemple, vous pouvez définir une condition limitant l'accès d'un utilisateur aux ressources qui utilisent le service cloudresourcemanager.googleapis.com.

Variable d'attribut resource.service
Type d'attribut Chaîne
Opérateurs compatibles ==, !=
Opérande compatible Chaîne


Pour obtenir la liste de tous les littéraux de chaîne de service de ressources compatibles, consultez la page Attributs de ressource pour les conditions Cloud IAM.

Discussion La variable resource.service, si elle est utilisée, est destinée à effectuer des comparaisons d'égalité ou d'inégalité.

Remarque : Les fonctions .startsWith(<prefix string>) et .endsWith(<suffix string>) ne sont pas destinées à être utilisées avec l'attribut resource.service. Leur utilisation n'est pas recommandée en raison de résultats d'évaluation inattendus.

Exemples

Exemple 1 :


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

Attribut resource.type

L'attribut resource.type vous permet de définir une condition en fonction du type de la ressource. Par exemple, vous pouvez définir une condition limitant l'accès d'un utilisateur aux ressources du type storage.googleapis.com/Object.

Variable d'attribut resource.type
Type d'attribut Chaîne
Opérateurs compatibles ==, !=
Opérande compatible Chaîne


Pour obtenir la liste de tous les littéraux de chaîne de type de ressource compatibles, consultez la page Attributs de ressource pour les conditions Cloud IAM.

Discussion La variable resource.type, si elle est utilisée, est destinée à effectuer des comparaisons d'égalité ou d'inégalité.

Remarque : Les fonctions .startsWith(<prefix string>) et .endsWith(<suffix string>) ne sont pas destinées à être utilisées avec l'attribut resource.type. Leur utilisation n'est pas recommandée en raison de résultats d'évaluation inattendus.

Exemples

Exemple 1 :


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

Exemple 2 :


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

Attribut resource.name

L'attribut resource.name vous permet de définir une condition basée sur tout ou partie du nom d'une ressource.

Vous pouvez exécuter la fonction extract() pour extraire une valeur à partir d'un nom de ressource. Par exemple, vous pouvez extraire un ID de projet à partir du nom de ressource d'une instance de VM Compute Engine, puis écrire une expression de condition faisant référence à cet ID de projet.

Pour plus d'informations, consultez Extraire des valeurs à partir d'attributs sur cette page.

Variable d'attribut resource.name
Type d'attribut Chaîne
Opérateurs compatibles startsWith(), endsWith(), extract(), ==, !=
Opérande compatible

Chaîne

Chaque type de ressource utilise un format de nom de ressource spécifique. Pour obtenir la liste des formats, consultez la section Format du nom des ressource.

Discussion

L'attribut resource.name contient le nom de ressource relatif de la ressource cible dans la requête. Le nom de ressource relatif se présente sous forme de chemin d'URI sans barre oblique (/).

La fonction startsWith() utilise le littéral de chaîne du préfixe à évaluer par rapport à resource.name.

La fonction endsWith() utilise le littéral de chaîne du suffixe à évaluer par rapport à resource.name.

La fonction extract() utilise un modèle d'extraction pour extraire une partie de l'attribut resource.name. Pour plus d'informations, consultez la section Extraire des valeurs à partir des noms de ressources sur cette page.

Les opérateurs == et != permettent de comparer l'ensemble de l'attribut resource.name ou une partie extraite de resource.name.

Exemples

Exemple 1 (pour une instance de VM Compute Engine) :


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

Exemple 2 (pour un bucket Cloud Storage) :


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

Exemple 3 (pour un objet Cloud Storage) :


resource.name.endsWith(".jpg")

Exemple 4 (pour plusieurs types de ressources) :


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

Exemple 5 (pour un bucket Cloud Storage) :


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

Attributs de requête

Les attributs de requête vous permettent de créer des conditions qui évaluent des détails sur la requête, tels que son niveau d'accès, sa date/heure, l'adresse IP et le port de destination (pour la tunnelisation TCP IAP), ou l'hôte/le chemin d'URL attendu (pour IAP).

Attribut de niveaux d'accès

L'attribut de niveaux d'accès permet aux utilisateurs de définir une condition selon laquelle, pour être autorisée, une requête doit répondre aux exigences d'un ou plusieurs niveaux d'accès.

L'attribut de niveaux d'accès est dérivé des attributs de la requête, tels que l'adresse IP d'origine, les attributs de l'appareil, l'heure de la journée, etc. Par exemple, un niveau d'accès nommé fullyTrusted peut exiger que l'appareil à l'origine de la requête appartienne à l'entreprise et dispose d'un verrouillage d'écran. Un niveau d'accès onNetwork peut exiger que l'appareil à l'origine de la requête provienne d'une plage d'adresses IP spécifique.

Pour en savoir plus sur les niveaux d'accès, consultez la documentation Access Context Manager.

Cet attribut est disponible dans Identity-Aware Proxy.

Attribut request.auth.access_levels

Variable d'attribut request.auth.access_levels
Type d'attribut Liste de chaînes
Opérateurs compatibles in
Opérande compatible Chaîne
Discussion

La variable request.auth.access_levels apparaît à droite et une chaîne représentant le nom complet du niveau d'accès défini apparaît à gauche de l'opérateur in.

Le nom complet d'un niveau d'accès a le format suivant :
"accessPolicies/<policyNumber>/accessLevels/<shortName>"

Remarque : La chaîne de niveau d'accès est sensible à la casse et doit correspondre exactement à ce qui est configuré dans Access Context Manager pour obtenir l'effet escompté. Par exemple, "accessPolicies/199923665455/accessLevels/CorpNet" est un littéral de chaîne valide à utiliser dans l'expression. Cependant, "accessPolicies/199923665455/accesslevels/CorpNet" n'atteindra pas l'effet escompté.

Exemple

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

Attributs d'API

Les attributs d'API vous aident à gérer l'accès en fonction des données fournies par une API ou un service Google Cloud spécifique.

Par exemple, lorsque vous utilisez Cloud Storage pour répertorier les objets d'un bucket, vous pouvez utiliser le paramètre prefix dans la requête pour n'inclure que les objets dont le nom commence par un préfixe spécifique. Si vous utilisez des limites d'accès aux identifiants pour réduire le champ d'application des autorisations de courte durée, vous pouvez créer une limite d'accès aux identifiants, qui limite les autorisations à répertorier les objets en cochant l'attribut d'API storage.googleapis.com/objectListPrefix. Cet attribut d'API contient la valeur du paramètre prefix de la requête.

Pour obtenir un exemple permettant d'utiliser les attributs d'API dans une condition, consultez Limiter les autorisations lors de la création de listes d'objets.

Cloud Storage est compatible avec les attributs d'API.

Fonctions pour les attributs d'API

Vous pouvez utiliser la fonction suivante pour travailler avec des attributs d'API :

Fonction Type Description
api.getAttribute (Chaîne, T) --> T

Fonction : récupère l'attribut d'API demandé.

Paramètres :

Chaîne : attribut d'API à récupérer. Pour connaître les valeurs acceptées, consultez Attributs de l'API Cloud Storage sur cette page.

T : valeur par défaut à utiliser si l'attribut d'API n'est pas disponible. Utilisez le même type que celui de la valeur de l'attribut d'API. Par exemple, si la valeur de l'attribut d'API est une chaîne, vous pouvez utiliser une chaîne vide ou une chaîne d'espaces réservés telle que undefined.

Exemple :

api.getAttribute("storage.googleapis.com/objectListPrefix", "")
Valeur du paramètre prefix utilisé pour répertorier les objets d'un bucket Cloud Storage. Pour les requêtes qui omettent le paramètre prefix, et pour les autres types de requêtes, elle renvoie une chaîne vide.

Attributs de l'API Cloud Storage

Cloud Storage fournit l'attribut d'API suivant.

Attribut Type Description
storage.googleapis.com/objectListPrefix Chaîne

Pour une requête de création de liste d'objets dans un bucket, cette colonne contient la valeur du paramètre prefix de la requête. L'attribut n'est pas défini si la requête omet le paramètre prefix.

Pour les autres types de requêtes, l'attribut n'est pas défini.

Attribut Date/Heure

L'attribut Date/Heure permet de définir un accès planifié, de durée limitée ou pouvant expirer pour les ressources Google Cloud.

Cet attribut de condition est disponible dans tous les services Google Cloud.

Fonctions et opérateurs de base compatibles

La variable d'attribut utilisée pour l'attribut Date/Heure est request.time, de type Horodatage. Vous pouvez également convertir les chaînes vers les types "Horodatage" et "Durée".

Fonctions de base compatibles Type Description
date Chaîne --> Horodatage

Fonction : convertit une chaîne en horodatage.
Paramètre : chaîne au format YYYY-MM-DD, où YYYY correspond à l'année, MM au mois sur deux chiffres et DD au jour sur deux chiffres. L'horodatage obtenu contient la date spécifiée et l'heure 00:00:00.000 UTC.

Exemple :

date("2020-02-01")
Un horodatage représentant la date 2020-02-01 et l'heure 00:00:00.000 UTC.

duration Chaîne --> Durée

Fonction : convertit une chaîne en durée.
Paramètre : chaîne contenant un nombre de secondes, suivi de s

Exemples :

duration("90s")
Une durée représentant 1,5 minute.

duration("2592000s")
Une durée représentant 30 jours.

timestamp

Chaîne --> Horodatage

Fonction : convertit une chaîne en horodatage.
Paramètre : chaîne respectant le format UTC (RFC 3339).

Exemples :

timestamp("1985-04-12T23:20:50.52Z")
Représente la conversion en horodatage de 23 heures, 20 minutes et 50,52 secondes le 12 avril 1985, au format UTC.

timestamp("1996-12-19T16:39:57-08:00")
Représente la conversion en horodatage de 16 heures, 39 minutes et 57 secondes le 19 décembre 1996, avec un décalage de -8h par rapport à l'heure UTC. Notez que cela équivaut à 1996-12-20T00:39:57Z en UTC. Ce décalage ne correspond pas au fuseau horaire. Par exemple, le décalage par rapport à l'heure standard du Pacifique est de -8h en hiver et -7h en été pour respecter le passage à l'heure d'été.

Remarque importante :
La chaîne doit respecter le format requis pour la chaîne UTC. Toute chaîne non conforme au format UTC empêche la conversion de la fonction timestamp() en valeur d'horodatage. Par conséquent, l'évaluation de la condition sur l'expression utilisant timestamp() entraînera l'échec de l'autorisation.

<, <=, >, >=

(Horodatage, Horodatage) --> bool

Fonction : effectue une comparaison générale avec le type "Horodatage".

Exemples :

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")
Ces expressions définissent la comparaison de l'heure de la requête avec un horodatage spécifique, à savoir le 12 avril 2018 au format UTC. Généralement utilisé pour définir une condition "heure de début" ou "heure d'expiration" pour l'attribution de rôle.

Remarque : Étant donné que l'heure est exprimée en millisecondes, le fait d'inclure la comparaison d'égalité et d'inégalité (==, !=) ne produit pas d'effets significatifs.

+ - (Horodatage, Durée) --> Horodatage

Fonction : ajoute ou soustrait une durée à un horodatage.

Exemples :

timestamp("2018-04-12T14:30:00.00Z") + duration("1800s")
Recherche l'horodatage qui tombe 30 minutes après 14:30:00 GMT le 2018-04-12.

timestamp("2018-04-12T14:30:00.00Z") - duration("5184000s")
Recherche l'horodatage qui tombe 60 jours avant 14:30:00 GMT le 2018-04-12.

Fonctions et opérateurs avancés compatibles

La variable d'attribut utilisée pour l'attribut Date/Heure est request.time, de type Horodatage.

Fonctions avancées compatibles Type Description

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

(int, int) --> bool

Fonction : comparaison générale avec le type int.

Discussion :
Cet ensemble d'opérateurs de comparaison d'entiers est principalement utilisé pour l'ensemble restant de "fonctions avancées" avec des fonctions d'horodatage. Toutes ces fonctions (définies dans la suite de ce tableau) convertissent une certaine partie de la valeur d'horodatage en type int. D'autres exemples d'utilisation courante sont fournis pour chaque fonction avancée.

getDate, getDayOfMonth, getDayOfWeek, getDayOfYear

Timestamp.() --> int

Timestamp.(string) --> int

Fonctions :
getDate : obtient le jour du mois à partir de la valeur d'horodatage, à l'aide d'une indexation unique. En d'autres termes, le premier jour du mois est 1.

getDayOfMonth : récupère le jour du mois à partir de la valeur de l'horodatage à l'aide de l'indexation à base zéro. En d'autres termes, le premier jour du mois est 0.

getDayOfWeek : obtient le jour de la semaine à partir de la valeur d'horodatage, basée sur zéro le dimanche. En d'autres termes, dimanche(0), lundi(1), ..., samedi(6).

getDayOfYear : obtient le jour de l'année à partir de la valeur d'horodatage, à l'aide d'une indexation basée sur zéro. En d'autres termes, le premier jour de l'année est 0.

Paramètres :
Chaîne en tant que fuseau horaire : conversion en fonction de la date et du fuseau horaire. Remarque : Lorsque le fuseau horaire n'est pas spécifié, la conversion est basée sur la date au format UTC.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Exemple :

request.time.getDayOfWeek() > 0 && request.time.getDayOfWeek() < 6
Cette expression est évaluée "vraie" si la requête entrante est envoyée entre le lundi et le vendredi en temps UTC.

Exemple :

request.time.getDayOfWeek("Europe/Berlin") > 0 && request.time.getDayOfWeek(Europe/Berlin") < 6
Cette expression est évaluée "vraie" si la requête entrante est envoyée entre le lundi et le vendredi dans le fuseau horaire de Berlin.

Exemple :

request.time.getDayOfYear("America/Los_Angeles") >= 0 && request.time.getDayOfYear("America/Los_Angeles") < 5
Cette expression est évaluée "vraie" si la requête entrante est envoyée dans les cinq premiers jours de l'année dans le fuseau horaire de Los Angeles.

getFullYear

Timestamp.() --> int

Timestamp.(string) --> int

Fonction : obtient l'année à partir de la date.

Paramètres :
Version 1 : aucun paramètre ; à partir de la date au format UTC.
Version 2 : chaîne de fuseau horaire ; à partir de la date dans le fuseau horaire.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Exemple :

request.time.getFullYear("America/Los_Angeles") == 2018
Cette expression est évaluée "vraie" si la requête entrante est envoyée pendant l'année 2018, dans le fuseau horaire de Los Angeles.

Exemple :

request.time.getFullYear() < 2020
Cette expression est évaluée "vraie" si la requête entrante est envoyée avant la fin de l'année 2019 en temps UTC.

getHours

Timestamp.() --> int

Timestamp.(string) --> int

Fonction : obtient les heures à partir de la date ; les valeurs sont comprises entre 0 et 23.

Paramètres :
Version 1 : aucun paramètre ; à partir de la date au format UTC.
Version 2 : chaîne de fuseau horaire ; à partir de la date dans le fuseau horaire.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Exemple :

request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17
Cette expression spécifie une condition d'heure de travail. Elle est évaluée "vraie" si la requête est envoyée entre 9h et 17h dans le fuseau horaire de Berlin.

Remarque :

Il est possible d'associer getHours() et getDayofWeek() pour définir une condition concernant la durée légale du travail, par exemple pour satisfaire aux exigences d'une juridiction.

getMilliseconds

Timestamp.() --> int

Timestamp.(string) --> int

Fonction : obtient des millisecondes dans une seconde à partir de l'horodatage ; les valeurs sont comprises entre 0 et 999.

Paramètres :
Version 1 : aucun paramètre ; à partir de la date au format UTC.
Version 2 : chaîne de fuseau horaire ; à partir de la date dans le fuseau horaire.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Remarque :

Cette fonction s'avère moins utile, compte tenu de son utilisation sémantique limitée.

getMinutes

Timestamp.() --> int

Timestamp.(string) --> int

Fonction : obtient des minutes dans une heure à partir de l'horodatage ; les valeurs sont comprises entre 0 et 59.

Paramètres :
Version 1 : aucun paramètre ; à partir de la date au format UTC.
Version 2 : chaîne de fuseau horaire ; à partir de la date dans le fuseau horaire.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Remarque :

Cette fonction s'avère moins utile, compte tenu de son utilisation sémantique limitée.

getMonth

Timestamp.() --> int

Timestamp.(string) --> int

Fonction : obtient des mois dans une année à partir de l'horodatage ; les valeurs sont comprises entre 0 et 11.

Paramètres :
Version 1 : aucun paramètre ; à partir de la date au format UTC.
Version 2 : chaîne de fuseau horaire ; à partir de la date dans le fuseau horaire.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Exemple :

request.time.getMonth("America/Los_Angeles") == 3
Cette expression est évaluée "vraie" si la requête entrante est envoyée au cours du mois d'avril, dans le fuseau horaire de Los Angeles.

getSeconds

Timestamp.() --> int

Timestamp.(string) --> int

Fonction : obtient des secondes dans une minute à partir de l'horodatage ; les valeurs sont comprises entre 0 et 59.

Paramètres :
Version 1 : aucun paramètre ; à partir de la date au format UTC.
Version 2 : chaîne de fuseau horaire ; à partir de la date dans le fuseau horaire.

Pour en savoir plus sur les chaînes de fuseau horaire valides, reportez-vous à la section Valeurs de fuseau horaire compatibles.

Remarque :

Cette fonction s'avère moins utile, compte tenu de son utilisation sémantique limitée.

Attributs d'adresse IP et de port de destination

L'attribut d'adresse IP ou de port de destination permet aux utilisateurs de gérer l'accès en fonction de l'adresse IP et/ou du port de destination d'une requête. Par exemple, une instance de VM Compute Engine peut exposer une adresse IP externe 10.0.0.1 sur le port 3001 pour une utilisation générale, tandis que l'adresse IP 10.0.0.2 et le port 22 ne sont exposés que pour une utilisation administrative.

Pour en savoir plus sur le transfert TCP, consultez la documentation sur Identity-Aware Proxy.

Cet attribut est compatible avec Identity-Aware Proxy.

Attribut destination.ip

Variable d'attribut destination.ip
Type d'attribut Chaîne
Opérateurs compatibles ==, !=
Opérande compatible Chaîne
Discussion

La variable destination.ip est censée être une chaîne représentant une adresse IP au format IPv4.

Remarque : Les fonctions startsWith(<prefix string of IP>) et endsWith(<suffix string of IP>) ne sont pas destinées à être utilisées avec l'attribut destination.ip. Bien que la définition d'une condition telle que destination.ip.startsWith(<prefix string of IP>) n'entraîne aucune erreur de syntaxe lors de l'exécution d'une opération setIamPolicy, cette opération n'est pas recommandée en raison des résultats inattendus qu'elle peut générer. La correspondance de préfixe sur la chaîne IP n'est pas recommandée pour effectuer une vérification de la plage d'adresses IP sur les CIDR.

Exemples

destination.ip == "10.0.0.1"

destination.ip != "10.0.0.1"

Attribut destination.port

Variable d'attribut destination.port
Type d'attribut Entier
Opérateurs compatibles ==, !=, <, <=, >, >=
Opérande compatible Entier
Discussion

La variable destination.port est censée être un entier représentant un numéro de port TCP.

Exemples

destination.port == 21

destination.port < 3001

Attributs de règle de transfert

Les attributs de règle de transfert vous permettent de spécifier les types de règles de transfert qu'un membre peut créer. Par exemple, vous pouvez autoriser un membre à créer des règles de transfert pour les équilibreurs de charge Google Cloud internes, qui gèrent le trafic provenant d'un réseau Google Cloud, mais pas pour les équilibreurs de charge Google Cloud externes qui gèrent le trafic provenant d'Internet.

Pour Cloud Load Balancing, les attributs de règle de transfert n'ont pas d'incidence sur la création des autres composants d'un équilibreur de charge Google Cloud, tels que les services de backend, les proxy cibles, les vérifications d'état et les mappages d'URL.

Les attributs de règle de transfert sont compatibles avec les services Google Cloud suivants :

Fonctions compatibles

Fonctions compatibles Type Description
compute.isForwardingRuleCreationOperation() () --> bool

Fonction : vérifie si la requête crée une règle de transfert.

Exemples : consultez les exemples pour compute.matchLoadBalancingSchemes().

compute.matchLoadBalancingSchemes() Array.(string) --> bool

Fonction : vérifie si la requête affecte l'un des types de schéma d'équilibrage de charge spécifiés. Pour trouver l'identifiant de chaque schéma d'équilibrage de charge, ainsi que des informations sur chaque schéma, consultez la section Utiliser des conditions IAM sur des équilibreurs de charge Google Cloud.

Paramètres : un tableau de chaînes

Exemple :


!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
  ]))
)
  • Si la requête ne concerne pas la création d'une règle de transfert, accordez le rôle au membre.
  • Si la requête concerne la création d'une règle de transfert, n'accordez ce rôle que si la règle de transfert affecte le schéma d'équilibrage de charge INTERNAL, INTERNAL_MANAGED ou INTERNAL_SELF_MANAGED.

Attribut de chemin/nom d'hôte d'URL

L'attribut de chemin/nom d'hôte d'URL permet aux utilisateurs de gérer l'accès en fonction du chemin et/ou de l'hôte de l'URL d'une requête. Par exemple, une condition peut spécifier que https://example.com est l'application principale à laquelle un domaine général d'utilisateurs peut accéder, tandis que https://hr.example.com/admin permet d'accéder à une page de l'application uniquement accessible par les administrateurs des ressources humaines.

Cet attribut est compatible avec Identity-Aware Proxy.

Attribut request.path

Variable d'attribut request.path
Type d'attribut Chaîne
Opérateurs compatibles ==, startsWith(), endsWith()
Opérandes et paramètres compatibles
  • Chaîne : ==
  • Chaîne constante de préfixe : startsWith()
  • Chaîne constante de suffixe : endsWith()
Discussions Remarque : L'opérateur != n'est pas recommandé. Ainsi, évitez d'utiliser une comparaison négative, telle que celle-ci :

request.path != "/admin"
À la place, il est recommandé d'utiliser la correspondance de préfixe, comme dans l'exemple ci-dessous :

! request.path.startsWith("/admin")
De cette façon, les chemins d'URL regroupés sous "/admin", tels que "/admin/payroll/", sont tous protégés contre les accès non intentionnels.
Exemples

Exemple 1 :


request.path == "/admin"

request.path == "/admin/payroll"

Dans les deux exemples ci-dessus, la chaîne utilisée dans la comparaison d'égalité (==) est censée être mise en forme conformément aux normes de chemin d'URL.

Exemple 2 :


request.path.startsWith("/admin")

La fonction utilise une chaîne représentant le préfixe d'un chemin d'URL.

Exemple 3 :


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

La fonction utilise une chaîne représentant le suffixe d'un chemin d'URL.

Attribut request.host

Variable d'attribut request.host
Type d'attribut Chaîne
Opérateurs compatibles ==, endsWith()
Opérandes et paramètres compatibles
  • Chaîne : ==
  • Chaîne constante de suffixe : endsWith()
Discussion La fonction .startsWith(<prefix string>) n'est pas destinée à être utilisée avec l'attribut request.host. Bien que la définition d'une condition telle que request.host.startsWith(<prefix string>) n'entraîne aucune erreur de syntaxe lors de l'exécution d'une opération setIamPolicy, cette opération n'est pas recommandée en raison des résultats inattendus qu'elle peut générer. De même, l'utilisation de != n'est pas recommandée.
Exemples

Exemple 1 :


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

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

Dans les deux exemples ci-dessus, la chaîne utilisée dans la comparaison d'égalité (==) est censée être mise en forme conformément aux normes des chaînes d'URL pour le nom d'hôte d'un site Web.

Exemple 2 :


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

Une chaîne représentant le suffixe du nom d'hôte d'un site Web.

Extraire des valeurs à partir d'attributs

Vous pouvez utiliser la fonction extract() pour extraire une valeur d'un attribut. Par exemple, vous pouvez extraire une partie arbitraire d'un nom de ressource, puis écrire une expression de condition faisant référence au texte que vous avez extrait.

Pour utiliser la fonction extract(), vous devez fournir un modèle d'extraction qui spécifie la partie de l'attribut à extraire. Par exemple, si vous souhaitez extraire un ID de projet à partir du nom de ressource d'une instance de VM Compute Engine, vous pouvez utiliser le modèle projects/{project-id}/.

Un modèle d'extraction contient les éléments suivants :

  • Un identifiant, entre accolades, qui identifie la sous-chaîne à extraire. Choisissez un identifiant court et significatif qui indique clairement la valeur que vous souhaitez extraire. Vous pouvez utiliser des majuscules et des minuscules de A à Z, des chiffres, des tirets (-) et des traits de soulignement (_).

    Dans le modèle projects/{project-id}/, l'identifiant est project-id.

  • Facultatif : Un préfixe devant précéder la sous-chaîne à extraire.

    Dans le modèle projects/{project-id}/, le préfixe est projects/.

  • Facultatif : Un suffixe devant suivre la sous-chaîne à extraire.

    Dans le modèle projects/{project-id}/, le suffixe est /.

La fonction extract() renvoie différentes valeurs selon que le modèle d'extraction possède un préfixe, un suffixe ou les deux :

Comporte un préfixe Comporte un suffixe Valeur extraite
Nom de ressource complet
Les caractères après la première occurrence du préfixe, ou une chaîne vide s'il n'y a pas de caractères après le préfixe
Les caractères avant la première occurrence du suffixe, ou une chaîne vide s'il n'y a pas de caractères avant le suffixe
Les caractères entre la première occurrence du préfixe et la première occurrence du suffixe, ou une chaîne vide s'il n'y a aucun caractère entre le préfixe et le suffixe

Si vous spécifiez un préfixe ou un suffixe qui ne figure pas dans l'attribut, ou si le suffixe n'apparaît qu'avant le préfixe, la fonction extract() renvoie null.

Les exemples suivants montrent le résultat obtenu avec différents modèles d'extraction. Les exemples suivants font référence à un nom de ressource pour un objet Cloud Storage, projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876 :

Modèle d'extraction Sortie
/order_date={date}/ 2019-11-03
buckets/{name}/ acme-orders-aaa
/orders/{empty}order_date Chaîne vide
{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

Si vous extrayez une chaîne représentant une date, vous pouvez utiliser les fonctions et les opérateurs Date/Heure sur cette page pour convertir la valeur extraite en horodatage. Pour obtenir des exemples, consultez la page Configurer un accès basé sur les ressources.