Referência de atributos para condições do IAM

Este tópico descreve os atributos compatíveis em uma expressão de condição.

Atributos de condição compatíveis

As seções a seguir resumem os atributos compatíveis e indicam os serviços do Google Cloud que reconhecem cada um deles.

Atributos de recurso

Os atributos a seguir estão relacionados ao recurso mencionado na solicitação.

Atributo Resumo do uso Serviços do Google Cloud compatíveis
Atributo do serviço de recurso Gerencie o acesso com base no serviço do Google Cloud que está sendo usado.
  • Apigee
  • Application Integration
  • BigQuery
  • Autorização binária
  • Bigtable
  • Cloud Key Management Service
  • Cloud Logging
  • Spanner
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Google Kubernetes Engine
  • Identity-Aware Proxy
  • Conectores de integração
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager
Atributo de tipo de recurso Gerencie o acesso com base no tipo de recurso.
Atributo de nome de recurso Gerencie o acesso com base no nome do recurso.
  • Apigee
  • Application Integration
  • BigQuery
  • Autorização binária
  • Bigtable
  • Cloud Key Management Service
  • Cloud Logging
  • Spanner
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Google Kubernetes Engine
  • Conectores de integração
  • Pub/Sub Lite
  • Secret Manager
Tags de recurso Gerencie o acesso com base nas tags anexadas ao recurso. Todos os serviços do Google Cloud (consulte Suporte para condições herdadas)

Para mais detalhes sobre os atributos de recursos, consulte Atributos de recurso nesta página.

Atributos de solicitação

Os atributos a seguir estão relacionados aos detalhes da solicitação.

Atributo Resumo do uso Serviços do Google Cloud compatíveis

Atributo de níveis de acesso

Gerencie o acesso com base em níveis de acesso específicoss

Um nível de acesso é um atributo calculado com base em atributos brutos sobre a solicitação e o solicitante, como o endereço IP de origem, os atributos do dispositivo e a hora do dia. Por exemplo, um nível de acesso onNetwork pode exigir que o dispositivo que faz a solicitação tenha origem em um determinado intervalo de endereços IP. Os níveis de acesso são definidos pelos administradores da organização.

Identity-Aware Proxy

Atributos de API

Gerencie o acesso com base nos dados fornecidos por uma API ou um serviço do Google Cloud específico.

  • Identity and Access Management
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API Cloud Runtime Configuration
  • Cloud Storage
  • Compute Engine
  • Artifact Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Gerenciamento de identidade e acesso
  • Identity-Aware Proxy
  • Serviço gerenciado para Microsoft Active Directory
  • Notebooks gerenciados pelo usuário
  • Resource Manager
  • Secret Manager
  • Service Management

Atributos de data/hora

Defina o acesso expirável, programado ou de duração limitada aos recursos do Google Cloud.

Todos os serviços do Google Cloud (consulte Suporte para condições herdadas)

Atributos de IP/porta de destino

Gerencie o acesso com base no endereço IP e/ou na porta de destino de uma solicitação. Por exemplo, uma instância de máquina virtual (VM) do Compute Engine pode expor um IP externo, como 10.0.0.2, mas a porta 22 pode ser exposta apenas para uso administrativo.

Usado no encaminhamento de TCP do Identity-Aware Proxy.

Identity-Aware Proxy

Atributos da regra de encaminhamento

Especifique os tipos de regras de encaminhamento que um principal pode criar. Por exemplo, é possível permitir que um principal crie regras de encaminhamento para balanceadores de carga internos do Google Cloud, que processam tráfego proveniente de uma rede do Google Cloud, mas não para balanceadores de carga externos do Google Cloud, que processam tráfego originário da Internet.

Atributos de host/caminho do URL

Gerencie o acesso com base no host e/ou no caminho do URL de uma solicitação. Por exemplo, uma condição pode especificar que https://example.com é o aplicativo principal acessível a um domínio geral de usuários. https://hr.example.com/admin é usada para acessar uma página no aplicativo que somente os administradores de Recursos Humanos podem acessar.

  • Identity-Aware Proxy
  • Cloud Run

Para mais detalhes sobre os atributos de solicitação, consulte Atributos de solicitação nesta página.

Compatibilidade com condições herdadas

Alguns tipos de recursos do Google Cloud não permitem condições nas políticas de permissão. No entanto, é possível adicionar vinculações de papéis condicionais no nível da organização, da pasta ou do projeto, e outros recursos herdarão essas vinculações de papéis por meio da hierarquia de recursos. Para mais detalhes, consulte Tipos de recursos que aceitam vinculações de papéis condicionais.

Quando usar atributos no nível da organização, pasta ou projeto, lembre-se de que a maioria dos atributos está disponível apenas para tipos de recursos específicos. Se parte de uma condição usar um atributo que não está disponível, essa parte da condição nunca será interpretada como concessão de acesso. Por exemplo, a condição destination.port == 21 nunca concede acesso a nenhum recurso do BigQuery porque eles não fornecem os atributos de IP/porta de destino.

Para evitar esse problema, use os atributos tipo de recurso e serviço de recurso descritos nesta página para limitar o escopo da condição. Por exemplo, a condição a seguir é avaliada como true para todos os tipos de recursos diferentes de instâncias de túnel do Identity-Aware Proxy. Por outro lado, para instâncias de túnel do Identity-Aware Proxy, a condição verifica a porta de destino:

resource.type != 'iap.googleapis.com/TunnelInstance' ||
    destination.port == 21

Você não precisa limitar o escopo das condições que verificam as tags anexadas a um recurso. Quando as condições e os valores das tags forem verificados, uma condição não verificará outros atributos, incluindo o tipo e o serviço de recurso.

Atributos de recurso

Os atributos de serviço, tipo e nome do recurso geralmente são usados para alterar o escopo de uma concessão de acesso fornecida pela vinculação de papel. Quando um papel contém permissões aplicáveis a diferentes atributos específicos de recursos, condições baseadas em recursos podem ser usadas para conceder um subconjunto das permissões do papel para tipos específicos ou para serviços específicos.

Atributo resource.service

O atributo resource.service permite definir uma condição com base no serviço do Google Cloud que está sendo usado. Por exemplo, é possível definir uma condição que limite o acesso de um usuário a recursos que usam o serviço cloudresourcemanager.googleapis.com. Para ver uma lista de valores compatíveis, consulte Valores de serviço de recursos.

Variável de atributo resource.service
Tipo de atributo

string

Para ver uma lista de valores compatíveis, consulte Valores de serviço de recursos.

Operadores compatíveis ,
Detalhes Ao usar o atributo resource.type nas condições, verifique a igualdade exata () ou a desigualdade exata () com o atributo. Outras comparações, como a verificação de um prefixo ou sufixo, podem gerar resultados inesperados.
Exemplo

Retorna true para os recursos do Compute Engine:


resource.service == "compute.googleapis.com"
Serviços com suporte
  • Apigee
  • Application Integration
  • BigQuery
  • Autorização binária
  • Bigtable
  • Cloud Key Management Service
  • Cloud Logging
  • Spanner
  • Cloud SQL
  • Cloud Storage
  • Compute Engine
  • Dataform
  • Google Kubernetes Engine
  • Identity-Aware Proxy
  • Conectores de integração
  • Pub/Sub Lite
  • Resource Manager
  • Secret Manager

Atributo resource.type

O atributo resource.type permite definir uma condição com base no tipo de recurso. Por exemplo, é possível definir uma condição que limite o acesso de um usuário a recursos do tipo storage.googleapis.com/Object. Para ver uma lista de valores compatíveis, consulte Valores de tipo de recurso.

Se sua condição usar o atributo resource.name, recomendamos que você use o atributo resource.type para controlar a quais tipos de recurso a condição se aplica. Para detalhes, consulte o atributo resource.name nesta página.

Variável de atributo resource.type
Tipo de atributo

string

Para ver uma lista de valores compatíveis, consulteValores de tipo de recurso. .

Operadores compatíveis ,
Detalhes Ao usar o atributo resource.type nas condições, verifique a igualdade exata () ou a desigualdade exata () com o atributo. Outras comparações, como a verificação de um prefixo ou sufixo, podem gerar resultados inesperados.
Examples

Retorna true, a menos que o recurso seja uma imagem do Compute Engine:


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

Retornará true somente se o recurso for uma imagem ou um disco permanente do Compute Engine:


(resource.type == "compute.googleapis.com/Image" ||
 resource.type == "compute.googleapis.com/Disk")
Tipos de recursos compatíveis
Apigee
  • Atributos do produto da API
  • Produtos de API
  • Proxies de API
  • Entradas do mapa de chave-valor do proxy da API
  • Mapas de chave-valor de proxy da API
  • Revisões de proxy de API
  • Caches
  • Atributos do app do desenvolvedor
  • Apps para desenvolvedores
  • Atributos do desenvolvedor
  • Desenvolvedores
  • Entradas do mapa de chave-valor do ambiente
  • Mapas de chave-valor do ambiente
  • Exportações
  • Ganchos de fluxo
  • Aliases do Keystore
  • Keystores
  • Consultas
  • Planos de tarifas
  • Referências
  • Revisões de fluxo compartilhadas
  • Fluxos compartilhados
  • Servidores de destino
  • Sessões do Trace (depuração)
BigQuery
  • Conjuntos de dados
  • Modelos
  • Rotinas
  • Tabelas
Application Integration
  • Configurações de autenticação
  • Execuções
  • Versões de integração
  • Integrações
  • Locais
  • Suspensões.
Autorização binária
  • Atestadores
  • Configurações de validação contínua
  • Políticas
Bigtable
  • Clusters
  • Instâncias
  • Tabelas
Cloud Key Management Service
  • Versões de chaves de criptografia
  • Chaves de criptografia
  • Keyrings
Cloud Logging
  • Buckets de registros
  • Visualizações de registro
Spanner
  • Backups
  • Bancos de dados
  • Instâncias
Cloud SQL
  • Execuções de backup
  • Instâncias
Cloud Storage
  • Buckets
  • Pastas gerenciadas
  • Objetos
Compute Engine
  • Serviços de back-end (global e regional)
  • Firewalls
  • Regras de encaminhamento (global e regional)
  • Imagens
  • Modelos de instância
  • Instâncias
  • Discos permanentes (regional e por zona)
  • Snapshots
  • Proxies HTTP(S) de destino (global e regional)
  • Proxies SSL de destino
  • Proxies TCP de destino
Dataform
  • Resultados da compilação
  • Locais
  • Configurações de versão
  • Repositórios
  • Configurações do fluxo de trabalho
  • Invocações de fluxo de trabalho
  • Espaços de trabalho
Google Cloud
  • Locais1
Google Kubernetes Engine
  • Clusters
Firestore
  • Bancos de dados
Identity-Aware Proxy
  • Todos os serviços de back-end e apps App Engine
  • Todos os recursos do túnel
  • Todas as zonas de túnel
  • Todos os serviços da Web
  • Versões do serviço do app App Engine
  • Serviços do app App Engine
  • Serviços de back-end do Compute Engine
  • Instâncias de túnel
Conectores de integração
  • Conexões
  • Metadados do esquema de conexão
  • Anexos de endpoint
  • Inscrições em eventos
  • Zonas gerenciadas
Pub/Sub Lite
  • Locais
  • Assinaturas
  • Tópicos
Resource Manager
  • Projetos
Secret Manager
  • Versões de secret
  • Secrets

1 O Cloud Key Management Service usa esse tipo de recurso como pai dos recursos de keyring.

Atributo resource.name

O atributo resource.name permite definir uma condição com base em todo ou em parte de um nome de recurso. Para ver uma lista de formatos de nome de recurso, consulte Formato de nome de recurso.

O atributo resource.name está disponível apenas para tipos de recursos específicos, que estão listados na tabela abaixo. É recomendável que você limite a aplicação da condição ao tipo de recurso pretendido. Se um papel contiver permissões para um tipo de recurso que não fornece o atributo resource.name, certifique-se de que essas permissões não sejam restritas pela parte da condição que verifica resource.name.

O exemplo a seguir mostra como garantir esse comportamento. Neste exemplo, a condição permite o acesso a todos os tipos de recursos, exceto buckets e objetos do Cloud Storage. Por outro lado, para buckets e objetos, a condição só permite acesso ao bucket example-bucket e aos objetos que ele contém:

(resource.type != 'storage.googleapis.com/Bucket' &&
 resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')

A primeira parte da condição verifica se o recurso não é um bucket nem um objeto. Se o recurso tiver um tipo diferente, toda a condição será avaliada como true, independentemente do nome do recurso.

Além disso, a condição verifica o atributo resource.type, não o resource.service. Há alguns benefícios de verificar o atributo resource.type:

  • Ele limita a verificação resource.name ao conjunto apropriado de recursos. Por exemplo, se você quer conceder acesso a instâncias do Compute Engine com um nome específico, faz sentido excluir todos os tipos de recursos, exceto instâncias do Compute Engine.
  • Ela impede que o escopo da condição seja alterado se um serviço adicionar novos tipos de recursos no futuro.

Por fim, a condição usa a função startsWith() para avaliar o nome do recurso em vez de verificar a igualdade com o operador . Como a condição analisa o início do nome do recurso, ela corresponde a um bucket e aos objetos dele. Se ele verificasse a igualdade, corresponderia apenas ao bucket.

Não é possível usar caracteres curinga como * para fazer correspondência a vários nomes de recursos. Considere estas alternativas:

  • Use a função extract() para extrair um valor de um nome de recurso. Por exemplo, é possível extrair um ID do projeto por meio do nome do recurso de uma instância de VM do Compute Engine e, em seguida, escrever uma expressão de condição que se refere ao ID do projeto.

    Para detalhes, consulte Como extrair valores de atributos nesta página.

  • Use a função startsWith() ou endsWith() para escrever uma condição que avalie o início ou o fim do nome do recurso.

Variável de atributo resource.name
Tipo de atributo

string

Cada tipo de recurso usa um formato específico para o nome do recurso. Para uma lista de formatos, consulte Formato do nome do recurso.

Funções e operadores compatíveis startsWith(), endsWith(), extract(), ,
Detalhes

O resource.name contém o nome do recurso relativo para o recurso de destino na solicitação. O nome do recurso relativo é um caminho de URI sem uma barra à esquerda (/).

A função startsWith() usa o literal de string de prefixo a ser avaliado em relação a resource.name.

A função endsWith() usa o literal de string de sufixo a ser avaliado em relação a resource.name.

A função extract() usa um modelo de extração para extrair parte de resource.name. Para detalhes, consulte Como extrair valores de nomes de recursos nesta página.

Os operadores e são para comparação com o resource.name inteiro, ou uma parte extraída do resource.name.

Examples

Retorna true, a menos que o nome do recurso identifique um bucket do Cloud Storage chamado secret-bucket-123:


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

Retornará true se o nome do recurso começar com o prefixo especificado, no formato usado pelas instâncias de VM do Compute Engine:


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

Retornará true se o nome do recurso começar com o prefixo especificado, no formato usado pelos buckets do Cloud Storage:


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

Retornará true se o nome do recurso terminar com o sufixo especificado. Por exemplo, a extensão de arquivo de um objeto do Cloud Storage:


resource.name.endsWith(".jpg")

Retorna o nome ou o número do projeto, se houver:


resource.name.extract("projects/{project}/")
Tipos de recursos compatíveis
Apigee
  • Atributos do produto da API
  • Produtos de API
  • Proxies de API
  • Entradas do mapa de chave-valor do proxy da API
  • Mapas de chave-valor de proxy da API
  • Revisões de proxy de API
  • Caches
  • Atributos do app do desenvolvedor
  • Apps para desenvolvedores
  • Atributos do desenvolvedor
  • Desenvolvedores
  • Entradas do mapa de chave-valor do ambiente
  • Mapas de chave-valor do ambiente
  • Exportações
  • Ganchos de fluxo
  • Aliases do Keystore
  • Keystores
  • Consultas
  • Planos de tarifas
  • Referências
  • Revisões de fluxo compartilhadas
  • Fluxos compartilhados
  • Servidores de destino
  • Sessões do Trace (depuração)
BigQuery
  • Conjuntos de dados
  • Modelos
  • Rotinas
  • Tabelas
Application Integration
  • Configurações de autenticação
  • Execuções
  • Versões de integração
  • Integrações
  • Locais
  • Suspensões.
Autorização binária
  • Atestadores
  • Configurações de validação contínua
  • Políticas
Bigtable
  • Clusters
  • Instâncias
  • Tabelas
Cloud Key Management Service
  • Chaves de criptografia
  • Versões de chaves de criptografia
  • Keyrings
Cloud Logging
  • Buckets de registros
  • Visualizações de registro
Spanner
  • Backups
  • Bancos de dados
  • Instâncias
Cloud SQL
  • Execuções de backup
  • Instâncias
Cloud Storage
  • Buckets
  • Pastas gerenciadas
  • Objetos
Compute Engine
  • Serviços de back-end (global e regional)
  • Firewalls
  • Regras de encaminhamento (global e regional)
  • Imagens
  • Modelos de instância
  • Instâncias
  • Discos permanentes (regional e por zona)
  • Snapshots
  • Proxies HTTP(S) de destino (global e regional)
  • Proxies SSL de destino
  • Proxies TCP de destino
Google Kubernetes Engine
  • Clusters
Firestore
  • Bancos de dados
Dataform
  • Resultados da compilação
  • Locais
  • Configurações de versão
  • Repositórios
  • Configurações do fluxo de trabalho
  • Invocações de fluxo de trabalho
  • Espaços de trabalho
Conectores de integração
  • Conexões
  • Metadados do esquema de conexão
  • Anexos de endpoint
  • Inscrições em eventos
  • Zonas gerenciadas
Pub/Sub Lite
  • Locais
  • Assinaturas
  • Tópicos
Secret Manager
  • Versões de secret
  • Secrets

Tags de recurso

As funções de tags de recurso permitem que você defina uma condição com base nas tags anexadas ou herdadas por um recurso. Por exemplo, é possível definir uma condição que conceda um papel somente a recursos que tenham a tag env: prod anexada. Para saber mais sobre como controlar o acesso com tags, consulte Tags e controle de acesso.

Cada tag consiste em uma chave e um valor. Há alguns tipos diferentes de identificadores para cada chave e valor:

  • Um código permanente, que é globalmente exclusivo e não pode ser reutilizado. Por exemplo, uma chave de tag pode ter o ID permanente tagKeys/123456789012 e um valor de tag pode ter o ID permanente tagValues/567890123456.
  • Um nome curto. O nome curto de cada chave precisa ser exclusivo na organização, e o nome curto de cada valor precisa ser exclusivo para a chave associada. Por exemplo, uma chave de tag pode ter o nome abreviado env, e um valor de tag pode ter o nome abreviado prod.
  • Um nome de namespace, que adiciona o código numérico da sua organização ao nome curto de uma chave de tag. Por exemplo, uma chave de tag pode ter o nome com namespace 123456789012/env. Saiba como conseguir o código da organização.

Para orientações sobre como escolher o tipo de identificador a ser usado nas suas condições, consulte Definições e identificadores de tags.

As condições das tags são compatíveis com todos os serviços e tipos de recursos do Google Cloud. Para saber como aplicar condições de tag a recursos que não são diretamente compatíveis com elas, consulte Suporte para condições herdadas nesta página.

Você pode usar as seguintes funções para definir condições com base nas tags:

Função Descrição
resource.hasTagKey(
  keyName: string
)
  bool

Verifica se o recurso da solicitação tem uma tag com a chave especificada. A chave da tag é pesquisada pelo nome do namespace. Para verificar uma chave de tag usando o código permanente, use a função resource.hasTagKeyId().

Parâmetro
keyName: o nome de namespace da chave de tag, com o ID numérico da organização e uma barra como prefixo. Exemplo:123456789012/env
Exemplo

trueenv Retorna se o recurso da solicitação tiver uma tag com a chave .


resource.hasTagKey('123456789012/env')
resource.hasTagKeyId(
  keyId: string
)
  bool

Verifica se o recurso da solicitação tem uma tag com a chave especificada. A chave da tag é pesquisada pelo código permanente. Para verificar a chave de uma tag usando o nome de namespace dela, use a função resource.hasTagKey().

Parâmetro
keyId: o ID permanente da chave de tag. Exemplo:tagKeys/123456789012
Exemplo

truetagKeys/123456789012 Retorna se o recurso da solicitação tiver uma tag com a chave .


resource.hasTagKeyId('tagKeys/123456789012')
resource.matchTag(
  keyName: string,
  valueShortName: string
)
  bool

Verifica se o recurso da solicitação tem uma tag com a chave e o valor especificados. A chave é pesquisada pelo nome do namespace e o valor é pesquisado pelo nome curto. Para verificar uma chave de tag e um valor usando os códigos permanentes, use a função resource.matchTagId().

Parâmetros
  • keyName: o nome do namespace da chave de tag, com o ID numérico da organização e uma barra como prefixo. Por exemplo, 123456789012/env.
  • valueShortName: o nome abreviado do valor da tag. Por exemplo, prod.
Exemplo

true123456789012/env Retorna prod se o recurso da solicitação tiver uma tag com a chave e o valor .


resource.matchTag('123456789012/env', 'prod')
resource.matchTagId(
  keyId: string,
  valueId: string
)
  bool

Verifica se o recurso da solicitação tem uma tag com a chave e o valor especificados. A chave e o valor são pesquisados pelos códigos permanentes. Para verificar uma chave de tag usando o nome de namespace e um valor com nome curto, use a função resource.matchTag().

Parâmetros
  • keyId: o ID permanente da chave de tag. Exemplo:tagKeys/123456789012
  • valueId: o ID permanente do valor da tag. Exemplo:tagValues/567890123456
Exemplo

truetagKeys/123456789012 Retorna tagValues/567890123456 se o recurso da solicitação tiver uma tag com a chave e o valor .


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

Atributos de solicitação

Os atributos de solicitação permitem criar condições que avaliam detalhes sobre a solicitação, como nível de acesso, data/hora, porta e endereço IP de destino (para tunelamento de TCP do IAP) ou o host/caminho esperado do URL (para o IAP e Cloud Run).

Atributo de níveis de acesso

O atributo de níveis de acesso permite que os usuários definam uma condição que exige que uma solicitação atenda a um ou mais níveis de acesso para ser autorizada.

O atributo de níveis de acesso é derivado dos atributos da solicitação, como o endereço IP de origem, os atributos do dispositivo e a hora do dia. Por exemplo, um nível de acesso chamado fullyTrusted pode exigir que o dispositivo que faz a solicitação seja de propriedade da empresa e tenha um bloqueio de tela. Um nível de acesso onNetwork pode exigir que o dispositivo que faz a solicitação seja originado de um determinado intervalo de endereços IP. Consulte os documentos do Access Context Manager para mais informações sobre níveis de acesso.

O atributo de níveis de acesso está disponível somente quando você usa o Identity-Aware Proxy para acessar uma instância de túnel ou para acessar um aplicativo da Web em execução nos serviços de back-end do App Engine ou do Compute Engine. Mais especificamente, o atributo de níveis de acesso está disponível somente para solicitações que verificam uma destas permissões:

  • iap.tunnelInstances.accessViaIAP
  • iap.webServiceVersions.accessViaIAP

Use o atributo de níveis de acesso ao conceder condicionalmente os seguintes papéis predefinidos:

  • Usuário do túnel protegido pelo IAP (roles/iap.tunnelResourceAccessor)

    Contém uma única permissão, iap.tunnelInstances.accessViaIAP.

  • Usuário do app da Web protegido pelo IAP (roles/iap.httpsResourceAccessor)

    Contém uma única permissão, iap.webServiceVersions.accessViaIAP.

Também é possível usar o atributo de níveis de acesso para conceder condicionalmente um papel personalizado que contenha essas permissões. O papel personalizado não pode conter outras permissões.

Atributo request.auth.access_levels

Variável de atributo request.auth.access_levels
Tipo de atributo list<string>
Operadores compatíveis in
Detalhes

Para verificar se uma solicitação atende a um nível de acesso específico, use o operador in:


ACCESS_LEVEL_FULL_NAME in request.auth.access_levels

O nome completo de um nível de acesso usa o seguinte formato:


accessPolicies/POLICY_NUMBER/accessLevels/ACCESS_LEVEL
Exemplo

Retornará true se a solicitação atender ao nível de acesso CorpNet:


"accessPolicies/199923665455/accessLevels/CorpNet"
    in request.auth.access_levels
Tipos de recursos compatíveis Disponível para solicitações que usam o Identity-Aware Proxy para acessar uma instância de túnel, um grupo de destinos de túnel, um web app em execução no balanceamento de carga do Google Cloud ou um web app em execução no App Engine.

Atributos de API

Os atributos da API ajudam você a gerenciar o acesso com base nos dados fornecidos por uma API ou um serviço do Google Cloud específico.

Por exemplo, ao usar o Cloud Storage para listar os objetos em um bucket, é possível usar o parâmetro prefix na solicitação para incluir apenas objetos que tenham nomes que comecem com um prefixo específico. Se você usar Limites de acesso a credenciais para diminuir as credenciais de curta duração, é possível criar um limite de acesso a credenciais que aplique um limite às permissões para listar objetos ao verificar o atributo de API storage.googleapis.com/objectListPrefix. Esse atributo de API tem o valor do parâmetro prefix da solicitação.

Para exemplos de quando pode ser necessário usar atributos de API em uma condição, consulte as seguintes páginas:

Nem todos os serviços reconhecem atributos da API. As seções a seguir indicam quais serviços reconhecem cada atributo da API.

Funções para atributos de API

Use a seguinte função para trabalhar com atributos de API:

Função Descrição
api.getAttribute(
  attributeName: string,
  defaultValue: V<T>
)
  V<T>

Recebe o atributo de API solicitado.

Parâmetros
  • attributeName: o atributo de API a ser recebido. Para valores aceitos, consulte Atributos da API Cloud Storage e Atributos da API IAM nesta página.
  • defaultValue: o valor padrão (V) a ser usado se o atributo da API não estiver disponível. O valor V é do tipo T, em que T é o mesmo tipo do valor do atributo da API. Por exemplo, se o valor do atributo da API for uma string, você pode usar uma string vazia ou um marcador de posição, como undefined.

Exemplo

Retorna uma das seguintes opções:

  • Para solicitações para listar objetos em um bucket do Cloud Storage, se a solicitação incluir o parâmetro prefix, a função retornará o valor dela.
  • Para solicitações para listar objetos que omitem o parâmetro prefix e para todos os outros tipos de solicitações, a função retorna uma string vazia.

api.getAttribute("storage.googleapis.com/objectListPrefix", "")
hasOnly(
  items: list<T>
)
  bool

Função: verifica se uma lista contém apenas os itens permitidos ou um subconjunto desses itens. Chame a função em uma lista retornada por api.getAttribute().

Parâmetro
items: uma lista de itens com o tipo T. Cada item é um valor que o atributo de API pode conter.
Exemplo

Verifica se a solicitação concederia ou revogaria qualquer papel que não fosse o Editor do Pub/Sub (roles/pubsub.editor) ou o Editor do Pub/Sub (roles/pubsub.publisher):


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

Veja a seguir o resultado de diferentes valores de solicitação:

Papéis concedidos ou revogados Resultado
Nenhum

true

Se nenhum papel for modificado, api.getAttribute() retornará o valor padrão. Para esse atributo, o valor padrão é sempre uma lista vazia. Por definição, uma lista vazia não contém valores que não estão na lista de permissões.

roles/pubsub.editor

true

O papel está na lista de permissões.

roles/pubsub.editor
roles/pubsub.publisher

true

Ambos os papéis estão na lista de permissões.

roles/billing.admin

false

O papel não está na lista de permissões.

roles/billing.admin
roles/pubsub.editor

false

Há um papel na lista de permissões, mas o outro não.

Atributos da API Cloud Storage

O Cloud Storage fornece o atributo de API a seguir.

Variável de atributo storage.googleapis.com/objectListPrefix
Tipo de atributo string
Detalhes

Em uma solicitação para listar objetos em um bucket, há o valor do parâmetro prefix da solicitação. Se a solicitação omitir o parâmetro prefix, o atributo não será definido.

Para outros tipos de solicitação, o atributo não é definido.

Serviços que reconhecem esse atributo: Cloud Storage

Atributos da API IAM

O IAM fornece o seguinte atributo de API:

Variável de atributo iam.googleapis.com/modifiedGrantsByRole
Tipo de atributo list<string>
Detalhes

Para uma solicitação que define a política de permissão de um recurso, este atributo contém os nomes dos papéis das vinculações de papéis que a solicitação modifica.

Para outros tipos de solicitação, o atributo não é definido.

Tipos de recursos que aceitam esse atributo

Os tipos de recurso a seguir aceitam condições com o atributo modifiedGrantsByRole nas políticas de permissão:

  • Projetos
  • Pastas
  • Organizações
Serviços que reconhecem esse atributo:

Os serviços a seguir reconhecem o atributo modifiedGrantsByRole:

  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API Cloud Runtime Configuration
  • Cloud Storage
  • Compute Engine
  • Artifact Analysis
  • Dataproc
  • Earth Engine
  • Game Servers
  • Gerenciamento de identidade e acesso
  • Identity-Aware Proxy
  • Serviço gerenciado para Microsoft Active Directory
  • Notebooks gerenciados pelo usuário
  • Resource Manager
  • Secret Manager
  • Service Management

Atributo de data/hora

O atributo de data/hora é usado para definir acesso expirável, programado ou de duração limitada aos recursos do Google Cloud.

Esse atributo está disponível para todos os serviços e tipos de recursos do Google Cloud. Para saber como aplicar condições de tag a recursos que não são diretamente compatíveis com elas, consulte Suporte para condições herdadas nesta página.

O atributo request.time contém o carimbo de data/hora da solicitação. É possível comparar esse carimbo de data/hora a outro ou a um período.

As seções a seguir listam as funções que podem ser usadas para definir condições com base em carimbos de data/hora e durações.

Criar, comparar e modificar carimbos de data/hora e durações

Função ou operador Descrição
date(
  value: string
)
  Timestamp

Converte uma data de um string em um Timestamp.

Parâmetro
value: uma data no formato YYYY-MM-DD, em que YYYY é o ano, MM é o mês com dois dígitos e DD é o dia com dois dígitos. O Timestamp de data/hora resultante contém a data especificada e a hora 00:00:00.000 UTC.
Exemplo

Cria um Timestamp que representa a data 2023-02-01 e a hora 00:00:00.000 UTC:


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

Converte um período de um string em um Duration.

Parâmetro
value: um Duration em segundos, seguido por s.
Examples

Uma duração que representa 1,5 minuto.


duration("90s")

Uma duração que representa 30 dias.


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

Converte um string em um Timestamp.

Parâmetro

value: um carimbo de data/hora UTC que está em conformidade com o RFC 3339.

Exemplo

Cria um carimbo de data/hora que representa 12 de abril de 2023, às 23:20:50.52 em UTC:


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

Compara dois valores Timestamp.

Examples

Retornará true se o horário da solicitação for antes de 12 de abril de 2022, às 00:00:00 UTC:


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

Retornará true se o horário da solicitação for antes ou igual a 12 de abril de 2022, às 00:00:00 UTC:


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

Retornará true se o horário da solicitação for depois de 12 de abril de 2022, às 00:00:00 UTC:


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

Retornará true se o horário da solicitação for depois ou igual a 12 de abril de 2022, às 00:00:00 UTC:


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

Adicione ou subtraia um Duration de um Timestamp.

Examples

Retorna a Timestamp que cai 30 minutos após as 14:30:00 UTC em 2024-04-12:


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

Retorna o Timestamp que cai 60 dias antes das 14:30:00 UTC em 2024-04-12:


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

Extrair informações de um carimbo de data/hora

As funções nesta seção permitem extrair informações de um carimbo de data/hora, como o dia da semana em que ele se enquadra.

Nas condições do IAM, todos os carimbos de data/hora estão em UTC. No entanto, talvez você queira extrair informações com base em um fuso horário diferente. Por exemplo, talvez você queira saber se um carimbo de data/hora UTC cai em uma segunda-feira no fuso horário de Berlim, na Alemanha.

Para especificar um fuso horário diferente, transfira o fuso para a função. Use um nome ou deslocamento UTC do banco de dados de fuso horário da IETF. Por exemplo, use Europe/Berlin ou +01:00 para o horário da Europa Central (CET, na sigla em inglês).

Funções e operadores compatíveis Descrição
Timestamp.getDate(
  timeZone: string
)
  int

Recebe o dia do mês da Timestamp. O valor usa indexação baseada em um. o primeiro dia do mês é 1.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada após o 15o dia do mês em UTC:


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

Recebe o dia do mês da Timestamp. O valor usa indexação com base em zero; o primeiro dia do mês é 0.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada após o 15o dia do mês em UTC:


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

Recebe o dia da semana da Timestamp. O valor usa indexação com base em zero; Por exemplo, domingo é 0.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada entre segunda e sexta-feira em Berlim, Alemanha:


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

Recebe o dia do ano da Timestamp. O valor usa indexação com base em zero; o primeiro dia do ano é 0.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada durante os primeiros cinco dias do ano em Mountain View, Califórnia:


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

Recebe o ano da Timestamp.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada durante o ano de 2023 em Mountain View, Califórnia:


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

Retornará true se a solicitação for enviada durante o ano de 2022 em UTC:


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

Recebe a hora do dia de Timestamp. O valor usa indexação com base em zero; os valores variam de 0 a 23.

É possível combinar essa função com getDayofWeek() para conceder acesso somente durante o horário de trabalho permitido na jurisdição.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada entre 9h e 17h (17h) em um dia da semana em Berlim, Alemanha:


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

Recebe o número de milissegundos do Timestamp. O valor usa indexação com base em zero; os valores variam de 0 a 999.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Timestamp.getMinutes(
  timeZone: string
)
  int

Recebe o número de minutos após a hora no Timestamp. O valor usa indexação com base em zero; os valores variam de 0 a 59.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada às 9h30 ou às 9h30 em Berlim, na Alemanha:


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

Recebe o mês do ano da Timestamp. O valor usa indexação com base em zero; os valores variam de 0 a 11.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
Exemplo

Retornará true se a solicitação for enviada durante o mês de abril em Mountain View, na Califórnia:


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

Recebe o número de segundos do Timestamp. O valor usa indexação com base em zero; os valores variam de 0 a 59.

Parâmetro
timeZone: o fuso horário para o qual calcular o resultado. O padrão é UTC.
, , ,

Compara a saída de duas funções nesta tabela.

Atributos de IP/porta de destino

O atributo de IP/porta de destino permite que os usuários gerenciem o acesso com base no endereço IP interno e/ou na porta de destino de uma solicitação.

Por exemplo, uma instância de VM do Compute Engine pode mapear o endereço IP externo e a porta 132.168.42.21:3001 para o endereço IP interno e a porta 10.0.0.1:2300 para uso geral. Por outro lado, o endereço IP interno e a porta 10.0.0.1:22 podem estar disponíveis internamente para uso administrativo. Use os atributos de IP/porta de destino para conceder diferentes quantidades de acesso com base no endereço IP interno e na porta.

Para mais informações sobre encaminhamento de TCP, consulte a documentação do Identity-Aware Proxy.

Atributo destination.ip

Variável de atributo destination.ip
Tipo de atributo string
Operadores compatíveis ,
Detalhes

A variável destination.ip identifica um endereço IP interno no formato IPv4.

Examples

Retornará true se o endereço IP de destino for 10.0.0.1:


destination.ip == "10.0.0.1"

Retorna true, a menos que o endereço IP de destino seja 10.0.0.1:


destination.ip != "10.0.0.1"
Tipos de recursos compatíveis Disponível para solicitações que usam o Identity-Aware Proxy para acessar uma instância de túnel

Atributo destination.port

Variável de atributo destination.port
Tipo de atributo int
Operadores compatíveis , , , , ,
Detalhes

A variável destination.port identifica um número de porta TCP interna.

Examples

true if the destination port is 21: Retorna:


destination.port == 21

Returns true if the destination port is less than 3001:


destination.port < 3001
Tipos de recursos compatíveis Disponível para solicitações que usam o Identity-Aware Proxy para acessar uma instância de túnel

Atributos da regra de encaminhamento

Os atributos da regra de encaminhamento permitem especificar os tipos de regras de encaminhamento que um principal pode criar. Por exemplo, é possível permitir que um principal crie regras de encaminhamento para balanceadores de carga internos do Google Cloud, que processam tráfego proveniente de uma rede do Google Cloud, mas não para balanceadores de carga externos do Google Cloud, que processam tráfego originário da Internet.

Para o Cloud Load Balancing, os atributos da regra de encaminhamento não afetam a capacidade de criar outros componentes de um balanceador de carga do Google Cloud, como serviços de back-end, proxies de destino, verificações de integridade e mapas de URL.

Funções compatíveis

Função Descrição
compute.isForwardingRuleCreationOperation()   bool

Verifica se a solicitação está criando uma regra de encaminhamento.

Exemplo
Veja o exemplo para compute.matchLoadBalancingSchemes().
compute.matchLoadBalancingSchemes(
  schemes: list<string>
)
  bool

Verifica se a solicitação afeta um dos tipos especificados de esquema de balanceamento de carga. Para encontrar o identificador de cada esquema de balanceamento de carga, além de mais detalhes, consulte Como usar condições do IAM em balanceadores de carga do Google Cloud.

Parâmetro
schemes: os esquemas de balanceamento de carga que a solicitação pode afetar.
Exemplo

Retorna uma das seguintes opções:

  • Se a solicitação não estiver criando uma regra de encaminhamento, retornará true.
  • Se a solicitação estiver criando uma regra de encaminhamento, retornará true somente se a regra afetar uma INTERNAL, INTERNAL_MANAGED ou INTERNAL_SELF_MANAGED de balanceamento de carga.

!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
  ])
)

Tipos de recursos compatíveis

Esse atributo está disponível para solicitações de criação dos seguintes tipos de recursos:

Serviço Tipos de recurso
Cloud Load Balancing Regras de encaminhamento
Cloud VPN Regras de encaminhamento (global e regional)
Compute Engine Regras de encaminhamento (para encaminhamento de protocolo)
Traffic Director1 Regras de encaminhamento

1 Usa os atributos de recurso do Compute Engine.

Atributo de host/caminho do URL

O atributo de caminho do URL/host permite que os usuários gerenciem o acesso com base no caminho do URL e/ou host de uma solicitação. Por exemplo, uma condição pode especificar que https://example.com é o aplicativo principal acessível por um domínio geral de usuários, enquanto https://hr.example.com/admin é usado para acessar uma página do aplicativo em que apenas administradores dos Recursos Humanos podem acessar essa parte.

Atributo request.path

Variável de atributo request.path
Tipo de atributo string
Funções e operadores compatíveis , startsWith(), endsWith()
Detalhes Não recomendamos o uso do operador com esse atributo. Em vez de verificar a desigualdade, como em request.path != "/admin", confira o prefixo do atributo, como em !request.path.startsWith("/admin"). Ao verificar o prefixo, você também protege os caminhos de URL na hierarquia /admin, como /admin/payroll/.
Examples

Retornará true se o caminho da solicitação for igual ao caminho de URL especificado:


request.path == "/admin"

request.path == "/admin/payroll"

Retornará true se o caminho da solicitação começar com o caminho do URL especificado:


request.path.startsWith("/admin")

Retornará true se o caminho da solicitação terminar com o caminho do URL especificado:


request.path.endsWith("/payroll.js")
Tipos de recursos compatíveis
  • Versões de serviço do app Identity-Aware Proxy (App Engine): disponíveis para solicitações que usam o Identity-Aware Proxy para acessar um aplicativo da Web em execução no App Engine ou Compute Engine
  • Serviços do Cloud Run

request.host attribute

Variável de atributo request.host
Tipo de atributo string
Funções e operadores compatíveis , endsWith()
Detalhes Não recomendamos usar a função .startsWith() ou o operador com esse atributo. Essas funções e operadores podem gerar resultados inesperados.
Examples

Retornará true se o nome do host for igual ao valor especificado:


request.host == "www.example.com"

request.host == "hr.example.com"

Retornará true se o nome do host terminar com o valor especificado:


request.host.endsWith("example.com")
Tipos de recursos compatíveis
  • Versões de serviço de aplicativo do Identity-Aware Proxy (App Engine): disponíveis para solicitações que usam o Identity-Aware Proxy para acessar uma versão do serviço de aplicativo.
  • Serviços do Cloud Run

Extrair valores de atributos

É possível usar a função extract() para extrair um valor de um atributo. Por exemplo, é possível extrair uma parte arbitrária de um nome de recurso e, em seguida, escrever uma expressão de condição que se refere ao texto extraído.

Para usar a função extract(), insira um modelo de extração, que especifica a parte do atributo a ser extraída. Por exemplo, se você quiser extrair um ID do projeto do nome do recurso de uma instância de VM do Compute Engine, use o modelo projects/{project}/.

Um modelo de extração contém as seguintes partes:

  • Um identificador, entre chaves, que identifica a substring a ser extraída.

    Escolha um identificador pequeno e significativo que deixe claro qual valor você quer extrair. Use letras maiúsculas e minúsculas de A a Z, dígitos numéricos e sublinhados (_).

    No modelo projects/{project}/, o identificador é project.

  • Opcional: um prefixo, que precisa aparecer antes da substring a ser extraída.

    No modelo projects/{project}/, o prefixo é projects/.

  • Opcional: um sufixo, que precisa aparecer depois da substring a ser extraída.

    No modelo projects/{project}/, o sufixo é /.

A função extract() extrai partes diferentes do atributo com base no modelo de extração ter um prefixo, um sufixo ou ambos:

Tem prefixo Tem sufixo Valor extraído
Todo o atributo
Os caracteres após a primeira ocorrência do prefixo ou uma string em branco se não houver caracteres depois do prefixo
Os caracteres antes da primeira ocorrência do sufixo ou uma string em branco se não houver caracteres antes do sufixo
Os caracteres entre a primeira ocorrência do prefixo e a primeira ocorrência subsequente do sufixo, ou uma string vazia se não houver caracteres entre o prefixo e o sufixo

Se você especificar um prefixo ou sufixo que não apareça no atributo, ou se o sufixo aparecer somente antes do prefixo, a função extract() retornará uma string vazia.

Nos exemplos a seguir, mostramos a saída de vários modelos de extração diferentes. Estes exemplos se referem a um nome de recurso para um objeto do Cloud Storage, projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/order_date=2019-11-03/aef87g87ae0876:

Modelo de extração Saída
/order_date={date}/ 2019-11-03
buckets/{name}/ acme-orders-aaa
/orders/{empty}order_date Esvaziar string
{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= Esvaziar string
/orders/order_date=2019-11-03/{id}/data_lake Esvaziar string

Se você extrair uma string que represente uma data, use as funções e operadores de data/hora nesta página para converter o valor extraído em um Timestamp de data/hora. Para exemplos, consulte Como configurar o acesso com base em recursos.