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.
  • Cloud Bigtable
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Pub/Sub Lite
  • Resource Manager (somente tipo e serviço do recurso)
  • 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.
Tags de recurso Gerencie o acesso com base nas tags anexadas ao recurso. Todos os serviços do Google Cloud

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íficos.

Nível de acesso é um atributo calculado com base em atributos brutos sobre a solicitação e o solicitante, como endereço IP de origem, atributos do dispositivo, hora do dia etc. 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.

  • Cloud Storage
  • Identity and Access Management
  • Notebooks
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API Cloud Runtime Configuration
  • Compute Engine
  • Análise de contêiner
  • Dataproc
  • Earth Engine
  • Game Servers
  • Gerenciamento de identidade e acesso
  • Identity-Aware Proxy
  • Serviço gerenciado para Microsoft Active Directory
  • 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

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.

O uso atual é principalmente para o encaminhamento TCP do Identity-Aware Proxy.

Identity-Aware Proxy

Atributos da regra de encaminhamento

Especifique os tipos de regras de encaminhamento que um membro pode criar. Por exemplo, é possível permitir que ele crie regras de encaminhamento de balanceadores de carga internos do Google Cloud, que processam tráfego proveniente de uma rede do Google Cloud, mas não de balanceadores de carga externos do Google Cloud, que processam tráfego com origem na 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 por um domínio geral de usuários, enquanto https://hr.example.com/admin é usado para acessar uma página do aplicativo que apenas administradores dos Recursos Humanos podem acessar.

Identity-Aware Proxy

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 do IAM. 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 detalhes, consulte 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. A partir de 26 de fevereiro de 2021, 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 qualquer recurso do BigQuery porque os recursos do BigQuery 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.

Variável de atributo resource.service
Tipo de atributo String
Operadores compatíveis ==, !=
Operando compatível String


Para uma lista de todos os literais de string de serviço de recursos compatíveis, consulte Atributos de recursos para condições do IAM.

Discussão A variável resource.service, se usada, será destinada a comparações de igualdade ou desigualdade.

Observação: as funções .startsWith(<prefix string>) e .endsWith(<suffix string>) não são usadas com o atributo resource.service. Isso não é recomendado por causa dos resultados de avaliação inesperados.

Exemplos

Exemplo 1:


resource.service == "compute.googleapis.com"
Serviços compatíveis
  • Cloud Bigtable
  • Cloud Key Management Service
  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Pub/Sub Lite
  • Resource Manager (somente tipo e serviço do recurso)
  • 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.

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
Operadores compatíveis ==, !=
Operando compatível String


Para uma lista de todos os literais de string de tipos de recursos compatíveis, consulte Atributos de recursos para condições do IAM.

Discussão A variável resource.type, se usada, será destinada a comparações de igualdade ou desigualdade.

Observação: as funções .startsWith(<prefix string>) e .endsWith(<suffix string>) não são usadas com o atributo resource.type. Isso não é recomendado por causa dos resultados de avaliação inesperados.

Exemplos

Exemplo 1:


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

Exemplo 2:


(resource.type == "compute.googleapis.com/Image" ||
resource.type == "compute.googleapis.com/Disk")
Tipos de recursos compatíveis
Cloud Bigtable
  • Clusters
  • Instâncias
  • Tabelas
Cloud Key Management Service
  • Versões de chaves de criptografia
  • Chaves de criptografia
  • Keyrings
Cloud Spanner
  • Bancos de dados
  • Instâncias
Cloud Storage
  • Buckets
  • 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 Cloud Locais1
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
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.

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.

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.

Variável de atributo resource.name
Tipo de atributo String
Operadores compatíveis startsWith(), endsWith(), extract(), ==, !=
Operando compatível

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.

Discussão

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.

Exemplos

Exemplo 1 (para uma instância de VM do Compute Engine):


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

Exemplo 2 (para um bucket do Cloud Storage):


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

Exemplo 3 (para um objeto do Cloud Storage):


resource.name.endsWith(".jpg")

Exemplo 4 (para vários tipos de recurso):


resource.name.extract("projects/{project}/")

Exemplo 5 (para um bucket do Cloud Storage):


resource.name != "projects/_/buckets/secret-bucket-123"
Tipos de recursos compatíveis
Cloud Bigtable
  • Clusters
  • Instâncias
  • Tabelas
Cloud Key Management Service
  • Chaves de criptografia
  • Versões de chaves de criptografia
  • Keyrings
Cloud Spanner
  • Bancos de dados
  • Instâncias
Cloud Storage
  • Buckets
  • 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
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.

Você pode usar as seguintes funções para trabalhar com tags:

Função Tipo Descrição
resource.hasTagKey String --> bool

Função:

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: string: o nome com namespace da chave de tag, com o código numérico da organização e uma barra como prefixo. Por exemplo, 123456789012/env.

Exemplo:

resource.hasTagKey('123456789012/env')
Retorna true se o recurso da solicitação tiver uma tag com a chave env.

resource.hasTagKeyId String --> bool

Função:

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: string: o código permanente da chave da tag. Por exemplo, tagKeys/123456789012.

Exemplo:

resource.hasTagKeyId('tagKeys/123456789012')
Retorna true se o recurso da solicitação tiver uma tag com a chave tagKeys/123456789012.

resource.matchTag (String, String) --> booleano

Função:

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 IDs permanentes, use a função resource.matchTagId().

Parâmetros:

O primeiro parâmetro String é o nome do namespace da chave de tag, com o código numérico da organização e uma barra como prefixo. Por exemplo, 123456789012/env

O segundo parâmetro de string é o nome abreviado do valor da tag. Por exemplo, prod.

Exemplo:

resource.matchTag('123456789012/env', 'prod')
Retorna true se o recurso da solicitação tiver uma tag com a chave 123456789012/env e o valor prod.

resource.matchTagId (String, String) --> booleano

Função:

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:

O primeiro parâmetro de string é o código permanente da chave de tag. Por exemplo, tagKeys/123456789012.

O segundo parâmetro String é o ID permanente do valor da tag. Por exemplo, tagValues/567890123456.

Exemplo:

resource.matchTagId('tagKeys/123456789012', 'tagValues/567890123456')
Retorna true se o recurso da solicitação tiver uma tag com a chave tagKeys/123456789012 e o valor 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).

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 níveis de acesso específicos para ser autorizada.

O atributo de níveis de acesso deriva de atributos da solicitação, como o endereço IP de origem, os atributos do dispositivo, a hora do dia etc. 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 Lista de strings
Operadores compatíveis in
Operando compatível String
Discussão

A variável request.auth.access_levels é exibida no lado direito, e uma string que representa um nome completo do nível de acesso definido é exibida no lado esquerdo do operador in.

O nome completo de um nível de acesso tem um nome formatado no seguinte padrão:
"accessPolicies/<policyNumber>/accessLevels/<shortName>"

Observação: a string de nível de acesso diferencia maiúsculas de minúsculas e precisa corresponder exatamente ao que está configurado no Access Context Manager para ter o efeito desejado. Por exemplo, "accessPolicies/199923665455/accessLevels/CorpNet" é um literal de string válido a ser usado na expressão, mas "accessPolicies/199923665455/accesslevels/CorpNet" não terá o efeito desejado.

Exemplo

"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 ou um aplicativo da Web 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:

Consulte as seções a seguir para ver quais serviços reconhecem os atributos de API.

Funções para atributos de API

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

Função Tipo Descrição
api.getAttribute (String, T) --> T

Função: recebe o atributo da API solicitado.

Parâmetros:

String: o atributo de API a ser recebido. Para valores aceitos, consulte Atributos da API Cloud Storage e Atributos da API IAM nesta página.

T: o valor padrão a ser usado se o atributo de API não estiver disponível. Use o mesmo tipo do valor do atributo de API. Por exemplo, se o valor do atributo de API for uma string, será possível usar uma string vazia ou uma string de marcador, como undefined.

Exemplo:

api.getAttribute("storage.googleapis.com/objectListPrefix", "")
O valor do parâmetro prefix usado para listar objetos em um bucket do Cloud Storage. Para solicitações que omitem o parâmetro prefix e outros tipos de solicitação, uma string vazia é retornada.

hasOnly List<T>.(List<T>) --> bool

Função: verifica se uma lista contém apenas os itens permitidos ou um subconjunto desses itens.

Parâmetros:

List<T>: uma lista de itens com o tipo T. Chame a função em uma lista retornada por api.getAttribute(). O parâmetro é uma lista de itens que o atributo de API pode conter.

Exemplo:

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

Verifica se a solicitação concederá ou revogará papéis diferentes do editor do Pub/Sub (roles/pubsub.editor) ou do publicador Pub/Sub (roles/pubsub.publisher). A tabela a seguir mostra 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.

Atributo Tipo Descrição
storage.googleapis.com/objectListPrefix String

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

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

Serviços que reconhecem esse atributo:

Somente o Cloud Storage reconhece esse atributo.

Atributos da API IAM

O IAM fornece o seguinte atributo de API:

Atributo Tipo Descrição
iam.googleapis.com/modifiedGrantsByRole Matriz

Para uma solicitação que define a política do IAM de um recurso, esse atributo contém os nomes dos papéis das vinculações modificadas pela solicitação.

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

Recursos que aceitam esse atributo:

Os recursos a seguir aceitam condições com o atributo modifiedGrantsByRole nas políticas do IAM:

  • Projetos
  • Pastas
  • Organizações

Serviços que reconhecem esse atributo:

Os serviços a seguir reconhecem o atributo modifiedGrantsByRole:

  • Notebooks
  • API Gateway
  • AutoML
  • Certificate Authority Service
  • Cloud Functions
  • API Cloud Healthcare
  • Cloud IoT
  • Cloud Key Management Service
  • Cloud Run
  • API Cloud Runtime Configuration
  • Compute Engine
  • Análise de contêiner
  • Dataproc
  • Earth Engine
  • Game Servers
  • Gerenciamento de identidade e acesso
  • Identity-Aware Proxy
  • Serviço gerenciado para Microsoft Active Directory
  • 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.

Funções básicas e operadores compatíveis

A variável de atributo usada no atributo de data/hora é request.time, do tipo carimbo de data/hora. Também é possível converter strings nos tipos carimbo de data/hora e duração.

Funções básicas compatíveis Tipo Descrição
date String --> Carimbo de data/hora

Função: converte uma string em um carimbo de data/hora.
Parâmetro: string no formato YYYY-MM-DD, em que YYYY é o ano, MM é o mês de dois dígitos e DD é o dia de dois dígitos. O carimbo de data/hora resultante contém a data especificada e a hora 00:00:00.000 UTC.

Exemplo:

date("2020-02-01")
Um carimbo de data/hora que representa a data 2020-02-01 e a hora 00:00:00.000 UTC.

duration String --> Duração

Função: converte uma string em uma duração.
Parâmetro: string contendo um número de segundos, seguido de s

Exemplos:

duration("90s")
Uma duração que representa 1,5 minuto.

duration("2592000s")
Uma duração que representa 30 dias.

timestamp

String --> Carimbo de data/hora

Função: converte uma string em um carimbo de data/hora.
Parâmetro: string que segue o formato UTC (RFC 3339).

Exemplos:

timestamp("1985-04-12T23:20:50.52Z")
Representa a conversão do carimbo de data/hora para 20 minutos e 50,52 segundos após a 23ª hora de 12 de abril de 1985, em UTC.

timestamp("1996-12-19T16:39:57-08:00")
Representa a conversão do carimbo de data/hora para 39 minutos e 57 segundos após a 16ª hora do dia 19 de dezembro de 1996, com um ajuste de -08:00 em relação ao UTC. Observe que isso equivale a 1996-12-20T00:39:57Z em UTC. Esse ajuste não reflete o fuso horário. Por exemplo, o ajuste para o horário do Pacífico é -08:00 durante o inverno e -07:00 durante o verão, considerando o horário de verão.

Observação importante:
a string precisa seguir o requisito de formato para string UTC. Qualquer string que não seja compatível com o formato UTC causará uma falha na função timestamp() na conversão em um valor de carimbo de data/hora. Como resultado, a avaliação da condição na expressão que usa timestamp() resultará em uma falha na autorização.

<, <=, >, >=

(Carimbo de data/hora, carimbo de data/hora) --> bool

Função: comparação geral com o tipo carimbo de data/hora.

Exemplos:

request.time < timestamp("2018-04-12T00:00:00.00Z")
request.time <= timestamp("2018-04-12T00:00:00.00Z")
request.time > timestamp("2018-04-12T00:00:00.00Z")
request.time >= timestamp("2018-04-12T00:00:00.00Z")
Essas expressões definem a comparação do tempo de solicitação com um carimbo de data/hora específico, que é 12 de abril de 2018 em UTC. Normalmente usado para definir uma condição de "horário de início" ou "prazo de validade" para a concessão de papel.

Observação: dada a precisão do tempo em milissegundos, incluir a comparação de igualdade e desigualdade (==, !=) não tem efeito significativo.

+, - (Carimbo de data/hora, duração) -> Carimbo de data e hora

Função: adiciona ou subtrai uma duração de um carimbo de data/hora.

Exemplos:

timestamp("2018-04-12T14:30:00.00Z") + duration("1800s")
Encontra o carimbo de data/hora que ocorre 30 minutos depois de 14:30:00 GMT em 2018-04-12.

timestamp("2018-04-12T14:30:00.00Z") - duration("5184000s")
Encontra o carimbo de data/hora que ocorre 60 dias antes de 14:30:00 GMT em 2018-04-12.

Funções avançadas e operadores compatíveis

A variável de atributo usada no atributo de data/hora é request.time, do tipo carimbo de data/hora.

Funções avançadas compatíveis Tipo Descrição

<, <=, >, >=, ==, !=

(int, int) --> bool

Função: comparação geral com o tipo int.

Discussão:
Esse conjunto de operadores de comparação para números inteiros é usado principalmente para o conjunto restante de "funções avançadas" com funções de carimbo de data/hora. Todas essas funções (definidas no restante desta tabela) convertem uma determinada parte do valor do carimbo de data/hora em um int. Mais exemplos são fornecidos para cada função avançada a fim de sugerir um uso comum.

getDate, getDayOfMonth, getDayOfWeek, getDayOfYear

Timestamp.() --> int

Timestamp.(string) --> int

Funções:
getDate: recebe o dia do mês a partir do valor de carimbo de data/hora usando indexação com base em um. Em outras palavras, o primeiro dia do mês é 1.

getDayOfMonth: recebe o dia do mês a partir do valor de carimbo de data/hora usando indexação com base em zero. Em outras palavras, o primeiro dia do mês é 0.

getDayOfWeek: recebe o dia da semana a partir do valor de carimbo de data/hora com base em zero no domingo. Em outras palavras, domingo(0), segunda-feira(1), ..., sábado(6).

getDayOfYear: recebe o dia do ano a partir do valor de carimbo de data/hora usando indexação com base em zero. Em outras palavras, o primeiro dia do ano é 0.

Parâmetros:
String como fuso horário: conversão com base em data com fuso horário. Observação: quando o fuso horário não for especificado, a conversão se baseará na data em UTC.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Exemplo:

request.time.getDayOfWeek() > 0 && request.time.getDayOfWeek() < 6
Essa expressão será avaliada como verdadeira se a solicitação recebida for enviada entre segunda e sexta-feira pela hora UTC.

Exemplo:

request.time.getDayOfWeek("Europe/Berlin") > 0 && request.time.getDayOfWeek(Europe/Berlin") < 6
Essa expressão será avaliada como verdadeira se a solicitação recebida for enviada entre segunda e sexta-feira no fuso horário de Berlim.

Exemplo:

request.time.getDayOfYear("America/Los_Angeles") >= 0 && request.time.getDayOfYear("America/Los_Angeles") < 5
Essa expressão será avaliada como verdadeira se a solicitação recebida for enviada nos primeiros 5 dias do ano no fuso horário de Los Angeles.

getFullYear

Timestamp.() --> int

Timestamp.(string) --> int

Função: recebe o ano a partir da data.

Parâmetros:
Versão 1: sem parâmetro, a partir da data em UTC.
Versão 2: string de fuso horário, a partir da data no fuso horário.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Exemplo:

request.time.getFullYear("America/Los_Angeles") == 2018
Essa expressão será avaliada como verdadeira se a solicitação recebida for enviada no ano de 2018, no fuso horário de Los Angeles.

Exemplo:

request.time.getFullYear() < 2020
Essa expressão será avaliada como verdadeira se a solicitação recebida for enviada antes do final de 2019 em UTC.

getHours

Timestamp.() --> int

Timestamp.(string) --> int

Função: recebe as horas a partir da data. Os valores variam de 0 a 23.

Parâmetros:
Versão 1: sem parâmetro, a partir da data em UTC.
Versão 2: string de fuso horário, a partir da data no fuso horário.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Examplo:

request.time.getHours("Europe/Berlin") >= 9 && request.time.getHours("Europe/Berlin") <= 17
Essa expressão especifica uma condição de horário de trabalho. Ela será avaliada como verdadeira se a solicitação for enviada entre 9h e 17h no fuso horário de Berlim.

Observação:

A combinação de getHours() com getDayofWeek() pode ser usada para definir uma condição no horário de trabalho legal, como para atender a uma exigência de jurisdição.

getMilliseconds

Timestamp.() --> int

Timestamp.(string) --> int

Função: recebe milissegundos dentro de um segundo a partir do carimbo de data/hora. Os valores variam de 0 a 999.

Parâmetros:
Versão 1: sem parâmetro, a partir da data em UTC.
Versão 2: string de fuso horário, a partir da data no fuso horário.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Observação:

Essa função é menos útil por causa do seu uso limitado semanticamente.

getMinutes

Timestamp.() --> int

Timestamp.(string) --> int

Função: recebe minutos dentro de uma hora a partir do carimbo de data/hora. Os valores variam de 0 a 59.

Parâmetros:
Versão 1: sem parâmetro, a partir da data em UTC.
Versão 2: string de fuso horário, a partir da data no fuso horário.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Observação:

Essa função é menos útil por causa do seu uso limitado semanticamente.

getMonth

Timestamp.() --> int

Timestamp.(string) --> int

Função: recebe meses dentro de um ano a partir do carimbo de data/hora. Os valores variam de 0 a 11.

Parâmetros:
Versão 1: sem parâmetro, a partir da data em UTC.
Versão 2: string de fuso horário, a partir da data no fuso horário.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Exemplo:

request.time.getMonth("America/Los_Angeles") == 3
Essa expressão será avaliada como verdadeira se a solicitação recebida for enviada durante abril, no fuso horário de Los Angeles.

getSeconds

Timestamp.() --> int

Timestamp.(string) --> int

Função: recebe segundos dentro de um minuto a partir do carimbo de data/hora. Os valores variam de 0 a 59.

Parâmetros:
Versão 1: sem parâmetro, a partir da data em UTC.
Versão 2: string de fuso horário, a partir da data no fuso horário.

Para mais informações sobre strings de fusos horários válidas, consulte Valores de fuso horário compatíveis.

Observação:

Essa função é menos útil por causa do seu uso limitado semanticamente.

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 ==, !=
Operando compatível String
Discussão

A variável destination.ip precisa ser uma string que representa um endereço IP no formato IPv4.

Observação: as funções startsWith(<prefix string of IP>) e endsWith(<suffix string of IP>) não são para serem usadas com o atributo destination.ip. A configuração de uma condição, como destination.ip.startsWith(<prefix string of IP>), não resulta em erro de sintaxe durante a execução de uma operação setIamPolicy, mas ela não é recomendada por causa de resultados inesperados. A correspondência de prefixo na string de IP não é recomendada para executar uma verificação do intervalo de endereços IP nos CIDRs.

Exemplos

destination.ip == "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 Número inteiro
Operadores compatíveis ==, !=, <, <=, >, >=
Operando compatível Número inteiro
Discussão

Espera-se que a variável destination.port seja um número inteiro que representa um número de porta TCP interna.

Exemplos

destination.port == 21

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 membro pode criar. Por exemplo, é possível permitir que um membro 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ções compatíveis Tipo Descrição
compute.isForwardingRuleCreationOperation() () --> bool

Função: verifica se a solicitação está criando uma regra de encaminhamento.

Exemplos: consulte os exemplos de compute.matchLoadBalancingSchemes().

compute.matchLoadBalancingSchemes() Array.(string) --> bool

Função: verifica se a solicitação afeta um dos tipos especificados do esquema de balanceamento de carga. Para encontrar o identificador de cada esquema de balanceamento de carga e detalhes sobre cada esquema, consulte Como usar condições do IAM nos balanceadores de carga do Google Cloud.

Parâmetros: matriz de strings

Exemplo:


!compute.isForwardingRuleCreationOperation() || (
  compute.isForwardingRuleCreationOperation() &&
  compute.matchLoadBalancingSchemes([
    'INTERNAL', 'INTERNAL_MANAGED', 'INTERNAL_SELF_MANAGED'
  ]))
)
  • Se a solicitação não for criar uma regra de encaminhamento, conceda o papel ao membro.
  • Se a solicitação for criar uma regra de encaminhamento, só conceda o papel caso a regra de encaminhamento afete um esquema de balanceamento de carga INTERNAL, INTERNAL_MANAGED ou INTERNAL_SELF_MANAGED.

Tipos de recursos compatíveis

Este atributo está disponível para solicitações de criação de um destes 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
Operadores compatíveis ==, startsWith(), endsWith()
Operandos/parâmetros compatíveis
  • String: ==
  • String de prefixo constante: startsWith()
  • String de sufixo constante: endsWith()
Discussões Observação: não é recomendado usar o operador !=. Em vez de comparação negativa, como

request.path != "/admin"
, o uso recomendado é a correspondência de prefixo, por exemplo

! request.path.startsWith("/admin")
Dessa maneira, os caminhos do URL criados por "/admin", como "/admin/payroll/", são todos protegidos contra acesso não intencional.
Exemplos

Exemplo 1:


request.path == "/admin"

request.path == "/admin/payroll"

A string usada na comparação de igualdade (==) nos dois exemplos acima precisa ser formatada de acordo com os padrões de caminho do URL.

Exemplo 2:


request.path.startsWith("/admin")

Uma string que representa o prefixo de um caminho do URL é usada na função.

Exemplo 3:


request.path.endsWith("/payroll.js")

Uma string que representa o sufixo de um caminho do URL é usada na função.

Tipos de recursos compatíveis

Versões de serviço do Identity-Aware Proxy (App Engine)

Disponível para solicitações que usam o Identity-Aware Proxy para acessar um aplicativo da Web em execução no App Engine ou no Compute Engine

Atributo request.host

Variável de atributo request.host
Tipo de atributo String
Operadores compatíveis ==, endsWith()
Operandos/parâmetros compatíveis
  • String: ==
  • String de sufixo constante: endsWith()
Discussão A função .startsWith(<prefix string>) não é para ser usada com o atributo request.host. A configuração de uma condição, como request.host.startsWith(<prefix string>), não resultará em erros de sintaxe durante a execução de uma operação setIamPolicy, mas ela não é recomendada por causa de resultados inesperados. Da mesma forma, não é recomendado usar !=.
Exemplos

Exemplo 1:


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

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

A string usada na comparação de igualdade (==) nos dois exemplos acima precisa ser formatada de acordo com os padrões de string do URL para o nome do host de um site.

Exemplo 2:


request.host.endsWith("example.com")

Uma string que representa o sufixo de um nome do host de um site.

Tipos de recursos compatíveis

Versões de serviço do Identity-Aware Proxy (App Engine)

Disponível para solicitações que usam o Identity-Aware Proxy para acessar uma versão do serviço de app.

Como 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-id}/.

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, traços (-) e sublinhados (_).

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

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

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

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

    No modelo projects/{project-id}/, 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á null.

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/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 String em branco
{start}/data_lake projects/_/buckets/acme-orders-aaa
orders/{end} order_date=2019-11-03/aef87g87ae0876
{all} projects/_/buckets/acme-orders-aaa/data_lake/orders/order_date=2019-11-03/aef87g87ae0876
/orders/{none}/order_date= null
/orders/order_date=2019-11-03/{id}/data_lake null

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 carimbo de data/hora. Para exemplos, consulte Como configurar o acesso com base em recursos.