En este documento se describen los atributos admitidos en una expresión de condición.
Atributos de condición admitidos
En las siguientes secciones se resumen los atributos admitidos y se indica qué servicios deGoogle Cloud reconocen cada atributo.
Atributos de recursos
Los siguientes atributos están relacionados con el recurso que es el tema de la solicitud.
Atributo | Resumen de uso | Servicios Google Cloud admitidos |
---|---|---|
Atributo de servicio de recursos |
Gestionar el acceso en función del Google Cloud servicio que se esté usando. Puede usar este atributo en las vinculaciones de roles de la política de permiso. |
|
Atributo de tipo de recurso |
Gestionar el acceso en función del tipo de recurso. Puede usar este atributo en las vinculaciones de roles de la política de permiso. |
|
Atributo de nombre de recurso |
Gestionar el acceso en función del nombre del recurso. Puede usar este atributo en las vinculaciones de roles de la política de permiso. |
|
Etiquetas de recursos |
Gestionar el acceso en función de las etiquetas asociadas al recurso. Puede usar este atributo en los siguientes lugares:
|
Todos los Google Cloud servicios (consulta Compatibilidad con condiciones heredadas) |
Para obtener más información sobre los atributos de recursos, consulta la sección Atributos de recursos de esta página.
Atributos principales
Los siguientes atributos están relacionados con la entidad de seguridad que hace la solicitud.
Atributo | Resumen de uso | Tipos de principales admitidos |
---|---|---|
Aplica políticas en función del tipo de principal de la solicitud. Puede usar este atributo en las vinculaciones de políticas de las políticas de límites de acceso de principales. |
|
|
Aplica políticas basadas en la identidad de la entidad de seguridad de la solicitud. Puede usar este atributo en las vinculaciones de políticas de las políticas de límites de acceso de principales. |
|
Para obtener más información sobre los atributos principales, consulta la sección Atributos principales de esta página.
Atributos request
Los siguientes atributos están relacionados con los detalles de la solicitud.
Atributo | Resumen de uso | Servicios Google Cloud admitidos |
---|---|---|
Gestionar el acceso en función de niveles de acceso específicos.
Un nivel de acceso es un atributo calculado a partir de 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 Puede usar este atributo en las vinculaciones de roles de la política de permiso. |
Identity-Aware Proxy |
|
Gestionar el acceso en función de los datos proporcionados por una API o un servicio específicos. Google Cloud Puede usar este atributo en las vinculaciones de roles de la política de permiso. |
|
|
Configura el acceso con caducidad, programado o de duración limitada a los recursos de Google Cloud . Puede usar estos atributos en las vinculaciones de roles de la política de permiso. |
Todos los Google Cloud servicios (consulta Compatibilidad con condiciones heredadas) |
|
Gestiona el acceso en función de la dirección IP y/o el puerto de destino de una solicitud. Por ejemplo, una instancia de máquina virtual (VM) de Compute Engine puede exponer una IP externa, como Se usa para el reenvío de TCP de Identity-Aware Proxy. Puede usar estos atributos en las vinculaciones de roles de la política de permiso. |
Identity-Aware Proxy |
|
Especifica los tipos de reglas de reenvío que puede crear una entidad. Por ejemplo, puede permitir que una entidad cree reglas de reenvío para balanceadores de carga internos Google Cloud , que gestionan el tráfico que se origina en una red Google Cloud , pero no para balanceadores de carga externos Google Cloud , que gestionan el tráfico que se origina en Internet. Puede usar estos atributos en las vinculaciones de roles de la política de permiso. |
|
|
Gestiona el acceso en función de la ruta de la URL o del host de una solicitud. Por ejemplo, una condición podría especificar que Puede usar estos atributos en las vinculaciones de roles de la política de permiso. |
|
Para obtener más información sobre los atributos de solicitud, consulta la sección Atributos de solicitud de esta página.
Compatibilidad con condiciones heredadas
Algunos tipos de Google Cloud recursos no permiten condiciones en sus políticas de permiso. Sin embargo, puedes añadir enlaces de roles condicionales a nivel de organización, carpeta o proyecto, y otros recursos heredarán esos enlaces de roles a través de la jerarquía de recursos. Para obtener más información, consulta Tipos de recursos que aceptan enlaces de roles condicionales.
Cuando uses atributos a nivel de organización, carpeta o proyecto, ten en cuenta 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 que concede acceso. Por ejemplo, la condición resource.name.endsWith == devResource
nunca concederá acceso a ningún recurso de gestión de identidades y accesos, ya que los recursos de gestión de identidades y accesos no proporcionan el nombre del recurso.
Para evitar este problema, utilice los atributos tipo de recurso y servicio de recurso que se describen en esta página para limitar el ámbito 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 Compute Engine. En cambio, para las instancias de Compute Engine, la condición comprueba el nombre del recurso:
resource.type != 'compute.googleapis.com/Disk' ||
resource.name.endsWith('devResource')
No es necesario que limites el ámbito de las condiciones que comprueban las etiquetas asociadas a un recurso. Cuando una condición comprueba las claves y los valores de las etiquetas, no puede comprobar ningún otro atributo, incluidos el tipo de recurso y el servicio de recursos.
Atributos de recursos
Los atributos de servicio de recursos, tipo de recurso y nombre de recurso se suelen usar para cambiar el ámbito de una concesión de acceso proporcionada por el enlace de rol. Cuando un rol contiene permisos que se aplican a diferentes atributos específicos de un recurso, se pueden usar condiciones basadas en recursos para conceder un subconjunto de los permisos del rol a tipos o servicios específicos.
Atributo resource.service
El atributo resource.service
le permite definir una condición en función delGoogle Cloud servicio que se esté usando. Por ejemplo, puedes definir una condición
que limite el acceso de un usuario a los recursos que usen el
servicio cloudresourcemanager.googleapis.com
. Para ver una lista de los valores admitidos, consulta Valores del servicio de recursos.
Puede usar el atributo resource.service
en las vinculaciones de roles de la política de permiso.
Variable de atributo | resource.service |
---|---|
Tipo de atributo |
Para ver una lista de los valores admitidos, consulta Valores del servicio de recursos. |
Operadores admitidos | , |
Detalles |
Cuando utilice el atributo resource.type en las condiciones, compruebe si el atributo es exactamente igual ( ) o exactamente distinto ( ).
Otras comparaciones, como comprobar si hay un prefijo o un sufijo, pueden dar resultados inesperados.
|
Ejemplo |
Devuelve resource.service == "compute.googleapis.com" |
Servicios admitidos |
|
Atributo resource.type
El atributo resource.type
le permite definir una condición en función del tipo de recurso. Por ejemplo, puedes definir una condición que limite el acceso de un usuario a los recursos de tipo storage.googleapis.com/Object
. Para ver una lista de los valores admitidos, consulta Valores de tipo de recurso.
Si tu condición usa el atributo resource.name
, te recomendamos que utilices el atributo resource.type
para controlar a qué tipos de recursos se aplica la condición. Para obtener más información, consulta el atributo resource.name
en esta página.
Puede usar el atributo resource.type
en las vinculaciones de roles de la política de permiso.
Variable de atributo | resource.type |
||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo de atributo |
Para ver una lista de los valores admitidos, consulta Valores de tipo de recurso. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Operadores admitidos | , |
||||||||||||||||||||||||||||||||||||||||||||||||||
Detalles |
Cuando utilice el atributo resource.type en las condiciones, compruebe si el atributo es exactamente igual ( ) o exactamente distinto ( ). Otras comparaciones, como comprobar si hay un prefijo o un sufijo, pueden dar resultados inesperados.
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Ejemplos |
Devuelve resource.type != "compute.googleapis.com/Image"
Devuelve (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 elemento superior de los recursos de conjunto de claves. |
Atributo resource.name
El atributo resource.name
le permite definir una condición basada en todo o parte del nombre de un recurso. Para ver una lista de formatos de nombres de recursos, consulta Formato de nombre de recurso.
El atributo resource.name
solo está disponible para determinados tipos de recursos, que se indican en la tabla de esta sección. Te recomendamos que limites la aplicabilidad de la condición al tipo de recurso previsto. Si un rol 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 comprueba resource.name
.
En el siguiente ejemplo se muestra cómo asegurar este comportamiento. En este ejemplo, la condición permite el acceso a todos los tipos de recursos, excepto a los segmentos y objetos de Cloud Storage. Por el contrario, en el caso de los segmentos y los objetos, la condición solo permite el acceso al segmento example-bucket
y a los objetos que contiene:
(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 comprueba si el recurso no es un segmento ni un objeto. Si el recurso es de otro tipo, la condición se evalúa como true
, independientemente del nombre del recurso.
Ten en cuenta también que la condición comprueba el atributo resource.type
, no el atributo resource.service
. Comprobar el atributo resource.type
tiene varias ventajas:
- Limita la comprobación de
resource.name
al conjunto de recursos adecuado. Por ejemplo, si quieres conceder acceso a instancias de Compute Engine con un nombre específico, es lógico excluir todos los tipos de recursos que no sean instancias de Compute Engine. - De esta forma, se evita que el ámbito de la condición cambie si un servicio añade 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 comprobar si es igual al operador . Como la condición se fija en el inicio del nombre del recurso, coincide con un segmento y con los objetos de ese segmento. Si se comprueba la igualdad, solo coincidirá con el segmento.
No puedes usar caracteres comodín, como *
, para buscar coincidencias con varios nombres de recursos. Considera estas alternativas:
Usa la función
extract()
para extraer un valor de un nombre de recurso. Por ejemplo, puedes extraer un ID de proyecto del nombre de recurso de una instancia de VM de Compute Engine y, a continuación, escribir una expresión de condición que haga referencia al ID de proyecto.Para obtener más información, consulta la sección Extraer valores de atributos de 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.
Puede usar el atributo resource.name
en las vinculaciones de roles de la política de permiso.
Variable de atributo | resource.name |
||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo de atributo |
Cada tipo de recurso usa un formato específico para el nombre del recurso. Para ver una lista de formatos, consulta Formato de nombre de recurso. |
||||||||||||||||||||||||||||||||||||||||||||||
Funciones y operadores admitidos |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||||||||||||||||||||||||||||||||
Detalles |
El
La función
La función
La función
Los operadores |
||||||||||||||||||||||||||||||||||||||||||||||
Ejemplos |
Devuelve resource.name != "projects/_/buckets/secret-bucket-123"
Devuelve resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
Devuelve resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
Devuelve resource.name.endsWith(".jpg") Devuelve 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 de etiquetas de recursos te permiten definir una condición basada en las etiquetas que se adjuntan a los recursos admitidos o que heredan los descendientes de esos recursos. Por ejemplo, puedes definir una condición que asigne un rol solo a los recursos que tengan la etiqueta env: prod
. Para obtener más información sobre cómo controlar el acceso con etiquetas, consulta Etiquetas y control de acceso.
Cada etiqueta consta de una clave y un valor. Hay varios tipos de identificadores para cada clave y valor:
-
Un ID permanente, que es único a nivel mundial 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 abreviado de cada clave debe ser único en el proyecto o la organización en la que se defina la clave, y el nombre abreviado de cada valor debe ser único para la clave asociada. Por ejemplo, una clave de etiqueta podría tener el nombre abreviado
env
y un valor de etiqueta podría tener el nombre abreviadoprod
. -
Un nombre con espacio de nombres, que añade el ID numérico de tu organización o el ID del proyecto al nombre corto de una clave de etiqueta. Por ejemplo, una clave de etiqueta creada para una organización podría tener el nombre con espacio de nombres
123456789012/env
. Para saber cómo obtener el ID de tu organización, consulta el artículo Obtener el ID de recurso de tu organización. Una clave de etiqueta creada para un proyecto podría tener el nombre con espacio de nombresmyproject/env
. Para saber cómo obtener el ID de tu proyecto, consulta el artículo sobre cómo identificar proyectos.
Para obtener información sobre qué tipo de identificador usar en sus condiciones, consulte Definiciones e identificadores de etiquetas.
Puedes usar condiciones basadas en etiquetas para condicionar el acceso a cualquier recurso. Esto incluye los recursos con sus propias etiquetas, así como los recursos que heredan etiquetas de otros recursos. Para obtener más información sobre cómo se heredan las etiquetas a través de la jerarquía de recursos, consulta Herencia de etiquetas.
Sin embargo, algunas áreas de la consola Google Cloud no reconocen las vinculaciones de roles de políticas de permiso con condiciones basadas en etiquetas. Por lo tanto, si tienes un rol con una condición basada en etiquetas, es posible que la consola Google Cloud te impida realizar determinadas acciones por error. Si te encuentras con este problema, utiliza un método alternativo, como la CLI de gcloud, para realizar la acción.
Puedes usar condiciones basadas en etiquetas en los siguientes elementos:
- Permitir vinculaciones de roles de políticas
- Reglas de denegación de políticas de denegación
Puede usar las siguientes funciones para definir condiciones basadas en etiquetas:
Función | Descripción |
---|---|
resource.hasTagKey(
bool
|
Comprueba si el recurso de la solicitud tiene una etiqueta con la clave especificada. La clave de la etiqueta se busca por su nombre con espacio de nombres. Para buscar una clave de etiqueta mediante su ID permanente, usa la función
|
resource.hasTagKeyId(
bool
|
Comprueba si el recurso de la solicitud tiene una etiqueta con la clave especificada. La clave de la etiqueta se busca por su ID permanente.
Para buscar una clave de etiqueta usando su nombre con espacio de nombres, usa la función
|
resource.matchTag(
bool
|
Comprueba si el recurso de 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 abreviado. Para comprobar una clave y un valor de etiqueta mediante sus IDs permanentes, usa la función
|
resource.matchTagId(
bool
|
Comprueba si el recurso de la solicitud tiene una etiqueta con la clave y el valor especificados. La clave y el valor se buscan por sus IDs permanentes. Para comprobar si existe una clave de etiqueta mediante su nombre con espacio de nombres y un valor mediante su nombre corto, usa la función
|
Atributos principales
Los atributos principales te permiten escribir condiciones basadas en la entidad principal que ha enviado la solicitud. Con estos atributos, puede acotar los principales a los que se aplica una política.
Puede usar atributos principales en las vinculaciones de políticas de las políticas de límites de acceso de principales.
Atributo principal.type
El atributo principal.type
te permite definir una condición en función del tipo de principal que emite la solicitud. Por ejemplo, puedes añadir una condición a una vinculación de política de una política de límite de acceso principal para asegurarte de que la política solo se aplique a las cuentas de servicio.
Puede usar atributos principales en las vinculaciones de políticas de las políticas de límites de acceso de principales.
Variable de atributo | principal.type |
---|---|
Tipo de atributo |
|
Operadores admitidos | , , in |
Tipos de principales admitidos |
|
Ejemplos |
Se evalúa como principal.type == "iam.googleapis.com/ServiceAccount"
Se evalúa como principal.type in ["iam.googleapis.com/WorkspaceIdentity", "iam.googleapis.com/WorkforcePoolIdentity"] |
Atributo principal.subject
El atributo principal.subject
le permite definir una condición basada en la entidad principal que envía la solicitud. Por ejemplo, puedes añadir una condición a una vinculación de política de una política de límite de acceso de una entidad principal para asegurarte de que la política solo se aplique a las entidades principales cuyas direcciones de correo terminen en @example.com
.
Si usa el atributo principal.subject
en una condición, le recomendamos que también use el atributo principal.type
para controlar a qué tipos de principales se aplica la condición. Esto se debe a que los identificadores principales no son necesariamente únicos en todos los tipos principales. Por ejemplo, el identificador example-user@example.com
podría identificar una cuenta de Google o un usuario de un grupo de identidades de la plantilla.
Si usa el atributo principal.type
junto con el atributo principal.subject
, puede asegurarse de que la condición solo coincida con las entidades del tipo previsto. Por ejemplo, la siguiente expresión coincide con las cuentas de Google cuya dirección de correo termina en @example.com
:
principal.type == 'iam.googleapis.com/WorkspaceIdentity' &&
principal.subject.endsWith('@example.com')
Puede usar atributos principales en las vinculaciones de políticas de las políticas de límites de acceso de principales.
Variable de atributo | principal.subject |
---|---|
Tipo de atributo |
|
Operadores admitidos |
|
Asuntos principales admitidos |
|
Ejemplo |
Se evalúa como principal.subject.endsWith("@example.com")
Se evalúa como principal.subject == "example-service-account@example-project.iam.gserviceaccount.com" |
Atributos request
Los atributos de solicitud te permiten crear condiciones que evalúan los detalles de la solicitud, como su nivel de acceso, su fecha y hora, la dirección IP y el puerto de destino (para el túnel TCP de IAP) o la ruta/host de la URL esperada (para IAP y Cloud Run).
Atributo de nivel de acceso
El atributo "access levels" (niveles de acceso) permite a los usuarios definir una condición que requiere que una solicitud cumpla uno o varios niveles de acceso para poder autorizarse. Puedes usar el atributo de niveles de acceso en las vinculaciones de roles de la política de permisos.
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
puede requerir que el dispositivo que hace la solicitud sea propiedad de la empresa y tenga un bloqueo de pantalla. Un nivel de acceso onNetwork
puede requerir que el dispositivo que realiza la solicitud proceda de un intervalo de direcciones IP concreto. Para obtener más información sobre los niveles de acceso, consulta la documentación de Administrador de contextos de acceso.
El atributo de niveles de acceso solo está disponible cuando se usa 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. En concreto, el atributo "access_levels" solo está disponible para las solicitudes que comprueban uno de estos permisos:
iap.tunnelInstances.accessViaIAP
iap.webServiceVersions.accessViaIAP
Puede usar el atributo de niveles de acceso cuando conceda de forma condicional los siguientes roles predefinidos:
Usuario de túneles protegidos mediante IAP (
roles/iap.tunnelResourceAccessor
)Contiene un solo permiso,
iap.tunnelInstances.accessViaIAP
.Usuario de aplicaciones web protegidas mediante IAP (
roles/iap.httpsResourceAccessor
)Contiene un solo permiso,
iap.webServiceVersions.accessViaIAP
.
También puede usar el atributo de niveles de acceso para conceder de forma condicional un rol personalizado que contenga estos permisos. El rol personalizado no debe contener ningún otro permiso.
Atributo request.auth.access_levels
Variable de atributo | request.auth.access_levels |
---|---|
Tipo de atributo | list <string > |
Operadores admitidos | in |
Detalles |
Para comprobar si una solicitud cumple un nivel de acceso específico, utiliza el operador ACCESS_LEVEL_FULL_NAME in request.auth.access_levels El nombre completo de un nivel de acceso tiene el siguiente formato: accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL |
Ejemplo |
Devuelve "accessPolicies/199923665455/accessLevels/CorpNet" in request.auth.access_levels |
Tipos de recursos admitidos | Disponible para las solicitudes que usan Identity-Aware Proxy para acceder a una instancia de túnel, un grupo de destino de túnel, una aplicación web que se ejecuta en el balanceo de carga de Google Cloud o una aplicación web que se ejecuta en App Engine. |
Atributos de la API
Los atributos de API te ayudan a gestionar el acceso en función de los datos proporcionados por unaGoogle Cloud API o un servicio específicos. Puede usar atributos de API en enlaces de rol de políticas de permiso.
Por ejemplo, cuando usas Cloud Storage para listar los objetos de un segmento, puedes usar el parámetro prefix
en la solicitud para incluir solo los objetos cuyos nombres empiecen por un prefijo específico.
Si usas límites de acceso a credenciales para reducir el alcance de las credenciales de corta duración, puedes crear un límite de acceso a credenciales que limite los permisos para enumerar objetos marcando el atributo de API storage.googleapis.com/objectListPrefix
. Este atributo de la API contiene el valor del parámetro prefix
de la solicitud.
Para ver ejemplos de cuándo puede necesitar usar atributos de la API en una condición, consulte las siguientes páginas:
No todos los servicios reconocen los atributos de la API. En las siguientes secciones se indica qué servicios reconocen cada atributo de la API.
Funciones de atributos de API
Puedes usar la siguiente función para trabajar con atributos de API:
Función | Descripción | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
Obtiene el atributo de API solicitado.
|
||||||||||||
hasOnly(
bool |
Comprueba que una lista solo contenga los elementos permitidos o un subconjunto de esos elementos. Puedes llamar a la función en una lista devuelta por
|
Atributos de la API de Cloud Storage
Cloud Storage proporciona el siguiente atributo de API.
Variable de atributo | storage.googleapis.com/objectListPrefix |
---|---|
Tipo de atributo | string |
Detalles |
En una solicitud para listar objetos de un contenedor, contiene el valor del parámetro En 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 de atributo | iam.googleapis.com/modifiedGrantsByRole |
---|---|
Tipo de atributo | list<string> |
Detalles |
En una solicitud para definir la política de permisos de un recurso, este atributo contiene los nombres de los roles de las vinculaciones de roles que modifica la solicitud. En 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 definir el acceso a los recursos que caduca, se programa o tiene una duración limitada. Google Cloud Puede usar atributos de fecha y hora en enlaces de roles de políticas de permiso.
Este atributo se admite en todos los servicios y tipos de recursos de Google Cloud . Para saber cómo aplicar condiciones de fecha y hora a recursos que no las admiten directamente, consulta la sección Compatibilidad con las condiciones heredadas de esta página.
El atributo request.time
contiene la marca de tiempo de la solicitud. Puedes comparar esta marca de tiempo con otra o con un periodo.
En las siguientes secciones se enumeran las funciones que puede usar para definir condiciones basadas en marcas de tiempo y duraciones.
Crear, comparar y modificar marcas de tiempo y duraciones
Función u operador | Descripción |
---|---|
date(
Timestamp |
Convierte una fecha de
|
duration(
Duration |
Convierte un periodo de tiempo de
|
timestamp(
Timestamp |
Convierte un
|
, , , |
Compara dos valores
|
|
Añadir o restar un
|
Extraer 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 cae.
En las condiciones de gestión de identidades y accesos, todas las marcas de tiempo están en UTC. Sin embargo, es posible que quieras extraer información en función de otra zona horaria. Por ejemplo, puede que quieras saber si una marca de tiempo UTC corresponde a un lunes en la zona horaria de Berlín (Alemania).
Para especificar otra zona horaria, pásala a la función. Usa un nombre o un desfase UTC de la base de datos de zonas horarias de IETF. Por ejemplo, puedes usar Europe/Berlin
o +01:00
para la hora de Europa Central (CET).
Funciones y operadores admitidos | Descripción |
---|---|
Timestamp.getDate(
int
|
Obtiene el día del mes de
|
Timestamp.getDayOfMonth(
int
|
Obtiene el día del mes de
|
Timestamp.getDayOfWeek(
int
|
Obtiene el día de la semana del
|
Timestamp.getDayOfYear(
int
|
Obtiene el día del año de
|
Timestamp.getFullYear(
int
|
Obtiene el año de
|
Timestamp.getHours(
int
|
Obtiene la hora del día de
Puedes combinar esta función con
|
Timestamp.getMilliseconds(
int
|
Obtiene el número de milisegundos desde el
|
Timestamp.getMinutes(
int
|
Obtiene el número de minutos transcurridos de la hora desde
|
Timestamp.getMonth(
int
|
Obtiene el mes del año de
|
Timestamp.getSeconds(
int
|
Obtiene el número de segundos desde
|
, , , |
Compara el resultado de dos funciones en esta tabla. |
Atributos de IP y puerto de destino
El atributo de IP o puerto de destino permite a los usuarios gestionar el acceso en función de la dirección IP y el puerto de destino internos de una solicitud. Puede usar atributos de IP o puerto de destino en enlaces de roles de políticas de permiso.
Por ejemplo, una instancia de VM de Compute Engine puede asignar 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 podrían estar disponibles internamente para uso administrativo. Puede usar los atributos de IP o puerto de destino para conceder diferentes niveles de acceso en función de la dirección IP y el puerto internos.
Para obtener más información sobre el reenvío de TCP, consulta la documentación de Identity-Aware Proxy.
Atributo destination.ip
Variable de atributo | destination.ip |
---|---|
Tipo de atributo | string |
Operadores admitidos | , |
Detalles |
La variable |
Ejemplos |
Devuelve destination.ip == "10.0.0.1"
Devuelve destination.ip != "10.0.0.1" |
Tipos de recursos admitidos | Disponible para las solicitudes que usan Identity-Aware Proxy para acceder a una instancia de túnel |
Atributo destination.port
Variable de atributo | destination.port |
---|---|
Tipo de atributo | int |
Operadores admitidos | , , , , , |
Detalles |
La variable |
Ejemplos |
Devuelve destination.port == 21
Devuelve destination.port < 3001 |
Tipos de recursos admitidos | Disponible para las solicitudes que usan Identity-Aware Proxy para acceder a una instancia de túnel |
Atributos de reglas de reenvío
Los atributos de las reglas de reenvío le permiten especificar los tipos de reglas de reenvío que puede crear una entidad principal. Por ejemplo, puede permitir que una entidad cree reglas de reenvío para balanceadores de carga Google Cloudinternos, que gestionan el tráfico que se origina en una Google Cloud red, pero no para balanceadores de carga Google Cloudexternos, que gestionan el tráfico que se origina en Internet. Puede usar atributos de reglas de reenvío en enlaces de roles de políticas de permiso.
En Cloud Load Balancing, los atributos de la regla de reenvío no afectan a la capacidad de crear otros componentes de un balanceador de carga, como servicios de backend, proxies de destino, comprobaciones de estado y mapas de URLs. Google Cloud
Funciones admitidas
Función | Descripción |
---|---|
compute.isForwardingRule
bool
|
Comprueba si la solicitud está creando una regla de reenvío.
|
compute.matchLoad
bool
|
Comprueba si la solicitud afecta a uno de los tipos especificados de esquema de balanceo de carga. Para encontrar el identificador de cada esquema de balanceo de carga, así como más detalles, consulta Usar condiciones de IAM en balanceadores de carga. Google Cloud
|
Tipos de recursos admitidos
Este atributo está disponible para las solicitudes de creación de los siguientes 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) |
Cloud Service Mesh1 | Reglas de reenvío |
1 Usa los atributos de recursos de Compute Engine.
Atributo de ruta o host de URL
El atributo de ruta o host de la URL permite a los usuarios gestionar el acceso en función de la ruta y el host de la 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 a la que solo pueden acceder los administradores de Recursos Humanos.
Puede usar el atributo de ruta/host de URL en las vinculaciones de roles de la política de permiso.
Atributo request.path
Variable de atributo | request.path |
---|---|
Tipo de atributo | string |
Funciones y operadores admitidos | , startsWith(), endsWith() |
Detalles |
No recomendamos usar el operador con este atributo. En lugar de comprobar la desigualdad, como en request.path != "/admin" , comprueba el prefijo del atributo, como en !request.path.startsWith("/admin") . Al comprobar el prefijo, también proteges las rutas de URL de la jerarquía /admin , como /admin/payroll/ .
|
Ejemplos |
Devuelve request.path == "/admin" request.path == "/admin/payroll"
Devuelve request.path.startsWith("/admin")
Devuelve request.path.endsWith("/payroll.js") |
Tipos de recursos admitidos |
|
Atributo request.host
Variable de atributo | request.host |
---|---|
Tipo de atributo | string |
Funciones y operadores admitidos | , endsWith() |
Detalles |
No recomendamos usar la función .startsWith() ni el operador con este atributo. Estas funciones y operadores pueden dar resultados inesperados.
|
Ejemplos |
Devuelve request.host == "www.example.com" request.host == "hr.example.com"
Devuelve request.host.endsWith("example.com") |
Tipos de recursos admitidos |
|
Extraer valores de atributos
Puede 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, a continuación, escribir una expresión de condición que haga referencia al texto que has extraído.
Para usar la función extract()
, debe proporcionar una plantilla de extracción, que especifica la parte del atributo que se va a extraer. Por ejemplo, si quieres extraer un ID de proyecto del nombre de recurso de una instancia de VM de Compute Engine, puedes usar la plantilla projects/{project}/
.
Una plantilla de extracción contiene las siguientes partes:
Un identificador entre llaves que identifica la subcadena que se va a extraer.
Elige un identificador breve y significativo que deje claro qué valor quieres extraer. Puedes usar letras mayúsculas y minúsculas de
A
aZ
, dígitos numéricos y guiones bajos (_
).En la plantilla
projects/{project}/
, el identificador esproject
.Opcional: un prefijo, que debe aparecer antes de la subcadena que se va a extraer.
En la plantilla
projects/{project}/
, el prefijo esprojects/
.Opcional: un sufijo, que debe aparecer después de la subcadena que se va a extraer.
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:
Tiene prefijo | Tiene sufijo | Valor extraído |
---|---|---|
— | — | Todo el atributo |
— | Los caracteres que hay después de la primera aparición del prefijo o una cadena vacía si no hay caracteres después del prefijo. | |
— | Los caracteres que hay antes de la primera aparición del sufijo o una cadena vacía si no hay caracteres antes del sufijo. | |
Los caracteres entre la primera aparición del prefijo y la primera aparición posterior del sufijo, o una cadena vacía si no hay caracteres entre el prefijo y el sufijo. |
Si especifica un prefijo o un sufijo que no aparecen en el atributo, o si el sufijo solo aparece antes del prefijo, la función extract()
devuelve una cadena vacía.
En los siguientes ejemplos se muestra el resultado de varias plantillas de extracción diferentes. Estos ejemplos hacen referencia al nombre de un recurso de 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 cadena que representa una fecha, puedes usar las funciones y los operadores de fecha y hora de esta página para convertir el valor extraído en un Timestamp
. Para ver ejemplos, consulta Configurar el acceso basado en recursos.