Referencia de atributos para las condiciones de IAM

En este tema, se describen los atributos admitidos en una expresión de condición.

Atributos de condición compatibles

En las siguientes secciones, se resumen los atributos admitidos y se indica qué servicios de Google Cloud reconocen cada atributo.

Atributos de recursos

Los siguientes atributos se relacionan con el recurso que está sujeto a la solicitud.

Atributo Resumen de uso Servicios de Google Cloud compatibles
Atributo de servicio de recurso Administra el acceso según el servicio de Google Cloud que se usa.
  • Cloud Bigtable
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity‑Aware Proxy
  • Pub/Sub Lite
  • Resource Manager (solo tipo de recurso y servicio de recurso)
  • Secret Manager
Atributo de tipo de recurso Administra el acceso según el tipo de recurso.
Atributo de nombre de recurso Administra el acceso según el nombre del recurso.
Etiquetas de recursos Administra el acceso en función de las etiquetas adjuntas al recurso. Todos los servicios de Google Cloud

Para obtener más detalles, consulta los atributos de recursos en esta página.

Atributos de solicitud

Los siguientes atributos se relacionan con los detalles de la solicitud.

Atributo Resumen de uso Servicios de Google Cloud compatibles

Atributo de niveles de acceso

Administra el acceso en función de los niveles de acceso específicos.

Un nivel de acceso es un atributo calculado basado en atributos sin procesar sobre la solicitud y el solicitante, como la dirección IP de origen, los atributos del dispositivo, la hora del día y otros. Por ejemplo, un nivel de acceso onNetwork puede requerir que el dispositivo que realiza la solicitud se origine en un rango de direcciones IP en particular. Los administradores de la organización definen los niveles de acceso.

Identity‑Aware Proxy

Atributos de API

Administra el acceso según los datos proporcionados por una API o un servicio de Google Cloud específicos.

  • Cloud Storage
  • Identity and Access Management
  • Notebooks
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API de Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API de Cloud Runtime Configuration
  • Compute Engine
  • Análisis del contenedor
  • Dataproc
  • Earth Engine
  • Game Servers
  • Administración de identidades y accesos
  • Identity-Aware Proxy
  • Servicio administrado para Microsoft Active Directory
  • Resource Manager
  • Secret Manager
  • Administración de servicio

Atributos de fecha y hora

Establece el acceso programado, con vencimiento o de duración limitada a los recursos de Google Cloud.

Todos los servicios de Google Cloud

Atributos de puerto o IP de destino

Administra el acceso en función de la dirección IP o el puerto de destino de una solicitud. Por ejemplo, una instancia de máquina virtual (VM) de Compute Engine podría exponer una IP externa, como 10.0.0.2, pero el puerto 22 podría exponerse solo para uso administrativo.

El uso actual es en su mayoría para el reenvío de TCP de Identity-Aware Proxy.

Identity‑Aware Proxy

Atributos de reglas de reenvío

Especifica los tipos de reglas de reenvío que puede crear un miembro. Por ejemplo, puedes permitir que un miembro cree reglas de reenvío para balanceadores de cargas de Google Cloud internos, que controlan el tráfico originado dentro de una red de Google Cloud, pero no para balanceadores de cargas de Google Cloud externos, que controlan el tráfico originado en Internet.

Atributos de host y ruta de URL

Administra el acceso en función del host o la ruta de URL de una solicitud. Por ejemplo, una condición podría especificar que https://example.com es la aplicación principal a la que puede acceder un dominio general de usuarios, mientras que https://hr.example.com/admin se usa para acceder a una página de la aplicación respecto de la cual solo los administradores de recursos humanos tienen el permiso correspondiente.

Identity‑Aware Proxy

Para obtener más detalles, consulta los atributos de solicitud en esta página.

Compatibilidad para condiciones heredadas

Algunos tipos de recursos de Google Cloud no admiten condiciones en sus Políticas de IAM. Sin embargo, puedes agregar vinculaciones de funciones condicionales a nivel de organización, de carpeta o de proyecto. Otros recursos heredarán esas vinculaciones de funciones mediante la jerarquía de recursos. Para obtener más detalles consulta Recursos que aceptan vinculaciones de funciones condicionales.

Cuando uses atributos a nivel de la organización, la carpeta o el proyecto, recuerda que la mayoría de los atributos solo están disponibles para tipos de recursos específicos. A partir del 26 de febrero de 2021, si parte de una condición usa un atributo que no está disponible, esa parte de la condición nunca se interpretará como acceso otorgado. Por ejemplo, la condición destination.port == 21 nunca otorgará acceso a ningún recurso de BigQuery, ya que los recursos de BigQuery no proporcionan los atributos de puerto/IP de destino.

Para evitar este problema, usa los atributos tipo de recurso y el servicio de recursos descritos en esta página a fin de limitar el permiso de la condición. Por ejemplo, la siguiente condición se evalúa como true para todos los tipos de recursos que no sean instancias de túnel de Identity-Aware Proxy. En cambio, para las instancias de túnel de Identity-Aware Proxy, la condición verifica el puerto de destino:

resource.type != 'iap.googleapis.com/TunnelInstance' ||
    destination.port == 21

No necesitas limitar el alcance de las condiciones que verifican las etiquetas adjuntas a un recurso. Cuando una condición verifica las claves y los valores de la etiqueta, no puede verificar ningún otro atributo, incluido el tipo de recurso y el servicio de recursos.

Atributos de recursos

Por lo general, el servicio y el tipo de recurso, así como los atributos de nombre del recurso se usan para cambiar el permiso de una concesión de acceso que proporciona la vinculación de la función. Cuando una función contiene permisos que se aplican a diferentes atributos específicos de recursos, se pueden usar condiciones basadas en el recurso con el fin de otorgar un subconjunto de permisos de la función a tipos o servicios específicos.

Atributo resource.service

El atributo resource.service te permite establecer una condición basada en el servicio de Google Cloud que se usa. Por ejemplo, puedes configurar una condición que limite el acceso de un usuario a los recursos que usan el servicio cloudresourcemanager.googleapis.com.

Variable del atributo resource.service
Tipo de atributo String
Operadores admitidos ==, !=
Operando compatible String


Si deseas obtener una lista de todos los literales de string de servicios de recursos admitidos, consulta Atributos de recursos para condiciones de IAM.

Análisis La variable resource.service, si se usa, está diseñada para realizar comparaciones de igualdad o desigualdad.

Nota: Las funciones .startsWith(<prefix string>) y .endsWith(<suffix string>) no están diseñadas para usarse con el atributo resource.service. No se recomienda debido a que puede haber resultados inesperados en la evaluación.

Ejemplos

Ejemplo 1:


resource.service == "compute.googleapis.com"
Servicios compatibles
  • Cloud Bigtable
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity‑Aware Proxy
  • Pub/Sub Lite
  • Resource Manager (solo tipo de recurso y servicio de recurso)
  • Secret Manager

Atributo resource.type

El atributo resource.type te permite establecer una condición basada en el tipo de recurso. Por ejemplo, puedes configurar una condición que limite el acceso de un usuario a los recursos de tipo storage.googleapis.com/Object.

Si tu condición usa el atributo resource.name, te recomendamos que uses el atributo resource.type para controlar a qué tipos de recursos se aplicará la condición. Para obtener más información, consulta el atributo resource.name en esta página.

Variable del atributo resource.type
Tipo de atributo String
Operadores admitidos ==, !=
Operando compatible String


Si deseas obtener una lista de todos los literales de string de los tipos de recursos admitidos, consulta Atributos de recursos para condiciones de IAM.

Análisis La variable resource.type, si se usa, está diseñada para realizar comparaciones de igualdad o desigualdad.

Nota: Las funciones .startsWith(<prefix string>) y .endsWith(<suffix string>) no están diseñadas para usarse con el atributo resource.type. No se recomienda debido a que puede haber resultados inesperados en la evaluación.

Ejemplos

Ejemplo 1:


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

Ejemplo 2:


(resource.type == "compute.googleapis.com/Image" ||
resource.type == "compute.googleapis.com/Disk")
Tipos de recursos admitidos
Cloud Bigtable
  • Clústeres
  • Instancias
  • Tablas
Cloud Key Management Service
  • Versiones de claves criptográficas
  • Claves criptográficas
  • Llaveros de claves
Cloud Spanner
  • Bases de datos
  • Instancias
Cloud Storage
  • Buckets
  • Objetos
Compute Engine
  • Servicios de backend (globales y regionales)
  • Firewalls
  • Reglas de reenvío (globales y regionales)
  • Imágenes
  • Plantillas de instancia
  • Instancias
  • Discos persistentes (regionales y zonales)
  • Instantáneas
  • Proxies HTTP(S) de destino (globales y regionales)
  • Proxies SSL de destino
  • Proxies TCP de destino
Google Cloud Ubicaciones1
Identity‑Aware Proxy
  • Todos los servicios de backend y todas las aplicaciones de App Engine
  • Todos los recursos de túnel
  • Todas las zonas de túnel
  • Todos los servicios web
  • Versiones del servicio de app de App Engine
  • Servicios de app de App Engine
  • Servicios de backend de Compute Engine
  • Instancias de túneles
Pub/Sub Lite
  • Ubicaciones
  • Suscripciones
  • Temas
Resource Manager Proyectos
Secret Manager
  • Versiones de secretos
  • Secrets

1 Cloud Key Management Service usa este tipo de recurso como superior de los recursos de llavero de claves.

Atributo resource.name

El atributo resource.name te permite establecer una condición basada en todo el nombre de un recurso o en una parte de él.

El atributo resource.name solo está disponible para tipos de recursos específicos, que se enumeran en la tabla que está a continuación. Recomendamos que limites la aplicabilidad de la condición del tipo de recurso deseado. Si una función contiene permisos para un tipo de recurso que no proporciona el atributo resource.name, debes asegurarte de que esos permisos no estén restringidos por la parte de la condición que verifica resource.name.

En el siguiente ejemplo, se muestra cómo garantizar este comportamiento. En este ejemplo, la condición permite el acceso a todos los tipos de recursos, excepto los buckets y objetos de Cloud Storage. Por el contrario, para los buckets y los objetos, la condición solo permite el acceso al bucket example-bucket y a los objetos que contienen lo siguiente:

(resource.type != 'storage.googleapis.com/Bucket' &&
 resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')

Ten en cuenta que la primera parte de la condición verifica que el recurso no sea ni un bucket ni un objeto. Si el recurso tiene un tipo diferente, la condición completa se evalúa como true, sin importar el nombre del recurso.

Además, ten en cuenta que la condición verifica el atributo resource.type, no el atributo resource.service. Estos son los beneficios de verificar el atributo resource.type:

  • Limita la verificación de resource.name al conjunto de recursos adecuado. Por ejemplo, si deseas otorgar acceso a las instancias de Compute Engine con un nombre específico, tiene sentido excluir todos los tipos de recursos que no sean instancias de Compute Engine.
  • Impide que el permiso de la condición cambie si un servicio agrega nuevos tipos de recursos en el futuro.

Puedes usar la función extract() para extraer un valor del nombre de un recurso. Por ejemplo, puedes extraer un ID del proyecto del nombre de recurso de una instancia de VM de Compute Engine y, luego, escribir una expresión de condición que haga referencia al ID del proyecto. Para obtener más información, consulta Extrae valores de atributos en esta página.

Variable del atributo resource.name
Tipo de atributo String
Operadores admitidos startsWith(), endsWith(), extract()==!=
Operando compatible

String

Cada tipo de recurso usa un formato específico para el nombre del recurso. Para obtener una lista de los formatos, consulta Formato de nombre de recurso.

Análisis

resource.name contiene el nombre del recurso relativo para el recurso de destino de la solicitud. El nombre del recurso relativo es una ruta de URI sin barra diagonal inicial (/).

La función startsWith() toma el valor literal de la string de prefijo que se evaluará en función de resource.name.

La función endsWith() toma el valor literal de la string de sufijo que se evaluará en función de resource.name.

La función extract() usa una plantilla de extracción para extraer una parte de resource.name. Para obtener detalles consulta la sección Extraer valores de nombres de recursos de esta página.

Los operadores == y != se usan para la comparación con la totalidad de resource.name o con una parte extraída de resource.name.

Ejemplos

Ejemplo 1 (para una instancia de VM de Compute Engine):


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

Ejemplo 2 (para un bucket de Cloud Storage):


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

Ejemplo 3 (para un objeto de Cloud Storage):


resource.name.endsWith(".jpg")

Ejemplo 4 (para varios tipos de recursos):


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

Ejemplo 5 (para un bucket de Cloud Storage):


resource.name != "projects/_/buckets/secret-bucket-123"
Tipos de recursos admitidos
Cloud Bigtable
  • Clústeres
  • Instancias
  • Tablas
Cloud Key Management Service
  • Claves criptográficas
  • Versiones de claves criptográficas
  • Llaveros de claves
Cloud Spanner
  • Bases de datos
  • Instancias
Cloud Storage
  • Buckets
  • Objetos
Compute Engine
  • Servicios de backend (globales y regionales)
  • Firewalls
  • Reglas de reenvío (globales y regionales)
  • Imágenes
  • Plantillas de instancia
  • Instancias
  • Discos persistentes (regionales y zonales)
  • Instantáneas
  • Proxies HTTP(S) de destino (globales y regionales)
  • Proxies SSL de destino
  • Proxies TCP de destino
Pub/Sub Lite
  • Ubicaciones
  • Suscripciones
  • Temas
Secret Manager
  • Versiones de secretos
  • Secrets

Etiquetas de recursos

Las funciones para etiquetas de recursos te permiten establecer una condición basada en las etiquetas adjuntas a un recurso o que el recurso hereda. Por ejemplo, puedes configurar una condición que otorgue una función solo para los recursos que tienen la etiqueta env: prod adjunta. Para obtener más información sobre cómo controlar el acceso con etiquetas, consulta Etiquetas y control de acceso.

Cada etiqueta está compuesta por una clave y un valor. Existen algunos tipos de identificadores diferentes para cada clave y valor:

  • Un ID permanente, que es único de forma global y no se puede reutilizar. Por ejemplo, una clave de etiqueta podría tener el ID permanente tagKeys/123456789012 y un valor de etiqueta podría tener el ID permanente tagValues/567890123456.
  • Un nombre corto. El nombre corto para cada clave debe ser único dentro de la organización, y el nombre corto de cada valor debe ser único para su clave asociada. Por ejemplo, una clave de etiqueta podría tener el nombre corto env y un valor de etiqueta podría tener el nombre corto prod.
  • Un nombre con espacio de nombres, que agrega el ID numérico de tu organización al nombre corto de una clave de etiqueta. Por ejemplo, una clave de etiqueta podría tener el nombre con espacio de nombres 123456789012/env. Obtén más información sobre cómo obtener el ID de tu organización.

Para obtener orientación sobre cómo elegir qué tipo de identificador usar en tus condiciones, consulta Identificadores y definiciones de etiquetas.

Puedes usar las siguientes funciones para trabajar con etiquetas:

Función Tipo Descripción
resource.hasTagKey String --> bool

Función:

Verifica si el recurso para la solicitud tiene una etiqueta con la clave especificada. La clave de etiqueta se busca por su nombre con espacio de nombres. Para verificar una clave de etiqueta con su ID permanente, usa la función resource.hasTagKeyId().

Parámetro: String: el nombre con espacio de nombres de la clave de la etiqueta, con el ID numérico de la organización y una barra diagonal como prefijo. Por ejemplo, 123456789012/env.

Ejemplo:

resource.hasTagKey('123456789012/env')
Muestra true si el recurso de la solicitud tiene una etiqueta con la clave env.

resource.hasTagKeyId String --> bool

Función:

Verifica si el recurso para la solicitud tiene una etiqueta con la clave especificada. La clave de etiqueta se busca por su ID permanente. Para verificar una clave de etiqueta con su nombre de espacio de nombres, usa la función resource.hasTagKey().

Parámetro: String: el ID permanente para la clave de la etiqueta. Por ejemplo, tagKeys/123456789012.

Ejemplo:

resource.hasTagKeyId('tagKeys/123456789012')
Muestra true si el recurso de la solicitud tiene una etiqueta con la clave tagKeys/123456789012.

resource.matchTag (String, String) --> bool

Función:

Verifica si el recurso para la solicitud tiene una etiqueta con la clave y el valor especificados. La clave se busca por su nombre con espacio de nombres, y el valor se busca por su nombre corto. Para verificar una clave y un valor de etiqueta con sus ID permanentes, usa la función resource.matchTagId().

Parámetros:

El primer parámetro de string es el nombre con espacio de nombres para la clave de la etiqueta, con el ID numérico de la organización y una barra diagonal como prefijo. Por ejemplo, 123456789012/env.

El segundo parámetro de string es el nombre corto del valor de la etiqueta. Por ejemplo: prod.

Ejemplo:

resource.matchTag('123456789012/env', 'prod')
Muestra true si el recurso de la solicitud tiene una etiqueta con la clave 123456789012/env y el valor prod.

resource.matchTagId (String, String) --> bool

Función:

Verifica si el recurso para la solicitud tiene una etiqueta con la clave y el valor especificados. La clave y el valor se buscan por sus ID permanentes. Para verificar una clave de etiqueta con su nombre de espacio de nombres y un valor con su nombre corto, usa la función resource.matchTag().

Parámetros:

El primer parámetro de string es el ID permanente para la clave de la etiqueta. Por ejemplo: tagKeys/123456789012.

El segundo parámetro de string es el ID permanente para el valor de la etiqueta. Por ejemplo: tagValues/567890123456.

Ejemplo:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')
Muestra true si el recurso de la solicitud tiene una etiqueta con la clave tagKeys/123456789012 y el valor tagValues/567890123456.

Atributos de solicitud

Los atributos de solicitud te permiten crear condiciones que evalúan detalles sobre la solicitud, como su nivel de acceso, su fecha y hora, la dirección IP y el puerto de destino (para túneles TCP de IAP) o el host de URL o la ruta de acceso esperados (para IAP).

Atributo de niveles de acceso

El atributo de niveles de acceso permite a los usuarios configurar una condición que requiera que una solicitud cumpla con niveles de acceso específicos para poder autorizarse.

El atributo de niveles de acceso se deriva de los atributos de la solicitud, como la dirección IP de origen, los atributos del dispositivo, la hora del día y demás. Por ejemplo, un nivel de acceso llamado fullyTrusted podría requerir que el dispositivo que realice la solicitud sea propiedad de la empresa y tenga un bloqueo de pantalla. Un nivel de acceso onNetwork podría requerir que el dispositivo que realice la solicitud se origine en un rango de direcciones IP en particular. Consulta los documentos de Access Context Manager para obtener más información sobre niveles de acceso.

El atributo de niveles de acceso solo está disponible cuando usas Identity-Aware Proxy para acceder a una instancia de túnel o a una aplicación web que se ejecuta en servicios de backend de App Engine o Compute Engine. Más específicamente, el atributo de niveles de acceso solo está disponible para las solicitudes que verifican uno de estos permisos:

  • iap.tunnelInstances.accessViaIAP
  • iap.webServiceVersions.accessViaIAP

Puedes usar el atributo de niveles de acceso cuando otorgues de forma condicional las siguientes funciones predefinidas:

  • Usuario de túnel protegido con IAP (roles/iap.tunnelResourceAccessor)

    Contiene un solo permiso, iap.tunnelInstances.accessViaIAP.

  • Usuario de aplicación web protegida con IAP (roles/iap.httpsResourceAccessor)

    Contiene un solo permiso, iap.webServiceVersions.accessViaIAP.

También puedes usar el atributo de niveles de acceso para otorgar condicionalmente una función personalizada que contenga estos permisos. La función personalizada no debe contener otros permisos.

Atributo request.auth.access_levels

Variable del atributo request.auth.access_levels
Tipo de atributo Lista de strings
Operadores admitidos in
Operando compatible String
Análisis

A la derecha aparece la variable request.auth.access_levels y, a la izquierda del operador in, una string que representa un nombre completo del nivel de acceso definido.

El nombre completo de un nivel de acceso emplea como formato el siguiente patrón:
"accessPolicies/<policyNumber>/accessLevels/<shortName>"

Nota: La string del nivel de acceso distingue entre mayúsculas y minúsculas y debe coincidir de forma exacta con la configuración de Access Context Manager para lograr el efecto deseado. Por ejemplo, “accessPolicies/199923665455/accessLevels/CorpNet” es un valor literal de string válido para usar en la expresión. Sin embargo, “accessPolicies/199923665455/accesslevels/CorpNet” no logrará el efecto deseado.

Ejemplo

"accessPolicies/199923665455/accessLevels/CorpNet"
in request.auth.access_levels
Tipos de recursos admitidos Disponible para las solicitudes que usan Identity-Aware Proxy a fin de acceder a una instancia de túnel o una aplicación web que se ejecuta en App Engine

Atributos de API

Los atributos de API te ayudan a administrar el acceso según los datos proporcionados por una API o un servicio de Google Cloud en particular.

Por ejemplo, cuando usas Cloud Storage para enumerar los objetos en un bucket, puedes usar el parámetro prefix en la solicitud a fin de incluir solo los objetos cuyos nombres comienzan con un prefijo específico. Si usas límites de acceso a las credenciales a fin de restringir los permisos a las credenciales de corta duración, puedes crear un límite de acceso a las credenciales que limite los permisos para enumerar objetos mediante la verificación del atributo storage.googleapis.com/objectListPrefix de la API. Este atributo de la API contiene el valor del parámetro prefix de la solicitud.

Para ver ejemplos de cuándo es posible que necesites usar atributos de API en una condición, consulta las siguientes páginas:

Consulta las siguientes secciones para ver qué servicios reconocen atributos de API.

Funciones para atributos de API

Puedes usar la siguiente función para trabajar con atributos de API:

Función Tipo Descripción
api.getAttribute (String, T) --> T

Función: Obtiene el atributo de API solicitado.

Parámetros:

String: El atributo de la API que se debe obtener. Para obtener los valores compatibles, consulta los atributos de API de Cloud Storage y los atributos de API de IAM en esta página.

T: El valor predeterminado que se debe usar si el atributo de la API no está disponible. Usa el mismo tipo que el valor del atributo de la API. Por ejemplo, si el valor del atributo de la API es una string, puedes usar una string vacía o una string de marcador de posición como undefined.

Ejemplo:

api.getAttribute("storage.googleapis.com/objectListPrefix", "")
El valor del parámetro prefix que se usó para enumerar objetos en un bucket de Cloud Storage. En el caso de las solicitudes que omiten el parámetro prefix y, para otros tipos de solicitud, muestra una string vacía.

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

Función: Comprueba que una lista contenga solo los elementos permitidos o un subconjunto de esos elementos.

Parámetros:

List<T>: Una lista de elementos con el tipo T. Llama a la función en una lista que muestra api.getAttribute(). El parámetro es una lista de elementos que el atributo de API puede contener.

Ejemplo:

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

Verifica si la solicitud otorgará o revocará una función que no sea editor de Pub/Sub (roles/pubsub.editor) o publicador de Pub/Sub (roles/pubsub.publisher). En la siguiente tabla, se muestra el resultado para los diferentes valores de solicitud:

Funciones otorgadas o revocadas Resultado
Ninguna

true

Si no se modifican funciones, api.getAttribute() muestra el valor predeterminado. Para este atributo, el valor predeterminado es siempre una lista vacía. Por definición, una lista vacía no contiene valores que no estén en la lista de entidades permitidas.

roles/pubsub.editor

true

La función se encuentra en la lista de entidades permitidas.

roles/pubsub.editor
roles/pubsub.publisher

true

Ambas funciones están en la lista de entidades permitidas.

roles/billing.admin

false

La función no se encuentra en la lista de entidades permitidas.

roles/billing.admin
roles/pubsub.editor

false

Una función está en la lista de entidades permitidas, pero la otra no.

Atributos de API de Cloud Storage

Cloud Storage proporciona el siguiente atributo de API.

Atributo Tipo Descripción
storage.googleapis.com/objectListPrefix String

En el caso de una solicitud de creación de una lista de objetos en un bucket, contiene el valor del parámetro prefix de la solicitud. El atributo no se define si la solicitud omite el parámetro prefix.

Para otros tipos de solicitudes, el atributo no se define.

Servicios que reconocen este atributo:

Solo Cloud Storage reconoce este atributo.

Atributos de la API de IAM

IAM proporciona el siguiente atributo de API:

Atributo Tipo Descripción
iam.googleapis.com/modifiedGrantsByRole Matriz

Para una solicitud a fin de establecer la política de IAM de un recurso, este atributo contiene los nombres de las funciones de las vinculaciones que la solicitud modifica.

Para otros tipos de solicitudes, el atributo no se define.

Recursos que aceptan este atributo:

Los siguientes recursos aceptan condiciones con el atributo modifiedGrantsByRole en sus políticas de IAM:

  • Proyectos
  • Carpetas
  • Organizaciones

Servicios que reconocen este atributo:

Los siguientes servicios reconocen el atributo modifiedGrantsByRole:

  • Notebooks
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API de Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API de Cloud Runtime Configuration
  • Compute Engine
  • Análisis del contenedor
  • Dataproc
  • Earth Engine
  • Game Servers
  • Administración de identidades y accesos
  • Identity-Aware Proxy
  • Servicio administrado para Microsoft Active Directory
  • Resource Manager
  • Secret Manager
  • Administración de servicio

Atributo de fecha y hora

El atributo de fecha y hora se usa para configurar el acceso programado, con vencimiento o de duración limitada en los recursos de Google Cloud.

Este atributo está disponible para todos los servicios y tipos de recursos de Google Cloud.

Operadores y funciones básicas compatibles

La variable de atributo que se usa para el atributo de fecha y hora es request.time, que es del tipo marca de tiempo. También puedes convertir strings en los tipos marca de tiempo y duración.

Funciones básicas compatibles Tipo Descripción
date String --> Marca de tiempo

Función: convierte una string en una marca de tiempo.
Parámetro: string con el formato YYYY-MM-DD, donde YYYY es el año, MM es el mes de dos dígitos y DD es el día de dos dígitos. La marca de tiempo resultante contiene la fecha y la hora 00:00:00.000 UTC especificadas.

Ejemplo:

date("2020-02-01")
Marca de tiempo que representa la fecha 2020-02-01 y la hora 00:00:00.000 UTC.

duration String --> Duración

Función: convierte una string en una duración.
Parámetro: string que contiene una cantidad de segundos, seguida de s.

Ejemplos:

duration("90s")
Duración que representa 1.5 minutos.

duration("2592000s")
Duración que representa 30 días.

timestamp

String --> Marca de tiempo

Función: convierte una string en una marca de tiempo.
Parámetro: string que respeta el formato UTC (RFC 3339).

Ejemplos:

timestamp("1985-04-12T23:20:50.52Z")
Representa la conversión de la marca de tiempo de 20 minutos y 50.52 segundos después de la hora 23 del 12 de abril de 1985 con el formato UTC.

timestamp("1996-12-19T16:39:57-08:00")
Representa la conversión de la marca de tiempo de 39 minutos y 57 segundos después de la hora 16 del 19 de diciembre de 1996 con un desplazamiento de -08:00 respecto de UTC. Ten en cuenta que este valor es equivalente a 1996-12-20T00:39:57Z en el formato UTC. Este desplazamiento no refleja la zona horaria, por ejemplo, el desplazamiento de la hora estándar del Pacífico es -08:00 durante el invierno y -07:00 durante el verano, con el fin de respetar el horario de verano.

Nota importante:
La string debe respetar los requisitos de formato de la string de UTC. Cualquier string que no respete el formato UTC provocará que la función timestamp() no logre convertirse en un valor de marca de tiempo. Como resultado, la evaluación de la condición en la expresión que use timestamp() dará como resultado una autorización con errores.

<, <=, >, >=

(Marca de tiempo, Marca de tiempo) --> Booleano

Función: comparación general con el tipo marca de tiempo.

Ejemplos:

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")
Mediante estas expresiones se establece la comparación de la fecha y hora de la solicitud con una marca de tiempo específica, que es el 12 de abril de 2018 en formato UTC. Por lo general se usa con el fin de configurar una “hora de inicio” o una “hora de vencimiento”, que es una condición para la concesión de la función.

Nota: Debido a la precisión de la hora en milisegundos, incluir la comparación de igualdad y desigualdad (==!=) no tiene un efecto significativo.

+, - (Marca de tiempo, Duración) --> Marca de tiempo

Función: suma o resta una duración de una marca de tiempo.

Ejemplos:

timestamp("2018-04-12T14:30:00.00Z") + duration("1800s")
Busca la marca de tiempo que se encuentra 30 minutos después de la hora 14:30:00 GMT de la fecha 2018-04-12.

timestamp("2018-04-12T14:30:00.00Z") - duration("5184000s")
Busca la marca de tiempo que se encuentra 60 días antes de la hora 14:30:00 GMT de la fecha 2018-04-12.

Operadores y funciones avanzadas compatibles

La variable de atributo que se usa para el atributo de fecha y hora es request.time, que es del tipo marca de tiempo.

Funciones avanzadas compatibles Tipo Descripción

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

(Número entero, Número entero) --> Booleano

Función: comparación general con el tipo número entero.

Análisis:
Este conjunto de operadores de comparación para números enteros se usa, sobre todo, en el conjunto restante de “funciones avanzadas” con funciones de marca de tiempo. Todas estas funciones (que se definen en el resto de esta tabla) convierten una parte determinada del valor de la marca de tiempo en un número entero. Se proporcionan más ejemplos para cada función avanzada con el fin de sugerir el uso común.

getDate, getDayOfMonth, getDayOfWeek, getDayOfYear

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Funciones:
getDate: obtiene el día del mes a partir del valor de la marca de tiempo mediante la indexación basada en uno. Es decir, el primer día del mes es 1.

getDayOfMonth: obtiene el día del mes a partir del valor de la marca de tiempo mediante la indexación basada en cero. Es decir, el primer día del mes es 0.

getDayOfWeek: obtiene el día de la semana a partir del valor de la marca de tiempo, considerando como cero el domingo. Es decir, domingo(0), lunes(1), …, sábado(6).

getDayOfYear: obtiene el día del año a partir del valor de la marca de tiempo mediante la indexación basada en cero. Es decir, el primer día del año es 0.

Parámetros:
String como zona horaria: conversión basada en la fecha con zona horaria. Nota: Si no se especifica la zona horaria, la conversión se basará en la fecha en formato UTC.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Ejemplo:

request.time.getDayOfWeek() > 0 && request.time.getDayOfWeek() < 6
Esta expresión se evalúa como verdadera si la solicitud entrante se envía entre el lunes y el viernes a la hora UTC.

Ejemplo:

request.time.getDayOfWeek("Europe/Berlin") > 0 && request.time.getDayOfWeek(Europe/Berlin") < 6
Esta expresión se evalúa como verdadera si la solicitud entrante se envía entre el lunes y el viernes en la zona horaria de Berlín.

Ejemplo:

request.time.getDayOfYear("America/Los_Angeles") >= 0 && request.time.getDayOfYear("America/Los_Angeles") < 5
Esta expresión se evalúa como verdadera si la solicitud entrante se envía dentro de los primeros 5 días del año en la zona horaria de Los Ángeles.

getFullYear

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Función: obtiene el año a partir de la fecha.

Parámetros:
Versión 1: no tiene parámetros. Se obtiene a partir de la fecha en formato UTC.
Versión 2: es una string de zona horaria. Se obtiene a partir de la fecha en la zona horaria.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Ejemplo:

request.time.getFullYear("America/Los_Angeles") == 2018
Esta expresión se evalúa como verdadera si la solicitud entrante se envía el año 2018 en la zona horaria de Los Ángeles.

Ejemplo:

request.time.getFullYear() < 2020
Esta expresión se evalúa como verdadera si la solicitud entrante se envía antes de que finalice el año 2019 en formato UTC.

getHours

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Función: obtiene las horas de la fecha; los valores varían entre 0 y 23.

Parámetros:
Versión 1: no tiene parámetros. Se obtiene a partir de la fecha en formato UTC.
Versión 2: es una string de zona horaria. Se obtiene a partir de la fecha en la zona horaria.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Ejemplo:

request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17
Mediante esta expresión se especifica una condición de horario laboral. Se evalúa como verdadera si la solicitud se envía entre las 9 a.m. y las 5 p.m. en la zona horaria de Berlín.

Nota:

La combinación de getHours() y getDayofWeek() se puede usar a fin de establecer una condición en el horario laboral legal, p. ej. para cumplir con un requisito de jurisdicción.

getMilliseconds

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Función: obtiene los milisegundos de un segundo a partir de la marca de tiempo; los valores varían entre 0 y 999.

Parámetros:
Versión 1: no tiene parámetros. Se obtiene a partir de la fecha en formato UTC.
Versión 2: es una string de zona horaria. Se obtiene a partir de la fecha en la zona horaria.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Nota:

Esta función no es tan útil, ya que su uso está limitado de forma semántica.

getMinutes

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Función: obtiene los minutos de una hora a partir de la marca de tiempo; los valores varían entre 0 y 59.

Parámetros:
Versión 1: no tiene parámetros. Se obtiene a partir de la fecha en formato UTC.
Versión 2: es una string de zona horaria. Se obtiene a partir de la fecha en la zona horaria.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Nota:

Esta función no es tan útil, ya que su uso está limitado de forma semántica.

getMonth

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Función: obtiene los meses de un año a partir de la marca de tiempo; los valores varían entre 0 y 11.

Parámetros:
Versión 1: no tiene parámetros. Se obtiene a partir de la fecha en formato UTC.
Versión 2: es una string de zona horaria. Se obtiene a partir de la fecha en la zona horaria.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Ejemplo:

request.time.getMonth("America/Los_Angeles") == 3
Esta expresión se evalúa como verdadera si la solicitud entrante se envía durante abril en la zona horaria de Los Ángeles.

getSeconds

Marca de tiempo.() --> Número entero

Marca de tiempo.(String) --> Número entero

Función: obtiene los segundos de un minuto a partir de la marca de tiempo; los valores varían entre 0 y 59.

Parámetros:
Versión 1: no tiene parámetros. Se obtiene a partir de la fecha en formato UTC.
Versión 2: es una string de zona horaria. Se obtiene a partir de la fecha en la zona horaria.

Para obtener más información sobre las strings válidas de zona horaria, consulta los Valores admitidos de zona horaria.

Nota:

Esta función no es tan útil, ya que su uso está limitado de forma semántica.

Atributos de puerto o IP de destino

El atributo de puerto o IP de destino permite a los usuarios administrar el acceso en función del puerto o la dirección IP de destino interna para una solicitud.

Por ejemplo, una instancia de VM de Compute Engine puede mapear la dirección IP externa y el puerto 132.168.42.21:3001 a la dirección IP interna y al puerto 10.0.0.1:2300 para uso general. Por el contrario, la dirección IP interna y el puerto 10.0.0.1:22 solo pueden estar disponibles de forma interna para uso administrativo. Puedes usar los atributos de puerto o IP de destino para otorgar diferentes cantidades de acceso según la dirección IP interna y el puerto.

Para obtener más información sobre el reenvío de TCP, consulta la documentación de Identity-Aware Proxy.

Atributo destination.ip

Variable del atributo destination.ip
Tipo de atributo String
Operadores admitidos ==, !=
Operando compatible String
Análisis

La variable destination.ip debería ser una string que represente una dirección IP interna en el formato IPv4.

Nota: Las funciones startsWith(<prefix string of IP>) y endsWith(<suffix string of IP>) no se deben usar con el atributo destination.ip. A pesar de que la configuración de una condición como destination.ip.startsWith(<prefix string of IP>) no generará un error de sintaxis cuando se ejecute una operación setIamPolicy, no se recomienda, ya que puede tener resultados inesperados. No es recomendable que los prefijos coincidan en la string de la IP para realizar una verificación de rango de direcciones IP en CIDR.

Ejemplos

destination.ip == "10.0.0.1"

destination.ip != "10.0.0.1"
Tipos de recursos admitidos Disponible para las solicitudes que usan Identity-Aware Proxy a fin de acceder a una instancia de túnel

Atributo destination.port

Variable del atributo destination.port
Tipo de atributo Número entero
Operadores admitidos ==, !=, <, <=, >, >=
Operando compatible Número entero
Análisis

Se espera que la variable destination.port sea un número entero que represente un número de puerto TCP interno.

Ejemplos

destination.port == 21

destination.port < 3001
Tipos de recursos admitidos Disponible para las solicitudes que usan Identity-Aware Proxy a fin de acceder a una instancia de túnel

Atributos de reglas de reenvío

Los atributos de reglas de reenvío te permiten especificar los tipos de reglas de reenvío que puede crear un miembro. Por ejemplo, puedes permitir que un miembro cree reglas de reenvío para balanceadores de cargas de Google Cloud internos, que controlan el tráfico originado dentro de una red de Google Cloud, pero no para balanceadores de cargas de Google Cloud externos, que controlan el tráfico originado en Internet.

En Cloud Load Balancing, los atributos de reglas de reenvío no afectan la capacidad de crear otros componentes de un balanceador de cargas de Google Cloud, como servicios de backend, proxies de destino, verificaciones de estado y mapas de URL.

Funciones compatibles

Funciones compatibles Tipo Descripción
compute.isForwardingRuleCreationOperation() () --> Booleano

Función: verifica si la solicitud crea una regla de reenvío.

Ejemplos: consulta los ejemplos de compute.matchLoadBalancingSchemes().

compute.matchLoadBalancingSchemes() Arreglo.(String) --> Booleano

Función: verifica si la solicitud afecta a uno de los tipos especificados del esquema de balanceo de cargas. Para encontrar el identificador de cada esquema de balanceo de cargas y los detalles sobre cada esquema, consulta Usa condiciones de IAM en balanceadores de carga de Google Cloud.

Parámetros: arreglo de strings.

Ejemplo:


!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
  ]))
)
  • Si la solicitud no crea una regla de reenvío, otórgale la función al miembro.
  • Si la solicitud crea una regla de reenvío, otórgale la función solo si la regla de reenvío afecta un esquema de balanceo de cargas INTERNAL, INTERNAL_MANAGED o INTERNAL_SELF_MANAGED.

Tipos de recursos admitidos

Este atributo está disponible para solicitudes de creación de uno de estos tipos de recursos:

Servicio Tipos de recursos
Cloud Load Balancing Reglas de reenvío
Cloud VPN Reglas de reenvío (globales y regionales)
Compute Engine Reglas de reenvío (para el reenvío de protocolos)
Traffic Director1 Reglas de reenvío

1 Usa los atributos de recursos para Compute Engine.

Atributo de host o ruta de URL

El atributo de host o ruta de URL permite a los usuarios administrar el acceso en función de la ruta de URL o el host de una solicitud. Por ejemplo, una condición podría especificar que https://example.com es la aplicación principal a la que puede acceder un dominio general de usuarios, mientras que https://hr.example.com/admin se usa para acceder a una página de la aplicación respecto de la cual solo los administradores de recursos humanos tienen el permiso correspondiente.

Atributo request.path

Variable del atributo request.path
Tipo de atributo String
Operadores admitidos ==, startsWith(), endsWith()
Parámetros y operandos admitidos
  • String: ==
  • String de prefijo constante: startsWith()
  • String de sufijo constante: endsWith()
Análisis Nota: No se recomienda el uso del operador !=. No se recomienda realizar una comparación negativa como la que se muestra a continuación:

request.path != "/admin"
En su lugar, se recomienda el uso de la coincidencia de prefijo, como en la instrucción

! request.path.startsWith("/admin")
De esta manera las rutas de URL que tienen como nivel superior “/admin”, como “/admin/payroll/”, están protegidas del acceso no deseado.
Ejemplos

Ejemplo 1:


request.path == "/admin"

request.path == "/admin/payroll"

La string que se usa en la comparación de igualdad (==) de los dos ejemplos anteriores debería tener el formato indicado en los estándares relativos a rutas de URL.

Ejemplo 2:


request.path.startsWith("/admin")

En la función se usa una string que representa el prefijo de una ruta de URL.

Ejemplo 3:


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

En la función se usa una string que representa el sufijo de una ruta de URL.

Tipos de recursos admitidos

Versiones del servicio de app de Identity-Aware Proxy (App Engine)

Disponible para las solicitudes que usan Identity-Aware Proxy a fin de acceder a una aplicación web que se ejecuta en App Engine o Compute Engine

Atributo request.host

Variable del atributo request.host
Tipo de atributo String
Operadores admitidos ==, endsWith()
Parámetros y operandos admitidos
  • String: ==
  • String de sufijo constante: endsWith()
Análisis La función .startsWith(<prefix string>) no está diseñada para usarse con el atributo request.host. A pesar de que la configuración de una condición como request.host.startsWith(<prefix string>) no generará errores de sintaxis cuando se ejecute una operación setIamPolicy, no se recomienda debido a que puede haber resultados inesperados. Del mismo modo, no se recomienda el uso de !=.
Ejemplos

Ejemplo 1:


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

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

La string que se usa en la comparación de igualdad (==) de los dos ejemplos anteriores debería tener el formato indicado en los estándares relativos a strings de URL para el nombre de host de un sitio web.

Ejemplo 2:


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

String que representa el sufijo de un nombre de host de un sitio web.

Tipos de recursos admitidos

Versiones del servicio de app de Identity-Aware Proxy (App Engine)

Disponible para las solicitudes que usan Identity-Aware Proxy a fin de acceder a una versión del servicio de app.

Extrae valores de atributos

Puedes usar la función extract() para extraer un valor de un atributo. Por ejemplo, puedes extraer una parte arbitraria del nombre de un recurso y, luego, escribir una expresión de condición que haga referencia al texto extraído.

Para usar la función extract(), debes proporcionar una plantilla de extracción, que especifica la parte del atributo que se extraerá. Por ejemplo, si deseas extraer un ID del proyecto a partir del nombre del recurso de una instancia de VM de Compute Engine, puedes usar la plantilla projects/{project-id}/.

La plantilla de extracción contiene las siguientes partes:

  • Un identificador, escrito entre llaves, que señala la substring que se debe extraer. Elige un identificador breve y significativo que deje en claro qué valor deseas extraer. Puedes usar letras mayúsculas y minúsculas desde la A hasta la Z, dígitos numéricos, guiones intermedios (-) y guiones bajos (_).

    En la plantilla projects/{project-id}/, el identificador es project-id.

  • Un prefijo, que debe aparecer antes de la substring que se desea extraer (opcional).

    En la plantilla projects/{project-id}/, el prefijo es projects/.

  • Un sufijo, que debe aparecer después de la substring que se desea extraer (opcional).

    En la plantilla projects/{project-id}/, el sufijo es /.

Mediante la función extract(), se muestran valores diferentes en función de si la plantilla de extracción tiene un prefijo, un sufijo o ambos:

Si tiene un prefijo Si tiene un sufijo Valor extraído
Nombre completo del recurso
Caracteres que se encuentran después de la primera aparición del prefijo, o bien una string vacía si no hay caracteres después del prefijo.
Caracteres que se encuentran antes de la primera aparición del sufijo, o bien una string vacía si no hay caracteres antes del sufijo.
Caracteres que se encuentran entre la primera aparición del prefijo y la primera aparición posterior del sufijo, o bien una string vacía si no hay caracteres entre el prefijo y el sufijo.

Si especificas un prefijo o sufijo que no aparece en el atributo, o si el sufijo aparece solo antes del prefijo, la función extract() muestra null.

En los siguientes ejemplos, se muestra el resultado de varias plantillas de extracción diferentes. En estos ejemplos, se hace referencia a un nombre de recurso para un objeto de Cloud Storage, projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876:

Plantilla de extracción Resultado
/order_date={date}/ 2019-11-03
buckets/{name}/ acme-orders-aaa
/orders/{empty}order_date String vacía
{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 extraes una string que representa una fecha, puedes usar los operadores y funciones de fecha y hora de esta página para convertir el valor extraído en una marca de tiempo. Para ver ejemplos, consulta Configura el acceso basado en recursos.