Referencia de atributos para las condiciones de IAM

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

Atributos de condición compatibles

En la siguiente tabla se resumen los atributos compatibles y se indican qué servicios de Google Cloud reconoce cada atributo:

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

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 recursos

El nombre, el tipo y los atributos del servicio de los recursos permiten otorgar acceso a algunos recursos, pero no a todos, dentro de un proyecto, una carpeta o una organización.

  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Cloud Key Management Service
  • Resource Manager (solo tipo de recurso y servicio de recurso)
  • Secret Manager

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

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 organización, de carpeta o de proyecto, ten en cuenta que si envías una solicitud a un servicio y el servicio no reconoce un atributo de una condición, la condición se evaluará siempre como false. Por ejemplo, la condición destination.port == 21 se evalúa siempre como false en BigQuery, ya que BigQuery no reconoce los atributos del puerto o la IP de destino.

Si deseas evitar este problema, usa los atributos de recursos que se mencionan en esta página para limitar el permiso de la condición. Por ejemplo, la condición resource.service != "iap.googleapis.com" || destination.port == 21 se evalúa como true en todos los servicios, excepto en Identity-Aware Proxy. En cambio, en Identity-Aware Proxy, se verifica el puerto de destino mediante la condición.

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

Este atributo está disponible en Identity-Aware Proxy.

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

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 específicos.

Por ejemplo, cuando usas Cloud Storage para enumerar los objetos en un depósito, puedes usar el parámetro prefix en la solicitud a fin de incluir solo los objetos cuyos nombres comienzan con un prefijo específico. Cuando escribes una condición, puedes agregar verificaciones según el atributo storage.googleapis.com/objectListPrefix, que contiene el valor del parámetro prefix.

Para ver un ejemplo de cuándo es posible que necesites usar atributos de API en una condición, consulta Limita los permisos cuando se enumeran objetos.

Cloud Storage admite 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 la API de Cloud Storage 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 depósito 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.

Atributos de la API de Cloud Storage

Cloud Storage proporciona el siguiente atributo de API:

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

Para que una solicitud cree una lista de objetos en un depósito, 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.

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.

Todos los servicios de Google Cloud admiten este atributo de condición.

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 de una solicitud. Por ejemplo, una instancia de VM de Compute Engine podría exponer una dirección IP externa 10.0.0.1 en el puerto 3001 para uso general, al tiempo que la dirección IP 10.0.0.2 y el puerto 22 se expondrían solo para uso administrativo.

Consulta los documentos de Identity-Aware Proxy para obtener más información sobre el reenvío de TCP.

Este atributo es compatible con 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 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"

Atributo destination.port

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

La variable destination.port debería ser un número entero que represente el número de un puerto TCP.

Ejemplos

destination.port == 21

destination.port < 3001

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.

Los atributos de reglas de reenvío se admiten en los siguientes servicios de Google Cloud:

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 a un esquema de balanceo de cargas INTERNAL, INTERNAL_MANAGED o INTERNAL_SELF_MANAGED.

Atributos de recursos

Por lo general, el nombre y el tipo de recurso, así como los atributos de servicio 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.

Los atributos de recursos son compatibles con los siguientes servicios de Google Cloud:

  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Cloud Key Management Service
  • Resource Manager (solo tipo de recurso y servicio de recurso)
  • Secret Manager

Si deseas obtener detalles sobre los atributos de recursos que puedes usar en cada servicio, consulta Atributos de recursos para condiciones de IAM.

Atributo resource.name

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 string del prefijo que se evaluará respecto de resource.name.

La función endsWith() toma el valor literal de string del sufijo que se evaluará respecto 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 depósito 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 depósito de Cloud Storage):


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

Atributo resource.service

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 servicio 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"

Atributo resource.type

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")

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.

Este atributo es compatible con Identity-Aware Proxy.

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.

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.

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.