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 Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Pub/Sub Lite
  • 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.
Tags de ressource Gérez l'accès en fonction des tags associés à la ressource. Tous les services Google Cloud

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.

Identity-Aware Proxy

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
  • Identity and Access Management
  • AI Platform Notebooks
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API Cloud Runtime Configuration
  • Instance
  • Container Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Gestion de l'authentification et des accès
  • Identity-Aware Proxy
  • Service géré pour Microsoft Active Directory
  • Resource Manager
  • Secret Manager
  • Service Management

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.

Identity-Aware Proxy

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.

Identity-Aware Proxy

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 la plupart des attributs ne sont disponibles que pour des types de ressources spécifiques. À partir du 26 février 2021, 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.

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"
Services compatibles
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Pub/Sub Lite
  • Resource Manager (type de ressource et service de ressource uniquement)
  • Secret Manager

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.

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 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")
Types de ressources acceptés
Cloud Key Management Service
  • Versions des clés de chiffrement
  • Clés de chiffrement
  • Trousseaux de clés
Cloud Spanner
  • Bases de données
  • Instances
Cloud Storage
  • Buckets
  • Objets
Compute Engine
  • Services de backend (globaux et régionaux)
  • Pare-feu
  • Règles de transfert (globales et régionales)
  • Images
  • Modèles d'instance
  • Instances
  • Disques persistants (régionaux et zonaux)
  • Instantanés
  • Proxys HTTP(S) cibles (globaux et régionaux)
  • Proxys SSL cibles
  • Proxys TCP cibles
Google Cloud Emplacements1
Identity-Aware Proxy
  • Tous les services de backend et toutes les applications App Engine
  • Toutes les ressources de tunnels
  • Toutes les zones de tunnel
  • Tous les services Web
  • Versions de service de l'application App Engine
  • Services de l'application App Engine
  • Services de backend Compute Engine
  • Instances de tunnel
Pub/Sub Lite
  • Zones
  • Abonnements
  • Sujets
Resource Manager Projets
Secret Manager
  • Versions des secrets
  • Secrets

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.

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.

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 en savoir plus, consultez la section 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"
Types de ressources acceptés
Cloud Key Management Service
  • Clés de chiffrement
  • Versions des clés de chiffrement
  • Trousseaux de clés
Cloud Spanner
  • Bases de données
  • Instances
Cloud Storage
  • Buckets
  • Objets
Compute Engine
  • Services de backend (globaux et régionaux)
  • Pare-feu
  • Règles de transfert (globales et régionales)
  • Images
  • Modèles d'instance
  • Instances
  • Disques persistants (régionaux et zonaux)
  • Instantanés
  • Proxys HTTP(S) cibles (globaux et régionaux)
  • Proxys SSL cibles
  • Proxys TCP cibles
Pub/Sub Lite
  • Zones
  • Abonnements
  • Sujets
Secret Manager
  • Versions des secrets
  • Secrets

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 être tagValues/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 court prod.
  • 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.

Vous pouvez utiliser les fonctions suivantes avec les tags :

Fonction Type Description
resource.hasTagKey Chaîne --> Bool

Fonction :

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().

Paramètre (Chaîne) : nom d'espace de noms de la clé de tag avec l'ID numérique de l'organisation et une barre oblique comme préfixe. Exemple :123456789012/env

Exemple :

resource.hasTagKey('123456789012/env')
Renvoie true si la ressource de la requête dispose d'un tag avec la clé env.

resource.hasTagKeyId Chaîne --> Bool

Fonction :

Vérifie si la ressource de la requête dispose d'un tag avec la clé spécifiée. La clé du tag est recherchée par son ID permanent. Pour rechercher une clé de tag à l'aide de son nom d'espace de noms, utilisez la fonction resource.hasTagKey().

Paramètre : identifiant permanent de la clé de tag. Exemple :tagKeys/123456789012

Exemple :

resource.hasTagKeyId('tagKeys/123456789012')
Renvoie true si la ressource de la requête dispose d'un tag avec la clé tagKeys/123456789012.

resource.matchTag (Chaîne, Chaîne) --> Bool

Fonction :

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().

Paramètres :

Le premier paramètre Chaîne est le nom d'espace de noms de la clé de tag avec l'ID numérique de l'organisation et une barre oblique comme préfixe. Par exemple, 123456789012/env.

Le deuxième paramètre Chaîne est le nom court de la valeur du tag. Par exemple, prod.

Exemple :

resource.matchTag('123456789012/env', 'prod')
Renvoie true si la ressource de la requête a un tag avec la clé 123456789012/env et la valeur prod.

resource.matchTagId (Chaîne, Chaîne) --> Bool

Fonction :

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 par leurs ID permanents. Pour rechercher une clé de tag à l'aide de son nom d'espace de noms et d'une valeur à l'aide de son nom court, utilisez la fonction resource.matchTag().

Paramètres :

Le premier paramètre Chaîne est l'ID permanent de la clé de tag. Par exemple, tagKeys/123456789012.

Le deuxième paramètre Chaîne est l'ID permanent de la valeur du tag. Par exemple, tagValues/567890123456.

Exemple :

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')
Renvoie true si la ressource de la requête a un tag avec la clé tagKeys/123456789012 et la valeur tagValues/567890123456.

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.

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 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
Types de ressources acceptés Disponible pour les requêtes qui utilisent Identity-Aware Proxy pour accéder à une instance de tunnel ou pour 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 :

Reportez-vous aux sections suivantes pour savoir quels services reconnaissent les attributs de l'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 les sections Attributs de l'API Cloud Storage et Attributs de l'API IAM 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.

hasOnly List<T>.(List<T>) --> bool

Fonction : vérifie qu'une liste ne contient que les éléments autorisés ou un sous-ensemble de ces éléments.

Paramètres :

Liste<T> : liste d'éléments de type T. La fonction est appelée sur une liste renvoyée par api.getAttribute(). Le paramètre est une liste d'éléments que l'attribut de l'API est autorisé à contenir.

Exemple :

api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
    .hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

Vérifie si la requête accorde ou révoque des rôles autres que ceux d'Editor Pub/Sub (roles/pubsub.editor) ou de Publisher Pub/Sub (roles/pubsub.publisher). Le tableau suivant indique le résultat pour différentes valeurs de requête :

Rôles attribués/révoqués Résultat
Aucun

true

Si aucun rôle n'est modifié, api.getAttribute() renvoie la valeur par défaut. Pour cet attribut, la valeur par défaut est toujours une liste vide. Par définition, une liste vide ne contient pas de valeurs qui ne figurent pas dans la liste blanche.

roles/pubsub.editor

true

Le rôle figure sur la liste blanche.

roles/pubsub.editor
roles/pubsub.publisher

true

Les deux rôles figurent sur la liste blanche.

roles/billing.admin

false

Le rôle ne figure pas sur la liste blanche.

roles/billing.admin
roles/pubsub.editor

false

Un rôle figure sur la liste blanche, mais pas l'autre.

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.

Services qui reconnaissent cet attribut :

Seul Cloud Storage reconnaît cet attribut.

Attributs de l'API IAM

IAM fournit l'attribut d'API suivant :

Attribute Type Description
iam.googleapis.com/modifiedGrantsByRole Array

Pour une requête visant à définir la stratégie IAM d'une ressource, cet attribut contient les noms de rôle des liaisons de rôle modifiées par la requête.

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

Ressources qui acceptent cet attribut :

Les ressources suivantes acceptent les conditions avec l'attribut modifiedGrantsByRole dans leurs règles IAM :

  • Projets
  • Dossiers
  • Organisations

Services qui reconnaissent cet attribut :

Les services suivants reconnaissent l'attribut modifiedGrantsByRole :

  • AI Platform Notebooks
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API Cloud Runtime Configuration
  • Instance
  • Container Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Gestion de l'authentification et des accès
  • Identity-Aware Proxy
  • Service géré pour Microsoft Active Directory
  • Resource Manager
  • Secret Manager
  • Service Management

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 disponible pour tous les services et types de ressources 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 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 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 interne 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"
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 Entier
Opérateurs compatibles ==, !=, <, <=, >, >=
Opérande compatible Entier
Discussion

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

Exemples

destination.port == 21

destination.port < 3001
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 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.

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.

Types de ressources acceptés

Cet attribut permet aux requêtes de créer de l'un de ces types de ressources :

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

Types de ressources acceptés

Versions de service de l'application Identity-Aware Proxy (App Engine)

Disponible pour les requêtes utilisant Identity-Aware Proxy afin d'accéder à une application Web s'exécutant sur App Engine ou Compute Engine

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.

Types de ressources acceptés

Versions de service de l'application Identity-Aware Proxy (App Engine)

Disponible pour les requêtes qui utilisent Identity-Aware Proxy pour accéder à une version de service d'application.

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.