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 deTrusted Cloud by S3NS 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 Trusted Cloud admitidos |
---|---|---|
Atributo de servicio de recursos |
Gestionar el acceso en función del Trusted 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 Trusted 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 request
Los siguientes atributos están relacionados con los detalles de la solicitud.
Atributo | Resumen de uso | Servicios Trusted Cloud admitidos |
---|---|---|
Gestionar el acceso en función de los datos proporcionados por una API o un servicio específicos. Trusted 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 Trusted Cloud . Puede usar estos atributos en las vinculaciones de roles de la política de permiso. |
Todos los Trusted Cloud servicios (consulta Compatibilidad con condiciones heredadas) |
|
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 Trusted Cloud by S3NS , que gestionan el tráfico que se origina en una red Trusted Cloud , pero no para balanceadores de carga externos Trusted 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. |
|
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 Trusted 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 delTrusted 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 Trusted 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 Trusted 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 request
Los atributos de solicitud te permiten crear condiciones que evalúan los detalles de la solicitud, como los roles modificados por una solicitud o la fecha y la hora de la solicitud.
Atributos de la API
Los atributos de API te ayudan a gestionar el acceso en función de los datos proporcionados por unaTrusted Cloud API o un servicio específicos. Puede usar atributos de API en enlaces de rol de políticas de permiso.
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 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. Trusted 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 Trusted 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 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 Trusted Cloud by S3NSinternos, que gestionan el tráfico que se origina en una Trusted Cloud red, pero no para balanceadores de carga Trusted 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. Trusted 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. Trusted 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.
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.