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. |
|
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 (consulta la Asistencia para condiciones heredadas) |
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 |
---|---|---|
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 y la hora del día. Por ejemplo, un nivel de acceso |
Identity-Aware Proxy |
|
Administra el acceso según los datos proporcionados por un servicio o una API de Google Cloud específicos. |
|
|
Establece el acceso programado, con vencimiento o de duración limitada a los recursos de Google Cloud. |
Todos los servicios de Google Cloud (consulta la Asistencia para condiciones heredadas) |
|
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 Se usa para el reenvío de TCP de Identity-Aware Proxy. |
Identity-Aware Proxy |
|
Especifica los tipos de reglas de reenvío que puede crear una principal. Por ejemplo, puedes permitir que una principal 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. |
|
|
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 |
|
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 permisos. Sin embargo, puedes agregar vinculaciones de roles condicionales a nivel de organización, de carpeta o de proyecto. Otros recursos heredarán esas vinculaciones de roles mediante la jerarquía de recursos. Para ver más detalles, consulta Tipos de 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. Si una parte de una condición usa un atributo que no está disponible, esa parte de la condición nunca se interpreta como otorgar acceso. 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
. Para obtener una lista de valores admitidos, consulta Valores de servicios de recursos.
Variable del atributo | resource.service |
---|---|
Tipo de atributo |
Para obtener una lista de valores admitidos, consulta Valores de servicios de recursos. |
Operadores admitidos | , |
Detalles |
Cuando uses el atributo resource.type en las condiciones, verifica la igualdad exacta ( ) o la desigualdad exacta ( ) con el atributo.
Otras comparaciones, como la verificación de un prefijo o sufijo, pueden brindarte resultados inesperados.
|
Ejemplo |
Muestra resource.service == "compute.googleapis.com" |
Servicios compatibles |
|
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
. Para obtener una lista de valores admitidos, consulta Valores de tipos de recursos.
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 |
Para obtener una lista de valores admitidos, consulta Valores de tipos de recursos. |
||||||||||||||||||||||||||||||||||||||||
Operadores admitidos | , |
||||||||||||||||||||||||||||||||||||||||
Detalles |
Cuando uses el atributo resource.type en las condiciones, verifica la igualdad exacta ( ) o la desigualdad exacta ( ) con el atributo. Otras comparaciones, como la verificación de un prefijo o sufijo, pueden brindarte resultados inesperados.
|
||||||||||||||||||||||||||||||||||||||||
Ejemplos |
Muestra resource.type != "compute.googleapis.com/Image"
Muestra (resource.type == "compute.googleapis.com/Image" || resource.type == "compute.googleapis.com/Disk") |
||||||||||||||||||||||||||||||||||||||||
Tipos de recursos admitidos |
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. Para obtener una lista de los formatos de nombre de recurso, consulta Formato de nombre de recurso.
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.
Por último, ten en cuenta que la condición usa la función startsWith()
para evaluar el nombre del recurso, en lugar de verificar la igualdad con el operador . Debido a que la condición analiza el inicio del nombre del recurso, coincide con un bucket y con los objetos en ese bucket. Si se verifica la igualdad, solo coincide con el bucket.
No puedes usar caracteres comodín como *
para hacer coincidir varios nombres de recursos. Considera las siguientes alternativas:
Usa la función
extract()
para extraer un valor de un nombre de 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.
Usa la función
startsWith()
oendsWith()
para escribir una condición que evalúe el inicio o el final del nombre del recurso.
Variable del atributo | resource.name |
||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo de atributo |
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. |
||||||||||||||||||||||||||||||||||
Operadores y funciones compatibles |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||
Detalles |
La función
La función
La función Los operadores |
||||||||||||||||||||||||||||||||||
Ejemplos |
Muestra resource.name != "projects/_/buckets/secret-bucket-123"
Muestra resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
Muestra resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
Muestra resource.name.endsWith(".jpg") Muestra el nombre o el número del proyecto si está presente: resource.name.extract("projects/{project}/") |
||||||||||||||||||||||||||||||||||
Tipos de recursos admitidos |
|
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 permanentetagValues/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 cortoprod
. -
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.
Las condiciones en las etiquetas son compatibles con todos los servicios y los tipos de recursos de Google Cloud. Para obtener información sobre cómo aplicar condiciones de etiquetas a los recursos que no las admiten directamente, consulta Compatibilidad para condiciones heredadas en esta página.
Puedes usar las siguientes funciones para establecer condiciones basadas en etiquetas:
Function | Descripción |
---|---|
resource.hasTagKey(
bool
|
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(
bool
|
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.matchTag(
bool
|
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(
bool
|
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
|
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 establecer una condición que requiera que una solicitud cumpla con uno o más niveles de acceso para que se la autorice.
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 y la hora del día. 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 | list <string > |
Operadores admitidos | in |
Detalles |
Para verificar si una solicitud cumple con un nivel de acceso específico, usa el operador ACCESS_LEVEL_FULL_NAME in request.auth.access_levels El nombre completo de un nivel de acceso usa el siguiente formato: accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL |
Ejemplo |
Muestra "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, un grupo de destino de túnel, una aplicación web que se ejecuta en Google Cloud Load Balancing 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:
- Limita los permisos cuando se genera una lista de objetos
- Establece límites en el otorgamiento de funciones
No todos los servicios reconocen los atributos de API. En las siguientes secciones, se indica qué servicios reconocen cada atributo de la API.
Funciones para atributos de API
Puedes usar la siguiente función para trabajar con atributos de API:
Function | Descripción | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
Obtiene el atributo de API solicitado.
|
||||||||||||
hasOnly(
bool |
Comprueba que una lista contenga solo los
elementos permitidos o un subconjunto de esos elementos. Llama a la función en una
lista que muestra
|
Atributos de API de Cloud Storage
Cloud Storage proporciona el siguiente atributo de API.
Variable del atributo | storage.googleapis.com/objectListPrefix |
---|---|
Tipo de atributo | string |
Detalles |
En el caso de una solicitud de creación de una lista de objetos en un bucket, contiene el valor del parámetro Para otros tipos de solicitudes, el atributo no se define. |
Servicios que reconocen este atributo | Cloud Storage |
Atributos de la API de IAM
IAM proporciona el siguiente atributo de API:
Variable del atributo | iam.googleapis.com/modifiedGrantsByRole |
---|---|
Tipo de atributo | list<string> |
Detalles |
Para una solicitud a fin de establecer la política de permisos de un recurso, este atributo contiene los nombres de los roles de las vinculaciones de roles que la solicitud modifica. Para otros tipos de solicitudes, el atributo no se define. |
Tipos de recursos que aceptan este atributo |
Los siguientes tipos de recursos aceptan condiciones con el atributo
|
Servicios que reconocen este atributo |
Los siguientes servicios reconocen el atributo
|
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 es compatible para todos los servicios y tipos de recursos de Google Cloud. A fin de obtener información sobre cómo aplicar condiciones de fecha y hora a los recursos que no las admiten directamente, consulta Compatibilidad para condiciones heredadas en esta página.
El atributo request.time
contiene la marca de tiempo de la solicitud. Puedes comparar esta marca de tiempo con otra marca de tiempo o con un período.
En las siguientes secciones, se enumeran las funciones que puedes usar para establecer condiciones basadas en marcas de tiempo y duraciones.
Crea, compara y modifica marcas de tiempo y duraciones
Función u operador | Descripción |
---|---|
date(
Timestamp |
Convierte una fecha de una
|
duration(
Duration |
Convierte una cantidad de tiempo de una
|
timestamp(
Timestamp |
Convierte una
|
, , , |
Compara dos valores
|
|
Suma o resta una
|
Extrae información de una marca de tiempo
Las funciones de esta sección te permiten extraer información de una marca de tiempo, como el día de la semana en el que se encuentra la marca de tiempo.
En las condiciones de IAM, todas las marcas de tiempo están en UTC. Sin embargo, es posible que desees extraer información según una zona horaria diferente. Por ejemplo, es posible que desees saber si una marca de tiempo UTC corresponde a un lunes en la zona horaria de Berlín, Alemania.
Para especificar una zona horaria diferente, pasa la zona horaria a la función. Usa un nombre o una compensación UTC de la base de datos de zonas horarias de IETF. Por ejemplo, puedes usar Europe/Berlin
o +01:00
para la hora central europea (CET).
Operadores y funciones compatibles | Descripción |
---|---|
Timestamp.getDate(
int
|
Obtiene el día del mes de la
|
Timestamp.getDayOfMonth(
int
|
Obtiene el día del mes de la
|
Timestamp.getDayOfWeek(
int
|
Obtiene el día de la semana de la
|
Timestamp.getDayOfYear(
int
|
Obtiene el día del año de la
|
Timestamp.getFullYear(
int
|
Obtiene el año de la
|
Timestamp.getHours(
int
|
Obtiene la hora del día de la
Puedes combinar esta función con
|
Timestamp.getMilliseconds(
int
|
Obtiene la cantidad de milisegundos de la
|
Timestamp.getMinutes(
int
|
Obtiene la cantidad de minutos después de la hora de la
|
Timestamp.getMonth(
int
|
Obtiene el mes del año de la
|
Timestamp.getSeconds(
int
|
Obtiene la cantidad de segundos de la
|
, , , |
Compara el resultado de dos funciones de esta tabla. |
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 | , |
Detalles |
La variable |
Ejemplos |
Muestra destination.ip == "10.0.0.1"
Muestra 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 | int |
Operadores admitidos | , , , , , |
Detalles |
La variable |
Ejemplos |
Muestra
|
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 una principal. Por ejemplo, puedes permitir que una principal 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
Function | Descripción |
---|---|
compute.isForwardingRule
bool
|
Comprueba si la solicitud crea una regla de reenvío.
|
compute.matchLoad
bool
|
Comprueba si la solicitud afecta uno de los tipos especificados del esquema de balanceo de cargas. Para encontrar el identificador de cada esquema de balanceo de cargas y más detalles, consulta Usa condiciones de IAM en balanceadores de carga de Google Cloud.
|
Tipos de recursos admitidos
Este atributo está disponible para solicitudes de creación de los siguientes tipos de recursos:
Service | 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 y funciones compatibles | , startsWith(), endsWith() |
Detalles |
No recomendamos usar el operador con este atributo. En lugar de verificar la desigualdad, como en request.path != "/admin" , verifica el prefijo del atributo, como en !request.path.startsWith("/admin") . Cuando verificas el prefijo, también proteges las rutas de URL dentro de la jerarquía /admin , como /admin/payroll/ .
|
Ejemplos |
Muestra request.path == "/admin" request.path == "/admin/payroll"
Muestra request.path.startsWith("/admin") Muestra request.path.endsWith("/payroll.js") |
Tipos de recursos admitidos |
|
Atributo request.host
Variable del atributo | request.host |
---|---|
Tipo de atributo | string |
Operadores y funciones compatibles | , endsWith() |
Detalles |
No recomendamos usar la función .startsWith() ni el operador con este atributo. Estas funciones y operadores pueden darte resultados inesperados.
|
Ejemplos |
Muestra request.host == "www.example.com" request.host == "hr.example.com"
Muestra request.host.endsWith("example.com") |
Tipos de recursos admitidos |
|
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}/
.
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 el valor que deseas extraer. Puedes usar letras mayúsculas y minúsculas desde la
A
hasta laZ
, dígitos numéricos, y guiones bajos (_
).En la plantilla
projects/{project}/
, el identificador esproject
.Un prefijo, que debe aparecer antes de la substring que se desea extraer (opcional).
En la plantilla
projects/{project}/
, el prefijo esprojects/
.Un sufijo, que debe aparecer después de la substring que se desea extraer (opcional).
En la plantilla
projects/{project}/
, el sufijo es/
.
La función extract()
extrae diferentes partes del atributo 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 |
---|---|---|
— | — | Atributo completo |
— | 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 una cadena vacía.
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/objects/data_lake/orders/
:
Plantilla de extracción | Salida |
---|---|
/order_date={date}/ |
2019-11-03 |
buckets/{name}/ |
acme-orders-aaa |
/orders/{empty}order_date |
string está vacío |
{start}/objects/data_lake |
projects/_/buckets/acme-orders-aaa |
orders/{end} |
order_date=2019-11-03/aef87g87ae0876 |
{all} |
projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/ |
/orders/{none}/order_date= |
string está vacío |
/orders/order_date=2019-11-03/ |
string está vacío |
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 Timestamp
. Para ver ejemplos, consulta Configura el acceso basado en recursos.