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 |
---|---|---|
Gerencie o acesso com base no serviço do Google Cloud que está sendo usado. |
|
|
Gerencie o acesso com base no tipo 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 |
---|---|---|
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 |
Identity-Aware Proxy |
|
Gerencie o acesso com base nos dados fornecidos por uma API ou um serviço do Google Cloud específico. |
Cloud Storage |
|
Defina o acesso expirável, programado ou de duração limitada aos recursos do Google Cloud. |
Todos os serviços do Google Cloud |
|
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 O uso atual é principalmente para o encaminhamento TCP do Identity-Aware Proxy. |
Identity-Aware Proxy |
|
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. |
|
|
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 |
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
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
|
Discussão | A variável resource.service , se usada, será destinada a comparações de igualdade ou desigualdade.
Observação: as funções |
Exemplos |
Exemplo 1: resource.service == "compute.googleapis.com" |
Serviços compatíveis |
|
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
|
||||||||||||||||||
Discussão | A variável resource.type , se usada, será destinada a comparações de igualdade ou desigualdade.
Observação: as funções |
||||||||||||||||||
Exemplos |
Exemplo 1: resource.type != "compute.googleapis.com/Image" Exemplo 2: (resource.type == "compute.googleapis.com/Image" || |
||||||||||||||||||
Tipos de recursos compatíveis |
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
:
- Ela limita a verificação
resource.name
ao conjunto apropriado de recursos. Por exemplo, para conceder acesso a instâncias do Compute Engine com um nome específico, você precisa 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
A função
A função
A função Os operadores |
||||||||||||
Exemplos |
Exemplo 1 (para uma instância de VM do Compute Engine):
Exemplo 2 (para um bucket do Cloud Storage):
Exemplo 3 (para um objeto do Cloud Storage):
Exemplo 4 (para vários tipos de recurso):
Exemplo 5 (para um bucket do Cloud Storage):
|
||||||||||||
Tipos de recursos compatíveis |
|
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 no App Engine. Mais especificamente, o atributo de níveis de acesso está disponível apenas 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 O nome completo de um nível de acesso tem um nome formatado no seguinte padrão: 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" |
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 ver um exemplo de quando é possível usar atributos de API em uma condição, consulte Limitar as permissões ao listar objetos.
Esse atributo é compatível com os buckets do Cloud Storage, mas apenas com limites de acesso a credenciais e somente com o processo de listagem de objetos.
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 Exemplo:
|
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 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.
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. Exemplo:
|
duration |
String --> Duração |
Função: converte uma string em uma duração. Exemplos:
|
|
String --> Carimbo de data/hora |
Função: converte uma string em um carimbo de data/hora. Exemplos:
Observação importante: |
|
(Carimbo de data/hora, carimbo de data/hora) --> bool |
Função: comparação geral com o tipo carimbo de data/hora. Exemplos: |
+ , - |
(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:
|
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: |
|
Timestamp.() --> int |
Funções: Parâmetros: Exemplo: Exemplo: Exemplo: |
|
Timestamp.() --> int |
Função: recebe o ano a partir da data. Parâmetros: Exemplo: Exemplo: |
|
Timestamp.() --> int |
Função: recebe as horas a partir da data. Os valores variam de 0 a 23. Parâmetros: Exemplo: Observação: |
|
Timestamp.() --> 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: Observação: |
|
Timestamp.() --> 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: Observação: |
|
Timestamp.() --> 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: Exemplo: |
|
Timestamp.() --> 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: Observação: |
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.
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 Observação: as funções |
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 |
A variável |
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.isForwardingRule |
() --> bool |
Função: verifica se a solicitação está criando uma regra de encaminhamento. Exemplos: consulte os exemplos de |
compute.matchLoad |
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:
|
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 |
|
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 ( 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 |
|
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 ( 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
aZ
, 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/{none}/order_date= |
null |
/orders/order_date=2019-11-03/ |
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.