Referencia de atributos para las condiciones de IAM

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.

  • BigQuery
  • API de BigQuery Reservation
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager
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.

  • BigQuery
  • API de BigQuery Reservation
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager
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.

  • BigQuery
  • API de BigQuery Reservation
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
Etiquetas de recursos

Administra el acceso en función de las etiquetas adjuntas al recurso.

Puedes usar este atributo en los siguientes lugares:

  • Permite vinculaciones de roles de políticas
  • Reglas de denegación de la política de denegación

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

Atributos de API

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.

  • Cloud Key Management Service
  • Cloud Storage
  • Compute Engine
  • Identity and Access Management
  • Resource Manager

Atributos de fecha y hora

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)

Atributos de reglas de reenvío

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

string

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 true para los recursos de Compute Engine:

resource.service == "compute.googleapis.com"
Servicios compatibles
  • BigQuery
  • API de BigQuery Reservation
  • Cloud Key Management Service
  • Cloud Logging
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Google Kubernetes Engine
  • Resource Manager

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

string

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 true, a menos que el recurso sea una imagen de Compute Engine:

resource.type != "compute.googleapis.com/Image"

Muestra true solo si el recurso es una imagen de Compute Engine o un disco persistente:

(resource.type == "compute.googleapis.com/Image" ||
 resource.type == "compute.googleapis.com/Disk")
Tipos de recursos admitidos
BigQuery
  • Conjuntos de datos
  • Modelos
  • Rutinas
  • Tablas
API de BigQuery Reservation
  • Tareas
  • Reservas de IE
  • Compromisos de capacidad
  • Ubicaciones
  • Reservas
Cloud Key Management Service
  • Versiones de claves criptográficas
  • Claves criptográficas
  • Llaveros de claves
  • Ubicaciones
Cloud Logging
  • Buckets de registros
  • Vistas de registro
Cloud SQL
  • Ejecuciones de copias de seguridad
  • Instancias
Cloud Storage
  • Depósitos
  • Carpetas administradas
  • Objetos
Compute Engine
  • Servicios de backend (globales y regionales)
  • Firewalls
  • Reglas de reenvío (globales y regionales)
  • Imágenes
  • Plantillas de instancia
  • Instancias
  • Discos persistentes (regionales y zonales)
  • Instantáneas
  • Proxies HTTP(S) de destino (globales y regionales)
  • Proxies SSL de destino
  • Proxies TCP de destino
Trusted Cloud by S3NS
  • Ubicaciones1
Google Kubernetes Engine
  • Clústeres
Firestore
  • Bases de datos
Resource Manager
  • Proyectos

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() o endsWith() 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

string

Cada tipo de recurso usa un formato específico para el nombre del recurso. Para obtener una lista de los formatos, consulta Formato de nombre de recurso.

Operadores y funciones compatibles startsWith(), endsWith(), extract(), ,
Detalles

resource.name contiene el nombre del recurso relativo para el recurso de destino de la solicitud. El nombre del recurso relativo es una ruta de URI sin barra diagonal inicial (/).

La función startsWith() toma el valor literal de la string de prefijo que se evaluará en función de resource.name.

La función endsWith() toma el valor literal de la string de sufijo que se evaluará en función de resource.name.

La función extract() usa una plantilla de extracción para extraer una parte de resource.name. Para obtener detalles consulta la sección Extraer valores de nombres de recursos de esta página.

Los operadores  y  se usan para la comparación con la totalidad de resource.name o con una parte extraída de resource.name.

Ejemplos

Muestra true, a menos que el nombre del recurso identifique un bucket de Cloud Storage llamado secret-bucket-123:

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

Muestra true si el nombre del recurso comienza con el prefijo especificado, en el formato que usan las instancias de VM de Compute Engine:

resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")

Muestra true si el nombre del recurso comienza con el prefijo especificado, en el formato que usan los buckets de Cloud Storage:

resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")

Muestra true si el nombre del recurso termina con el sufijo especificado, por ejemplo, la extensión de archivo de un objeto de Cloud Storage:

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
BigQuery
  • Conjuntos de datos
  • Modelos
  • Rutinas
  • Tablas
API de BigQuery Reservation
  • Tareas
  • Reservas de IE
  • Compromisos de capacidad
  • Ubicaciones
  • Reservas
Cloud Key Management Service
  • Claves criptográficas
  • Versiones de claves criptográficas
  • Llaveros de claves
Cloud Logging
  • Buckets de registros
  • Vistas de registro
Cloud SQL
  • Ejecuciones de copias de seguridad
  • Instancias
Cloud Storage
  • Depósitos
  • Carpetas administradas
  • Objetos
Compute Engine
  • Servicios de backend (globales y regionales)
  • Firewalls
  • Reglas de reenvío (globales y regionales)
  • Imágenes
  • Plantillas de instancia
  • Instancias
  • Discos persistentes (regionales y zonales)
  • Instantáneas
  • Proxies HTTP(S) de destino (globales y regionales)
  • Proxies SSL de destino
  • Proxies TCP de destino
Google Kubernetes Engine
  • Clústeres

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 permanente tagValues/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 corto prod.
  • 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 nombres myproject/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(
  keyName: string
)
  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().

Parámetro
keyName: El nombre con espacio de nombres de la clave de etiqueta, con el ID numérico de la organización y una barra diagonal como prefijo. Por ejemplo, 123456789012/env.
Ejemplo

Muestra true si el recurso de la solicitud tiene una etiqueta con la clave env:

resource.hasTagKey('123456789012/env')
resource.hasTagKeyId(
  keyId: string
)
  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.hasTagKey().

Parámetro
keyId: Es el ID permanente para la clave de la etiqueta. Por ejemplo, tagKeys/123456789012.
Ejemplo

Muestra true si el recurso de la solicitud tiene una etiqueta con la clave tagKeys/123456789012:

resource.hasTagKeyId('tagKeys/123456789012')
resource.matchTag(
  keyName: string,
  valueShortName: string
)
  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().

Parámetros
  • keyName: El nombre con espacio de nombres de la clave de etiqueta, con el ID numérico de la organización y una barra diagonal como prefijo. Por ejemplo, 123456789012/env
  • valueShortName: El nombre corto del valor de la etiqueta. Por ejemplo, prod
Ejemplo

Muestra true si el recurso de la solicitud tiene una etiqueta con la clave 123456789012/env y el valor prod:

resource.matchTag('123456789012/env', 'prod')
resource.matchTagId(
  keyId: string,
  valueId: string
)
  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 resource.matchTag().

Parámetros
  • keyId: El ID permanente para la clave de la etiqueta. Por ejemplo, tagKeys/123456789012.
  • valueId: El ID permanente para el valor de la etiqueta. Por ejemplo, tagValues/567890123456.
Ejemplo

Muestra true si el recurso de la solicitud tiene una etiqueta con la clave tagKeys/123456789012 y el valor tagValues/567890123456:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')

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:

  • 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:

    Función Descripción
    api.getAttribute(
      attributeName: string,
      defaultValue: V<T>
    )
      V<T>

    Obtiene el atributo de API solicitado.

    Parámetros
    • attributeName: Es el atributo de la API que se debe obtener. Para obtener los valores compatibles, consulta los atributos de API de Cloud Storage y los atributos de API de IAM en esta página.
    • defaultValue: El valor predeterminado (V) que se usará si el atributo de la API no está disponible. El valor V es de tipo T, en el que T es el mismo tipo que el valor del atributo de la API. Por ejemplo, si el valor del atributo de la API es una string, puedes usar una string vacía o una string de marcador de posición como undefined.

    Ejemplo

    Muestra uno de los siguientes valores:

    • Para las solicitudes de otorgamiento o revocación de un rol, devuelve una lista de los roles que se modificaron con la solicitud.
    • Para todos los demás tipos de solicitudes, devuelve una lista vacía.
    api.getAttribute("iam.googleapis.com/modifiedGrantsByRole", [])
    hasOnly(
      items: list<T>
    )
      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 api.getAttribute().

    Parámetro
    items: Una lista de elementos con el tipo T. Cada elemento es un valor que el atributo de API puede contener.
    Ejemplo

    Verifica si la solicitud otorgaría o revocaría roles que no sean de Editor de Pub/Sub (roles/pubsub.editor) o Publicador de Pub/Sub (roles/pubsub.publisher):

    api.getAttribute('iam.googleapis.com/modifiedGrantsByRole', [])
        .hasOnly(['roles/pubsub.editor', 'roles/pubsub.publisher'])

    A continuación, se muestra el resultado de diferentes valores de solicitud:

    Funciones otorgadas o revocadas Resultado
    Ninguna

    true

    Si no se modifican roles, api.getAttribute() muestra el valor predeterminado. Para este atributo, el valor predeterminado es siempre una lista vacía. Por definición, una lista vacía no contiene valores que no estén en la lista de entidades permitidas.

    roles/pubsub.editor

    true

    La función se encuentra en la lista de entidades permitidas.

    roles/pubsub.editor
    roles/pubsub.publisher

    true

    Ambas funciones están en la lista de entidades permitidas.

    roles/billing.admin

    false

    La función no se encuentra en la lista de entidades permitidas.

    roles/billing.admin
    roles/pubsub.editor

    false

    Una función está en la lista de entidades permitidas, pero la otra no.

    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 modifiedGrantsByRole en sus políticas de permisos:

    • Proyectos
    • Carpetas
    • Organizaciones
    Servicios que reconocen este atributo

    Los siguientes servicios reconocen el atributo modifiedGrantsByRole:

    • Cloud Key Management Service
    • Cloud Storage
    • Compute Engine
    • Identity and Access Management
    • Resource Manager

    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(
      value: string
    )
      Timestamp

    Convierte una fecha de una string en una Timestamp.

    Parámetro
    value: Una fecha en el formato YYYY-MM-DD, en el que YYYY es el año, MM es el mes en dos dígitos y DD es el día en dos dígitos. La Timestamp resultante contiene la fecha especificada y la hora 00:00:00.000 UTC.
    Ejemplo

    Crea una Timestamp que represente la fecha 2023-02-01 y la hora 00:00:00.000 UTC:

    date("2023-02-01")
    duration(
      value: string
    )
      Duration

    Convierte una cantidad de tiempo de una string a una Duration.

    Parámetro
    value: Una Duration en segundos, seguida de s.
    Ejemplos

    Crea una duración que representa 1.5 minutos:

    duration("90s")

    Crea una duración que representa 30 días:

    duration("2592000s")
    timestamp(
      value: string
    )
      Timestamp

    Convierte una string en una Timestamp.

    Parámetro

    value: Una marca de tiempo UTC que cumple con RFC 3339.

    Ejemplo

    Crea una marca de tiempo que representa el 12 de abril de 2023 a las 23:20:50.52 en UTC:

    timestamp("2023-04-12T23:20:50.52Z")
    , , ,

    Compara dos valores Timestamp.

    Ejemplos

    Muestra true si la hora de la solicitud es antes del 12 de abril de 2022 a las 00:00:00 UTC:

    request.time < timestamp("2022-04-12T00:00:00.00Z")

    Muestra true si la hora de la solicitud es antes o el mismo 12 de abril de 2022 a las 00:00:00 UTC:

    request.time <= timestamp("2022-04-12T00:00:00.00Z")

    Muestra true si la hora de la solicitud es posterior al 12 de abril de 2022 a las 00:00:00 UTC:

    request.time > timestamp("2022-04-12T00:00:00.00Z")

    Muestra true si la hora de la solicitud es después o el mismo 12 de abril de 2022 a las 00:00:00 UTC:

    request.time >= timestamp("2022-04-12T00:00:00.00Z")
    • timestamp + duration   Timestamp
    • timestamp - duration   Timestamp

    Suma o resta una Duration de una Timestamp.

    Ejemplos

    Muestra la Timestamp que cae 30 minutos después de las 14:30:00 UTC del 2024-04-12:

    timestamp("2024-04-12T14:30:00.00Z") + duration("1800s")

    Muestra la Timestamp que cae 60 días antes de las 14:30:00 UTC del 2024-04-12:

    timestamp("2024-04-12T14:30:00.00Z") - duration("5184000s")

    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(
      timeZone: string
    )
      int

    Obtiene el día del mes de la Timestamp. El valor usa la indexación basada en uno; el primer día del mes es 1.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía después del día 15 del mes en UTC:

    request.time.getDate() > 15
    Timestamp.getDayOfMonth(
      timeZone: string
    )
      int

    Obtiene el día del mes de la Timestamp. El valor usa la indexación basada en cero; el primer día del mes es 0.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía después del día 15 del mes en UTC:

    request.time.getDayOfMonth() > 14
    Timestamp.getDayOfWeek(
      timeZone: string
    )
      int

    Obtiene el día de la semana de la Timestamp. El valor usa una indexación basada en cero. Por ejemplo, el domingo es 0.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía entre el lunes y el viernes en Berlín, Alemania:

    request.time.getDayOfWeek("Europe/Berlin") > 0 &&
        request.time.getDayOfWeek("Europe/Berlin") < 6
    Timestamp.getDayOfYear(
      timeZone: string
    )
      int

    Obtiene el día del año de la Timestamp. El valor usa la indexación basada en cero; el primer día del año es 0.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía durante los primeros 5 días del año en Mountain View, California:

    request.time.getDayOfYear("America/Los_Angeles") >= 0 &&
        request.time.getDayOfYear("America/Los_Angeles") < 5
    Timestamp.getFullYear(
      timeZone: string
    )
      int

    Obtiene el año de la Timestamp.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envió durante el año 2023 en Mountain View, California:

    request.time.getFullYear("America/Los_Angeles") == 2023

    Muestra true si la solicitud se envió durante el año 2022 en UTC:

    request.time.getFullYear() == 2022
    Timestamp.getHours(
      timeZone: string
    )
      int

    Obtiene la hora del día de la Timestamp. El valor usa la indexación basada en cero; los valores varían de 0 a 23.

    Puedes combinar esta función con getDayofWeek() para otorgar acceso solo durante el horario laboral permitido en tu jurisdicción.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía entre las 9:00 (9:00 a.m.) y las 17:00 (5:00 p.m.) de un día de semana en Berlín, Alemania:

    request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5 &&
        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17
    Timestamp.getMilliseconds(
      timeZone: string
    )
      int

    Obtiene la cantidad de milisegundos de la Timestamp. El valor usa la indexación basada en cero; los valores varían de 0 a 999.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Timestamp.getMinutes(
      timeZone: string
    )
      int

    Obtiene la cantidad de minutos después de la hora de la Timestamp. El valor usa la indexación basada en cero; los valores varían de 0 a 59.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía a las 9:30 (9:30 a.m.) o después de esa hora en Berlín, Alemania:

    request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getMinutes("Europe/Berlin") >= 30
    Timestamp.getMonth(
      timeZone: string
    )
      int

    Obtiene el mes del año de la Timestamp. El valor usa la indexación basada en cero; los valores varían de 0 a 11.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    Ejemplo

    Muestra true si la solicitud se envía durante el mes de abril en Mountain View, California:

    request.time.getMonth("America/Los_Angeles") == 3
    Timestamp.getSeconds(
      timeZone: string
    )
      int

    Obtiene la cantidad de segundos de la Timestamp. El valor usa la indexación basada en cero; los valores varían de 0 a 59.

    Parámetro
    timeZone: La zona horaria para la que se calcula el resultado. La configuración predeterminada es UTC.
    , , ,

    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.isForwardingRuleCreationOperation()   bool

    Comprueba si la solicitud crea una regla de reenvío.

    Ejemplo
    Consulta el ejemplo de compute.matchLoadBalancingSchemes().
    compute.matchLoadBalancingSchemes(
      schemes: list<string>
    )
      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.

    Parámetro
    schemes: Los esquemas de balanceo de cargas que la solicitud puede afectar.
    Ejemplo

    Muestra uno de los siguientes valores:

    • Si la solicitud no está creando una regla de reenvío, muestra true.
    • Si la solicitud está creando una regla de reenvío, muestra true solo si la regla de reenvío afecta un esquema de balanceo de cargas INTERNAL, INTERNAL_MANAGED o INTERNAL_SELF_MANAGED.
    !compute.isForwardingRuleCreationOperation() || (
      compute.isForwardingRuleCreationOperation() &&
      compute.matchLoadBalancingSchemes([
        'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
      ])
    )

    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 la Z, dígitos numéricos, y guiones bajos (_).

      En la plantilla projects/{project}/, el identificador es project.

    • Un prefijo, que debe aparecer antes de la substring que se desea extraer (opcional).

      En la plantilla projects/{project}/, el prefijo es projects/.

    • 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/order_date=2019-11-03/aef87g87ae0876:

    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/order_date=2019-11-03/aef87g87ae0876
    /orders/{none}/order_date= string está vacío
    /orders/order_date=2019-11-03/{id}/data_lake 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.