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é. |
|
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. |
|
Tags de ressource | Gérez l'accès en fonction des tags associés à la ressource. | Tous les services Google Cloud (consultez la section Compatibilité avec les conditions héritées) |
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 |
---|---|---|
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 et l'heure de la journée. Par exemple, un niveau d'accès |
Identity-Aware Proxy |
|
Gérez l'accès en fonction des données fournies par une API ou un service Google Cloud spécifique. |
|
|
Définissez un accès planifié, de durée limitée ou pouvant expirer pour les ressources Google Cloud. |
Tous les services Google Cloud (consultez la section Compatibilité avec les conditions héritées) |
|
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 Utilisé pour le transfert TCP Identity-Aware Proxy. |
Identity-Aware Proxy |
|
Spécifiez les types de règles de transfert qu'un compte principal peut créer. Par exemple, vous pouvez autoriser un compte principal à 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. |
|
|
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 les éléments suivants : |
|
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 d'autorisation. 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 Types de ressources qui acceptent 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 la plupart des attributs ne sont disponibles que pour des types de ressources spécifiques. Si une partie d'une condition utilise un attribut qui n'est pas disponible, cette partie de la condition n'est jamais interprétée comme accordant un accès. Par exemple, la condition destination.port == 21
n'accorde jamais d'accès à une ressource BigQuery, car les ressources BigQuery ne fournissent pas les attributs d'adresse IP et de port de destination.
Pour éviter ce problème, utilisez les attributs resource type et resource service décrits sur cette page afin de limiter le champ d'application de la condition. Par exemple, la condition suivante renvoie true
pour tous les types de ressources autres que les instances de tunnel Identity-Aware Proxy. En revanche, pour les instances de tunnel Identity-Aware Proxy, la condition vérifie le port de destination :
resource.type != 'iap.googleapis.com/TunnelInstance' ||
destination.port == 21
Il n'est pas nécessaire de limiter le champ d'application des conditions qui vérifient les tags associés à une ressource. Une condition ne peut pas vérifier d'autres attributs lorsqu'elle vérifie les clés et les valeurs d'un tag, ce qui inclut le type de ressource et le service de ressources.
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.
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
. Pour obtenir la liste des valeurs acceptées, consultez la section Valeurs du service de ressources.
Variable d'attribut | resource.service |
---|---|
Type d'attribut |
Pour obtenir la liste des valeurs acceptées, consultez la section Valeurs du service de ressources. |
Opérateurs compatibles | , |
Détails |
Lorsque vous utilisez l'attribut resource.type dans des conditions, vérifiez l'égalité exacte ( ) ou l'inégalité exacte ( ) avec l'attribut.
D'autres comparaisons, telles que la vérification d'un préfixe ou d'un suffixe, peuvent donner des résultats inattendus.
|
Exemple |
Renvoie resource.service == "compute.googleapis.com" |
Services compatibles |
|
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
. Pour obtenir la liste des valeurs acceptées, consultez la section Valeurs du type de ressource.
Si votre condition utilise l'attribut resource.name
, nous vous recommandons vivement d'utiliser l'attribut resource.type
pour contrôler les types de ressources auxquels la condition s'applique. Pour en savoir plus, consultez la section concernant l'attribut resource.name
sur cette page.
Variable d'attribut | resource.type |
||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Type d'attribut |
Pour obtenir la liste des valeurs acceptées, consultez la section Valeurs du type de ressource. |
||||||||||||||||||||||||||||||||||||||||
Opérateurs compatibles | , |
||||||||||||||||||||||||||||||||||||||||
Détails |
Lorsque vous utilisez l'attribut resource.type dans des conditions, vérifiez l'égalité exacte ( ) ou l'inégalité exacte ( ) avec l'attribut. D'autres comparaisons, telles que la vérification d'un préfixe ou d'un suffixe, peuvent donner des résultats inattendus.
|
||||||||||||||||||||||||||||||||||||||||
Examples |
Renvoie resource.type != "compute.googleapis.com/Image"
Renvoie (resource.type == "compute.googleapis.com/Image" || resource.type == "compute.googleapis.com/Disk") |
||||||||||||||||||||||||||||||||||||||||
Types de ressources acceptés |
1 Cloud Key Management Service utilise ce type de ressource comme parent des ressources du trousseau de clés. |
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. Pour obtenir la liste des formats de nom des ressources, consultez la section Format du nom des ressources.
L'attribut resource.name
n'est disponible que pour des types de ressources spécifiques, répertoriés dans le tableau ci-dessous. Nous vous recommandons vivement de limiter l'applicabilité de la condition au type de ressource souhaité. Si un rôle contient des autorisations pour un type de ressource qui ne fournit pas l'attribut resource.name
, vous devez vous assurer que ces autorisations ne sont pas restreintes par la partie de la condition qui vérifie resource.name
.
L'exemple suivant montre comment procéder. Dans cet exemple, la condition permet d'accéder à tous les types de ressources, à l'exception des buckets et des objets Cloud Storage. En revanche, pour les buckets et les objets, la condition n'autorise l'accès qu'au bucket example-bucket
et aux objets qu'il contient :
(resource.type != 'storage.googleapis.com/Bucket' &&
resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')
Notez que la première partie de la condition vérifie si la ressource n'est ni un bucket, ni un objet. Si la ressource possède un type différent, toute la condition renvoie true
, quel que soit le nom de la ressource.
Notez également que la condition vérifie l'attribut resource.type
, et non l'attribut resource.service
. Voici quelques avantages de la vérification de l'attribut resource.type
:
- Elle limite la vérification
resource.name
à l'ensemble de ressources approprié. Par exemple, si vous souhaitez accorder l'accès aux instances Compute Engine portant un nom spécifique, il est judicieux d'exclure tous les types de ressources autres que les instances Compute Engine. - Cela empêche le champ d'application de la condition de changer si un service ajoute de nouveaux types de ressources à l'avenir.
Enfin, notez que la condition utilise la fonction startsWith()
pour évaluer le nom de la ressource plutôt que de vérifier l'égalité avec l'opérateur . Étant donné que la condition examine le début du nom de la ressource, elle correspond à un bucket ainsi qu'aux objets qu'il contient. Si elle vérifiait l'égalité, elle ne correspondrait qu'au bucket.
Vous ne pouvez pas utiliser de caractères génériques tels que *
pour faire correspondre plusieurs noms de ressources. Envisagez ces alternatives :
Utilisez 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.
Utilisez la fonction
startsWith()
ouendsWith()
pour écrire une condition qui évalue le début ou la fin du nom de la ressource.
Variable d'attribut | resource.name |
||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Type d'attribut |
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. |
||||||||||||||||||||||||||||||||||
Fonctions et opérateurs compatibles |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||
Détails |
L'attribut La fonction La fonction
La fonction Les opérateurs |
||||||||||||||||||||||||||||||||||
Examples |
Renvoie resource.name != "projects/_/buckets/secret-bucket-123"
Renvoie resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
Renvoie resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
Renvoie resource.name.endsWith(".jpg") Renvoie le nom ou le numéro du projet, s'il est présent : resource.name.extract("projects/{project}/") |
||||||||||||||||||||||||||||||||||
Types de ressources acceptés |
|
Tags de ressource
Les fonctions des tags de ressources vous permettent de définir une condition basée sur les tags associés à une ressource ou hérités par une ressource. Par exemple, vous pouvez définir une condition qui n'accorde un rôle que pour les ressources auxquelles le tag env: prod
est associé. Pour en savoir plus sur le contrôle des accès avec des tags, consultez la section Tags et contrôle des accès.
Chaque tag se compose d'une clé et d'une valeur. Il existe différents types d'identifiants pour chaque clé et valeur :
-
Un ID permanent, qui est unique et ne peut jamais être réutilisé. Par exemple, l'ID permanent d'une clé de tag peut être
tagKeys/123456789012
et l'ID permanent d'une valeur de tag peut êtretagValues/567890123456
. -
Un nom court. Le nom court de chaque clé doit être unique au sein de votre organisation, et le nom court de chaque valeur doit être unique pour la clé associée. Par exemple, une clé de tag peut avoir le nom court
env
et une valeur de tag peut avoir le nom courtprod
. -
Un nom d'espace de noms, qui ajoute l'ID numérique de votre organisation au nom court d'une clé de tag. Par exemple, une clé de tag peut avoir le nom d'espace de noms
123456789012/env
. Découvrez comment obtenir l'ID de votre organisation.
Pour obtenir des conseils sur le type d'identifiant à utiliser dans vos conditions, consultez la page Définitions et identifiants de tags.
Les conditions appliquées sur les tags sont compatibles avec tous les types de ressources et services Google Cloud. Pour savoir comment appliquer des conditions de tag à des ressources qui ne sont pas directement compatibles avec celles-ci, consultez la section Compatibilité avec les conditions héritées sur cette page.
Vous pouvez utiliser les fonctions suivantes pour définir des conditions basées sur des tags :
Function | Description |
---|---|
resource.hasTagKey(
bool
|
Vérifie si la ressource de la requête dispose d'un tag avec la clé spécifiée. La clé de tag est recherchée par son nom d'espace de noms. Pour rechercher une clé de tag à l'aide de son ID permanent, utilisez la fonction
|
resource.hasTagKeyId(
bool
|
Vérifie si la ressource de la requête dispose d'un tag avec la clé spécifiée. La clé de tag est recherchée à l'aide de son ID permanent.
Pour rechercher une clé de tag à l'aide de son nom d'espace de noms, utilisez la fonction
|
resource.matchTag(
bool
|
Vérifie si la ressource de la requête possède un tag avec la clé et la valeur spécifiées. La clé est recherchée par son nom d'espace de noms, et la valeur est recherchée par son nom court. Pour rechercher une clé et une valeur de tag à l'aide de leurs ID permanents, utilisez la fonction
|
resource.matchTagId(
bool
|
Vérifie si la ressource de la requête possède un tag avec la clé et la valeur spécifiées. La clé et la valeur sont recherchées à l'aide de leurs ID permanents. Pour rechercher une clé de tag à l'aide de son nom d'espace de noms et une valeur à l'aide de son nom court, utilisez la fonction
|
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 et Cloud Run).
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 de 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 et l'heure de la journée. 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.
L'attribut de niveaux d'accès n'est disponible que lorsque vous utilisez Identity-Aware Proxy pour accéder à une instance de tunnel ou pour accéder à une application Web exécutée sur des services de backend App Engine ou Compute Engine. Plus précisément, l'attribut de niveaux d'accès n'est disponible que pour les requêtes qui vérifient l'une des autorisations suivantes :
iap.tunnelInstances.accessViaIAP
iap.webServiceVersions.accessViaIAP
Vous pouvez utiliser l'attribut de niveaux d'accès lorsque vous accordez de façon conditionnelle les rôles prédéfinis suivants :
Utilisateur de tunnels sécurisés par IAP (
roles/iap.tunnelResourceAccessor
)Contient une seule autorisation,
iap.tunnelInstances.accessViaIAP
.Utilisateur de l'application Web sécurisée par IAP (
roles/iap.httpsResourceAccessor
)Contient une seule autorisation,
iap.webServiceVersions.accessViaIAP
.
Vous pouvez également utiliser l'attribut de niveaux d'accès pour accorder de manière conditionnelle un rôle personnalisé contenant ces autorisations. Le rôle personnalisé ne doit contenir aucune autre autorisation.
Attribut request.auth.access_levels
Variable d'attribut | request.auth.access_levels |
---|---|
Type d'attribut | list <string > |
Opérateurs compatibles | in |
Détails |
Pour vérifier si une requête répond à un niveau d'accès spécifique, utilisez l'opérateur ACCESS_LEVEL_FULL_NAME in request.auth.access_levels Le nom complet d'un niveau d'accès utilise le format suivant : accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL |
Exemple |
Renvoie "accessPolicies/199923665455/accessLevels/CorpNet" in request.auth.access_levels |
Types de ressources acceptés | Disponible pour les requêtes utilisant Identity-Aware Proxy afin d'accéder à une instance de tunnel, un groupe de destination de tunnel, une application Web s'exécutant sur Google Cloud Load Balancing ou une application Web s'exécutant sur App Engine. |
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 des exemples d'utilisation des attributs d'API dans une condition, consultez les pages suivantes :
- Limiter les autorisations lors de la création d'une liste d'objets
- Définir des limites sur l'attribution de rôles
Tous les services ne reconnaissent pas les attributs d'API. Les sections suivantes indiquent les services qui reconnaissent chaque attribut d'API.
Fonctions pour les attributs d'API
Vous pouvez utiliser la fonction suivante pour travailler avec des attributs d'API :
Function | Description | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
Récupère l'attribut d'API demandé.
|
||||||||||||
hasOnly(
bool |
Vérifie qu'une liste ne contient que les éléments autorisés ou un sous-ensemble de ces éléments. Vous pouvez appeler la fonction sur une liste renvoyée par
|
Attributs de l'API Cloud Storage
Cloud Storage fournit l'attribut d'API suivant.
Variable d'attribut | storage.googleapis.com/objectListPrefix |
---|---|
Type d'attribut | string |
Détails |
Pour une requête de création de liste d'objets dans un bucket, cette colonne contient la valeur du paramètre Pour les autres types de requêtes, l'attribut n'est pas défini. |
Services qui reconnaissent cet attribut | Cloud Storage |
Attributs de l'API IAM
IAM fournit l'attribut d'API suivant :
Variable d'attribut | iam.googleapis.com/modifiedGrantsByRole |
---|---|
Type d'attribut | list<string> |
Détails |
Pour une requête permettant de définir la stratégie d'autorisation d'une ressource, cet attribut contient les noms de rôle des liaisons modifiées par la requête. Pour les autres types de requêtes, l'attribut n'est pas défini. |
Types de ressources qui acceptent cet attribut |
Les types de ressources suivants acceptent des conditions avec l'attribut
|
Services qui reconnaissent cet attribut |
Les services suivants reconnaissent l'attribut
|
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 est compatible avec tous les services et types de ressources Google Cloud. Pour savoir comment appliquer des conditions de date/heure à des ressources qui ne sont pas directement compatibles avec celles-ci, consultez la section Compatibilité avec les conditions héritées sur cette page.
L'attribut request.time
contient l'horodatage de la requête. Vous pouvez comparer cet horodatage à un autre horodatage ou à une durée donnée.
Les sections suivantes répertorient les fonctions que vous pouvez utiliser pour définir des conditions basées sur des horodatages et des durées.
Créer, comparer et modifier des horodatages et des durées
Fonction ou opérateur | Description |
---|---|
date(
Timestamp |
Convertit une date au format
|
duration(
Duration |
Convertit une durée de
|
timestamp(
Timestamp |
Convertit un
|
, , , |
Compare deux valeurs
|
|
Ajouter ou soustraire
|
Extraire des informations d'un horodatage
Les fonctions de cette section vous permettent d'extraire des informations d'un horodatage, telles que le jour de la semaine correspondant à l'horodatage.
Dans les conditions IAM, tous les horodatages sont au format UTC. Toutefois, vous pouvez extraire des informations en fonction d'un fuseau horaire différent. Par exemple, vous pouvez savoir si un horodatage UTC tombe un lundi dans le fuseau horaire de Berlin, en Allemagne.
Pour spécifier un autre fuseau horaire, transmettez ce fuseau dans la fonction. Utilisez un nom ou un décalage UTC de la base de données des fuseaux horaires IETF. Par exemple, vous pouvez utiliser Europe/Berlin
ou +01:00
pour l'heure d'Europe centrale (CET).
Fonctions et opérateurs compatibles | Description |
---|---|
Timestamp.getDate(
int
|
Récupère le jour du mois à partir de
|
Timestamp.getDayOfMonth(
int
|
Récupère le jour du mois à partir de
|
Timestamp.getDayOfWeek(
int
|
Obtient le jour de la semaine à partir de
|
Timestamp.getDayOfYear(
int
|
Récupère le jour de l'année à partir de
|
Timestamp.getFullYear(
int
|
Récupère l'année à partir de
|
Timestamp.getHours(
int
|
Récupère l'heure de la journée à partir de
Vous pouvez combiner cette fonction avec
|
Timestamp.getMilliseconds(
int
|
Récupère le nombre de millisecondes de l'élément
|
Timestamp.getMinutes(
int
|
Récupère le nombre de minutes après l'heure à partir de
|
Timestamp.getMonth(
int
|
Récupère le mois de l'année à partir de la valeur
|
Timestamp.getSeconds(
int
|
Récupère le nombre de secondes de
|
, , , |
Compare le résultat de deux fonctions de cette table. |
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 de destination interne et/ou du port d'une requête.
Par exemple, une instance de VM Compute Engine peut mapper l'adresse IP externe et le port 132.168.42.21:3001
sur l'adresse IP interne et le port 10.0.0.1:2300
pour une utilisation générale. En revanche, l'adresse IP interne et le port 10.0.0.1:22
peuvent n'être disponibles que pour une utilisation administrative. Vous pouvez utiliser les attributs d'adresse IP/de port de destination pour accorder différents niveaux d'accès en fonction de l'adresse IP interne et du port.
Pour en savoir plus sur le transfert TCP, consultez la documentation Identity-Aware Proxy.
Attribut "destination.ip"
Variable d'attribut | destination.ip |
---|---|
Type d'attribut | string |
Opérateurs compatibles | , |
Détails |
La variable |
Examples |
Renvoie destination.ip == "10.0.0.1"
Renvoie destination.ip != "10.0.0.1" |
Types de ressources acceptés | Disponible pour les requêtes qui utilisent Identity-Aware Proxy pour accéder à une instance de tunnel |
Attribut "destination.port"
Variable d'attribut | destination.port |
---|---|
Type d'attribut | int |
Opérateurs compatibles | , , , , , |
Détails |
La variable |
Examples |
Renvoie
|
Types de ressources acceptés | Disponible pour les requêtes qui utilisent Identity-Aware Proxy pour accéder à une instance de tunnel |
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 compte principal peut créer. Par exemple, vous pouvez autoriser un compte principal à 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.
Fonctions compatibles
Function | Description |
---|---|
compute.isForwardingRule
bool
|
Vérifie si la requête crée une règle de transfert.
|
compute.matchLoad
bool
|
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 et obtenir plus d'informations, consultez la section Utiliser des conditions IAM sur des équilibreurs de charge Google Cloud.
|
Types de ressources acceptés
Cet attribut est disponible pour les requêtes de création des types de ressources suivants :
Service | Types de ressources |
---|---|
Cloud Load Balancing | Règles de transfert |
Cloud VPN | Règles de transfert (globales et régionales) |
Compute Engine | Règles de transfert (pour le transfert de protocole) |
Traffic Director1 | Règles de transfert |
1 Utilise les attributs de ressource pour Compute Engine.
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.
Attribut "request.path"
Variable d'attribut | request.path |
---|---|
Type d'attribut | string |
Fonctions et opérateurs compatibles | , startsWith(), endsWith() |
Détails |
Nous vous déconseillons d'utiliser l'opérateur avec cet attribut. Au lieu de vérifier l'inégalité, comme dans request.path != "/admin" , vérifiez le préfixe de l'attribut, comme dans !request.path.startsWith("/admin") . En vérifiant le préfixe, vous protégez également les chemins d'URL dans la hiérarchie /admin , tels que /admin/payroll/ .
|
Examples |
Renvoie request.path == "/admin" request.path == "/admin/payroll"
Renvoie request.path.startsWith("/admin")
Renvoie request.path.endsWith("/payroll.js") |
Types de ressources acceptés |
|
Attribut "request.host"
Variable d'attribut | request.host |
---|---|
Type d'attribut | string |
Fonctions et opérateurs compatibles | , endsWith() |
Détails |
Nous vous déconseillons d'utiliser la fonction .startsWith() ou l'opérateur avec cet attribut. Ces fonctions et opérateurs peuvent vous donner des résultats inattendus.
|
Examples |
Renvoie request.host == "www.example.com" request.host == "hr.example.com"
Renvoie request.host.endsWith("example.com") |
Types de ressources acceptés |
|
Extraire les valeurs des 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}/
.
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 et des traits de soulignement (_
).Dans le modèle
projects/{project}/
, l'identifiant estproject
.Facultatif : Un préfixe devant précéder la sous-chaîne à extraire.
Dans le modèle
projects/{project}/
, le préfixe estprojects/
.Facultatif : Un suffixe devant suivre la sous-chaîne à extraire.
Dans le modèle
projects/{project}/
, le suffixe est/
.
La fonction extract()
extrait différentes parties de l'attribut 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 |
---|---|---|
— | — | L'attribut entier |
— | 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 que le suffixe n'apparaît qu'avant le préfixe, la fonction extract()
renvoie une chaîne vide.
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/objects/data_lake/orders/
:
Modèle d'extraction | Sortie |
---|---|
/order_date={date}/ |
2019-11-03 |
buckets/{name}/ |
acme-orders-aaa |
/orders/{empty}order_date |
Vider string |
{start}/objects/data_lake |
projects/_/buckets/acme-orders-aaa |
orders/{end} |
order_date=2019-11-03/aef87g87ae0876 |
{all} |
projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/ |
/orders/{none}/order_date= |
Vider string |
/orders/order_date=2019-11-03/ |
Vider string |
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 un Timestamp
. Pour obtenir des exemples, consultez la page Configurer un accès basé sur les ressources.