En este documento, 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 deTrusted Cloud by S3NS 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 Trusted Cloud compatibles |
---|---|---|
Atributo de servicio de recurso |
Administra el acceso según el Trusted Cloud servicio que se usa. Puedes usar este atributo en las vinculaciones de roles de la política de permiso. |
|
Atributo de tipo de recurso |
Administra el acceso según el tipo de recurso. Puedes usar este atributo en las vinculaciones de roles de la política de permiso. |
|
Atributo de nombre de recurso |
Administra el acceso según el nombre del recurso. Puedes usar este atributo en las vinculaciones de roles de la política de permiso. |
|
Etiquetas de recursos |
Administra el acceso en función de las etiquetas adjuntas al recurso. Puedes usar este atributo en los siguientes lugares:
|
Todos los Trusted Cloud servicios (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 Trusted Cloud compatibles |
---|---|---|
Administra el acceso según los datos proporcionados por una API o un servicio Trusted Cloud específicos. Puedes usar este atributo en las vinculaciones de roles de la política de permiso. |
|
|
Establece el acceso programado, con vencimiento o de duración limitada a los recursos de Trusted Cloud . Puedes usar estos atributos en las vinculaciones de roles de la política de permiso. |
Todos los Trusted Cloud servicios (consulta la Asistencia para condiciones heredadas) |
|
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 Trusted Cloud by S3NS internos, que controlan el tráfico originado dentro de una red Trusted Cloud , pero no para balanceadores de cargas Trusted Cloud externos, que controlan el tráfico originado en Internet. Puedes usar estos atributos en las vinculaciones de roles de la política de permiso. |
|
Para obtener más detalles, consulta los atributos de solicitud en esta página.
Compatibilidad para condiciones heredadas
Algunos tipos de recursos Trusted Cloud no permiten 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 a través de la jerarquía de recursos. Para obtener más detalles, consulta Tipos de recursos que aceptan vinculaciones de roles 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 resource.name.endsWith == devResource
nunca otorgará acceso a ningún recurso de IAM, ya que los recursos de IAM no proporcionan el nombre del recurso.
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 Compute Engine. En cambio, para las instancias de Compute Engine, la condición verifica el nombre del recurso:
resource.type != 'compute.googleapis.com/Disk' ||
resource.name.endsWith('devResource')
No necesitas limitar el alcance de las condiciones que comprueban 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 deTrusted 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.
Puedes usar el atributo resource.service
en las vinculaciones de roles de la política de permiso.
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.
Puedes usar el atributo resource.type
en las vinculaciones de roles de la política de permiso.
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 del recurso, consulta Formato de nombre del recurso.
El atributo resource.name
solo está disponible para tipos de recursos específicos que se enumeran en la tabla de esta sección. Recomendamos que limites la aplicabilidad de la condición al tipo de recurso deseado. Si una 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 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.
Puedes usar el atributo resource.name
en las vinculaciones de roles de la política de permiso.
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 de etiquetas de recursos te permiten establecer una condición basada en las etiquetas adjuntas a los recursos admitidos o que heredan los descendientes de esos recursos. Por ejemplo, puedes establecer una condición que otorgue un rol 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 de cada clave debe ser único dentro del proyecto o la organización en la que se define la clave, 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 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 obtener información sobre cómo obtener el ID de tu organización, consulta Obtén el ID de tu recurso de organización. Una clave de etiqueta creada para un proyecto podría tener el nombre con espacio de nombresmyproject/env
. Para obtener información sobre cómo obtener el ID de tu proyecto, consulta Identifica proyectos.
Para obtener orientación sobre cómo elegir qué tipo de identificador usar en tus condiciones, consulta Identificadores y definiciones de etiquetas.
Puedes usar condiciones basadas en etiquetas para condicionar el acceso a cualquier recurso. Esto incluye recursos con sus propias etiquetas, así como recursos que heredan etiquetas de otros recursos. Para obtener más información sobre cómo se heredan las etiquetas con la jerarquía de recursos, consulta Herencia de etiquetas.
Sin embargo, ciertas áreas de la consola de Trusted Cloud no reconocen las vinculaciones de roles de políticas de permisos con condiciones basadas en etiquetas. Como resultado, si tienes un rol con una condición basada en etiquetas, es posible que la consola Trusted Cloud te impida realizar ciertas acciones de forma incorrecta. Si te encuentras con este problema, usa un método alternativo, como gcloud CLI, para realizar la acción.
Puedes usar condiciones basadas en etiquetas en los siguientes casos:
- Permite vinculaciones de roles de políticas
- Reglas de denegación de la política de denegación
Puedes usar las siguientes funciones para establecer condiciones basadas en etiquetas:
Función | 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 los roles modificados por una solicitud o la fecha y hora de la solicitud.
Atributos de API
Los atributos de API te ayudan a administrar el acceso según los datos proporcionados por unaTrusted Cloud API o un servicio específicos. Puedes usar atributos de API en las vinculaciones de roles de la política de permiso.
Para ver ejemplos de cuándo es posible que necesites usar atributos de API en una condición, consulta las siguientes páginas:
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:
Función | 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 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 establecer el acceso programado, con vencimiento o de duración limitada a los recursos de Trusted Cloud . Puedes usar atributos de fecha y hora en las vinculaciones de roles de la política de permisos.
Este atributo es compatible con todos los Trusted Cloud servicios y tipos de recursos. Para 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 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 Trusted Cloud by S3NSinternos, que controlan el tráfico originado dentro de una red Trusted Cloud , pero no para balanceadores de cargas Trusted Cloudexternos, que controlan el tráfico originado en Internet. Puedes usar atributos de reglas de reenvío en vinculaciones de roles de políticas de permisos.
En Cloud Load Balancing, los atributos de reglas de reenvío no afectan la capacidad de crear otros componentes de un balanceador de cargas Trusted Cloud , como servicios de backend, proxies de destino, verificaciones de estado y mapas de URL.
Funciones compatibles
Función | 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 Trusted Cloud balanceadores de cargas.
|
Tipos de recursos admitidos
Este atributo está disponible para 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 para Compute Engine.
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()
devuelve 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.