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 Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Cloud Key Management Service
  • 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.

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

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.

Ao usar atributos no nível da organização, da pasta ou do projeto, lembre-se de que, se você enviar uma solicitação para um serviço e o serviço não reconhecer um atributo em uma condição, a condição sempre será avaliada como false. Por exemplo, a condição destination.port == 21 sempre é avaliada como false para o BigQuery, porque ele não reconhece os atributos de IP/porta de destino.

Para evitar esse problema, use os atributos de recurso nesta página para limitar o escopo da condição. Por exemplo, a condição resource.service != "iap.googleapis.com" || destination.port == 21 é avaliada como true para todo serviço, exceto para o Identity-Aware Proxy. Por outro lado, para o Identity-Aware Proxy, a condição verifica a porta de destino.

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.

Os atributos de recurso são compatíveis nos seguintes serviços do Google Cloud:

  • Cloud Spanner
  • Cloud Storage
  • Compute Engine
  • Identity-Aware Proxy
  • Cloud Key Management Service
  • Resource Manager (somente tipo e serviço do recurso)
  • Gerenciador de secrets

Para detalhes sobre os atributos de recursos que é possível usar para cada serviço, consulte Atributos de recursos para condições do IAM.

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"

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.

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")

Atributo resource.name

O atributo resource.name permite definir uma condição com base em todo ou em parte de um nome de recurso.

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"

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

Esse atributo está disponível no Identity-Aware Proxy.

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

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 ver um exemplo de quando é possível usar atributos de API em uma condição, consulte Limitar as permissões ao listar objetos.

O Cloud Storage aceita 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 compatíveis, consulte Atributos da API Cloud Storage 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.

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, contém 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.

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.

Todos os serviços do Google Cloud são compatíveis com esse atributo de condição.

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, em inglês).

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.

Exemplo:

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 e/ou na porta de destino de uma solicitação. Por exemplo, uma instância de VM do Compute Engine pode expor um endereço IP externo 10.0.0.1 na porta 3001 para uso geral, e o endereço IP 10.0.0.2 e a porta 22 são expostos apenas para uso administrativo.

Consulte os documentos do Identity-Aware Proxy para mais informações sobre encaminhamento de TCP.

Esse atributo é compatível no 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"

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

A variável destination.port precisa ser um número inteiro que representa um número de porta TCP.

Exemplos

destination.port == 21

destination.port < 3001

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.

Os atributos da regra de encaminhamento são compatíveis nos seguintes serviços do Google Cloud:

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.

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.

Esse atributo é compatível no Identity-Aware Proxy.

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.

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.

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() retorna valores diferentes, dependendo se o modelo de extração tem um prefixo, um sufixo ou ambos:

Tem prefixo Tem sufixo Valor extraído
Todo o nome do recurso
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.