Este documento 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 quais serviços doTrusted Cloud by S3NS 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 Trusted Cloud compatíveis |
---|---|---|
Atributo do serviço de recurso |
Gerencie o acesso com base no serviço Trusted Cloud que está sendo usado. É possível usar esse atributo nas vinculações de papéis da política de permissão. |
|
Atributo de tipo de recurso |
Gerencie o acesso com base no tipo de recurso. É possível usar esse atributo nas vinculações de papéis da política de permissão. |
|
Atributo de nome de recurso |
Gerencie o acesso com base no nome do recurso. É possível usar esse atributo nas vinculações de papéis da política de permissão. |
|
Tags de recurso |
Gerencie o acesso com base nas tags anexadas ao recurso. Você pode usar esse atributo nos seguintes lugares:
|
Todos os serviços do Trusted Cloud (consulte Suporte para condições herdadas) |
Para mais detalhes sobre os atributos de recursos, consulte Atributos de recurso nesta página.
Atributos de solicitação
Os atributos a seguir estão relacionados aos detalhes da solicitação.
Atributo | Resumo do uso | Serviços Trusted Cloud compatíveis |
---|---|---|
Gerencie o acesso com base nos dados fornecidos por uma API ou um serviço específico do Trusted Cloud. É possível usar esse atributo nas vinculações de papéis da política de permissão. |
|
|
Defina o acesso expirável, programado ou de duração limitada aos recursos do Trusted Cloud . É possível usar esses atributos nas vinculações de papéis de política de permissão. |
Todos os serviços do Trusted Cloud (consulte Suporte para condições herdadas) |
|
Especifique os tipos de regras de encaminhamento que um principal pode criar. Por exemplo, é possível permitir que um principal crie regras de encaminhamento para balanceadores de carga Trusted Cloud by S3NS internos, que processam tráfego originário de uma rede Trusted Cloud , mas não para balanceadores de carga Trusted Cloud externos, que processam tráfego originário da Internet. É possível usar esses atributos nas vinculações de papéis de política de permissão. |
|
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 Trusted Cloud não permitem condições nas políticas de permissão. No entanto, é possível adicionar vinculações de papéis condicionais no nível da organização, da pasta ou do projeto, e outros recursos herdarão essas vinculações de papéis por meio da hierarquia de recursos. Para mais detalhes, consulte Tipos de recursos que aceitam vinculações de papéis condicionais.
Quando usar atributos no nível da organização, pasta ou projeto, lembre-se de que a maioria
dos atributos está disponível apenas para tipos de recursos específicos. Se parte de uma condição usar um atributo que não está disponível, essa parte da condição nunca será interpretada como concessão de acesso. Por exemplo, a condição resource.name.endsWith == devResource
nunca concede acesso a nenhum recurso do IAM porque eles não fornecem o nome do recurso.
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 do Compute Engine. Por
outro lado, para instâncias do Compute Engine, a condição verifica o nome do recurso:
resource.type != 'compute.googleapis.com/Disk' ||
resource.name.endsWith('devResource')
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çoTrusted Cloud que está sendo usado. Por exemplo, é possível definir uma condição
que limite o acesso de um usuário a recursos que usam o
serviço cloudresourcemanager.googleapis.com
. Para ver uma lista de valores compatíveis,
consulte Valores de serviço de recursos.
É possível usar esse atributo resource.service
nas vinculações de papéis da política de permissão.
Variável de atributo | resource.service |
---|---|
Tipo de atributo |
Para ver uma lista de valores compatíveis, consulte Valores de serviço de recursos. |
Operadores com suporte | , |
Detalhes |
Ao usar o atributo resource.type nas condições, verifique a igualdade exata ( ) ou a desigualdade exata ( ) com o atributo.
Outras comparações, como a verificação de um prefixo ou sufixo, podem gerar
resultados inesperados.
|
Exemplo |
Retorna 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
. Para ver uma lista de valores
compatíveis, consulte Valores de tipo de recurso.
Se sua condição usar o atributo resource.name
, recomendamos que você use
o atributo resource.type
para controlar a quais tipos de recurso
a condição se aplica. Para detalhes, consulte o
atributo resource.name
nesta página.
É possível usar esse atributo resource.type
nas vinculações de papéis da política de permissão.
Variável de atributo | resource.type |
||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo de atributo |
Para ver uma lista de valores compatíveis, consulteValores de tipo de recurso. . |
||||||||||||||||||||||
Operadores com suporte | , |
||||||||||||||||||||||
Detalhes |
Ao usar o atributo resource.type nas condições, verifique a igualdade exata ( ) ou a desigualdade exata ( ) com o atributo. Outras
comparações, como a verificação de um prefixo ou sufixo, podem gerar
resultados inesperados.
|
||||||||||||||||||||||
Exemplos |
Retorna resource.type != "compute.googleapis.com/Image"
Retornará (resource.type == "compute.googleapis.com/Image" || resource.type == "compute.googleapis.com/Disk") |
||||||||||||||||||||||
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. Para ver uma lista de formatos de nome de recurso, consulte
Formato de nome do recurso.
O atributo resource.name
está disponível apenas para tipos de recursos específicos,
que estão listados na tabela desta seção. É recomendável que você limite a
aplicação da condição ao tipo de recurso pretendido. Se um papel contiver
permissões para um tipo de recurso que não fornece o atributo resource.name
,
certifique-se de que essas permissões não sejam restritas pela
parte da condição que verifica resource.name
.
O exemplo a seguir mostra como garantir esse comportamento. Neste exemplo, a
condição permite o acesso a todos os tipos de recursos, exceto buckets e objetos do
Cloud Storage. Por outro lado, para buckets e objetos, a condição só permite acesso
ao bucket example-bucket
e aos objetos que ele contém:
(resource.type != 'storage.googleapis.com/Bucket' &&
resource.type != 'storage.googleapis.com/Object') ||
resource.name.startsWith('projects/_/buckets/example-bucket')
A primeira parte da condição verifica se o recurso não
é um bucket nem um objeto. Se o recurso tiver um tipo diferente, toda a
condição será avaliada como true
, independentemente do nome do recurso.
Além disso, a condição verifica o atributo resource.type
, não
o resource.service
. Há alguns benefícios de verificar o
atributo resource.type
:
- Ele limita a verificação
resource.name
ao conjunto apropriado de recursos. Por exemplo, se você quer conceder acesso a instâncias do Compute Engine com um nome específico, faz sentido excluir todos os tipos de recursos, exceto instâncias do Compute Engine. - Ela impede que o escopo da condição seja alterado se um serviço adicionar novos tipos de recursos no futuro.
Por fim, a condição usa a função startsWith()
para avaliar
o nome do recurso em vez de verificar a igualdade com o operador . Como a condição analisa o início do nome do recurso, ela corresponde a um
bucket e aos objetos dele. Se ele verificasse a igualdade,
corresponderia apenas ao bucket.
Não é possível usar caracteres curinga como *
para fazer correspondência a vários nomes de recursos. Considere estas alternativas:
Use a função
extract()
para extrair um valor de um nome de recurso. Por exemplo, é possível extrair um ID do projeto por meio do nome do recurso de uma instância de VM do Compute Engine e, em seguida, escrever uma expressão de condição que se refere ao ID do projeto.Para detalhes, consulte Como extrair valores de atributos nesta página.
Use a função
startsWith()
ouendsWith()
para escrever uma condição que avalie o início ou o fim do nome do recurso.
É possível usar esse atributo resource.name
nas vinculações de papéis da política de permissão.
Variável de atributo | resource.name |
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Tipo de atributo |
Cada tipo de recurso usa um formato específico para o nome do recurso. Para uma lista de formatos, consulte Formato do nome do recurso. |
||||||||||||||||
Funções e operadores compatíveis |
startsWith(), endsWith(), extract(),
, |
||||||||||||||||
Detalhes |
O
A função
A função
A função Os operadores |
||||||||||||||||
Exemplos |
Retorna resource.name != "projects/_/buckets/secret-bucket-123"
Retornará resource.name.startsWith("projects/project-123/zones/us-east1-b/instances/prod-")
Retornará resource.name.startsWith("projects/_/buckets/my_bucket/objects/test-object-")
Retornará resource.name.endsWith(".jpg") Retorna o nome ou o número do projeto, se houver: resource.name.extract("projects/{project}/") |
||||||||||||||||
Tipos de recursos compatíveis |
|
Tags de recurso
As funções de tag de recurso permitem definir uma condição com base nas tags anexadas aos recursos compatíveis ou herdadas pelos descendentes desses recursos. Por exemplo, é possível definir uma condição que conceda uma
função 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 permanentetagValues/567890123456
. -
Um nome curto. O nome curto de cada chave precisa ser exclusivo no projeto ou
na organização em que a chave é definida, 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 abreviadoprod
. -
Um nome de namespace, que adiciona o ID numérico da sua organização ou do projeto ao
nome curto de uma chave de tag. Por exemplo, uma chave de tag criada para uma organização pode ter o nome
de namespace
123456789012/env
. Para saber como conseguir o ID da organização, consulte Como conseguir o ID do recurso da sua organização. Uma chave de tag criada para um projeto pode ter o nome de namespacemyproject/env
. Para saber como conseguir o ID do projeto, consulte Como identificar projetos.
Para orientações sobre como escolher o tipo de identificador a ser usado nas suas condições, consulte Definições e identificadores de tags.
É possível usar condições baseadas em tags para condicionar o acesso a qualquer recurso. Isso inclui recursos com tags próprias, assim como recursos que herdam tags de outros recursos. Para saber mais sobre como as tags são herdadas pela hierarquia de recursos, consulte Herança de tags.
No entanto, algumas áreas do console Trusted Cloud não reconhecem vinculações de papéis da política de permissão com condições baseadas em tags. Como resultado, se você tiver uma função com uma condição baseada em tag, o console Trusted Cloud poderá impedir incorretamente que você realize determinadas ações. Se você encontrar esse problema, use um método alternativo, como a CLI gcloud, para realizar a ação.
É possível usar condições com base em tags nos seguintes recursos:
- Permitir vinculações de papéis da política
- Regras de negação da política de negação
Você pode usar as seguintes funções para definir condições com base nas tags:
Função | Descrição |
---|---|
resource.hasTagKey(
bool
|
Verifica se o recurso da solicitação tem uma tag com a chave especificada. A chave da tag é pesquisada pelo nome do namespace. Para verificar uma chave de tag usando o código permanente, use a função
|
resource.hasTagKeyId(
bool
|
Verifica se o recurso da solicitação tem uma tag com a chave especificada. A chave da tag é pesquisada pelo código permanente.
Para verificar a chave de uma tag usando o nome de namespace dela, use a função
|
resource.matchTag(
bool
|
Verifica se o recurso da solicitação tem uma tag com a chave e o valor especificados. A chave é pesquisada pelo nome do namespace e o valor é pesquisado pelo nome curto. Para verificar uma chave de tag e um valor usando os códigos permanentes, use a função
|
resource.matchTagId(
bool
|
Verifica se o recurso da solicitação tem uma tag com a chave e o valor especificados. A chave e o valor são pesquisados pelos códigos permanentes. Para verificar uma chave de tag usando o nome de namespace e um valor com nome curto, use a função
|
Atributos de solicitação
Os atributos de solicitação permitem criar condições que avaliam detalhes sobre a solicitação, como os papéis modificados por ela ou a data e hora da solicitação.
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 doTrusted Cloud específico. É possível usar atributos de API nas vinculações de papéis da política de permissão.
Para exemplos de quando pode ser necessário usar atributos de API em uma condição, consulte as seguintes páginas:
Nem todos os serviços reconhecem atributos da API. As seções a seguir indicam quais serviços reconhecem cada atributo da API.
Funções para atributos de API
Use a seguinte função para trabalhar com atributos de API:
Função | Descrição | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
api.getAttribute(
V<T>
|
Recebe o atributo de API solicitado.
|
||||||||||||
hasOnly(
bool |
Função: verifica se uma lista contém apenas os itens permitidos ou um subconjunto desses itens. Chame a função em uma lista retornada por
|
Atributos da API IAM
O IAM fornece o seguinte atributo de API:
Variável de atributo | iam.googleapis.com/modifiedGrantsByRole |
---|---|
Tipo de atributo | list<string> |
Detalhes |
Para uma solicitação que define a política de permissão de um recurso, este atributo contém os nomes dos papéis das vinculações de papéis que a solicitação modifica. Para outros tipos de solicitação, o atributo não é definido. |
Tipos de recursos que aceitam esse atributo |
Os tipos de recurso a seguir aceitam condições com o atributo
|
Serviços que reconhecem esse atributo: |
Os serviços a seguir reconhecem o atributo
|
Atributo de data/hora
O atributo de data/hora é usado para definir acesso expirável, programado ou de duração limitada aos recursos do Trusted Cloud . É possível usar atributos de data/hora em vinculações de função de política de permissão.
Esse atributo está disponível para todos os Trusted Cloud serviços e tipos de recursos. Para saber como aplicar condições de data/hora a recursos que não são diretamente compatíveis com elas, consulte Suporte para condições herdadas nesta página.
O atributo request.time
contém o carimbo de data/hora da solicitação. É possível comparar esse carimbo de data/hora a outro ou a um período.
As seções a seguir listam as funções que podem ser usadas para definir condições com base em carimbos de data/hora e durações.
Criar, comparar e modificar carimbos de data/hora e durações
Função ou operador | Descrição |
---|---|
date(
Timestamp |
Converte uma data de um
|
duration(
Duration |
Converte um período de um
|
timestamp(
Timestamp |
Converte um
|
, , , |
Compara dois valores
|
|
Adicione ou subtraia um
|
Extrair informações de um carimbo de data/hora
As funções nesta seção permitem extrair informações de um carimbo de data/hora, como o dia da semana em que ele se enquadra.
Nas condições do IAM, todos os carimbos de data/hora estão em UTC. No entanto, talvez você queira extrair informações com base em um fuso horário diferente. Por exemplo, talvez você queira saber se um carimbo de data/hora UTC cai em uma segunda-feira no fuso horário de Berlim, na Alemanha.
Para especificar um fuso horário diferente, transfira o fuso para a função. Use um
nome ou deslocamento UTC do
banco de dados
de fuso horário da IETF. Por exemplo, use Europe/Berlin
ou +01:00
para o horário da Europa Central (CET, na sigla em inglês).
Funções e operadores compatíveis | Descrição |
---|---|
Timestamp.getDate(
int
|
Recebe o dia do mês da
|
Timestamp.getDayOfMonth(
int
|
Recebe o dia do mês da
|
Timestamp.getDayOfWeek(
int
|
Recebe o dia da semana da
|
Timestamp.getDayOfYear(
int
|
Recebe o dia do ano da
|
Timestamp.getFullYear(
int
|
Recebe o ano da
|
Timestamp.getHours(
int
|
Recebe a hora do dia de
É possível combinar essa função com
|
Timestamp.getMilliseconds(
int
|
Recebe o número de milissegundos do
|
Timestamp.getMinutes(
int
|
Recebe o número de minutos após a hora no
|
Timestamp.getMonth(
int
|
Recebe o mês do ano da
|
Timestamp.getSeconds(
int
|
Recebe o número de segundos do
|
, , , |
Compara a saída de duas funções nesta tabela. |
Atributos da regra de encaminhamento
Os atributos da regra de encaminhamento permitem especificar os tipos de regras de encaminhamento que um principal pode criar. Por exemplo, é possível permitir que um principal crie regras de encaminhamento para balanceadores de carga Trusted Cloud by S3NSinternos, que processam tráfego proveniente de uma rede Trusted Cloud , mas não para balanceadores de carga Trusted Cloudexternos, que processam tráfego originário da Internet. É possível usar atributos da regra de encaminhamento em vinculações de papel de política de permissão.
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 Trusted Cloud , como serviços de back-end, proxies de destino, verificações de integridade e mapas de URL.
Funções compatíveis
Função | Descrição |
---|---|
compute.isForwardingRule
bool
|
Verifica se a solicitação está criando uma regra de encaminhamento.
|
compute.matchLoad
bool
|
Verifica se a solicitação afeta um dos tipos especificados de esquema de balanceamento de carga. Para encontrar o identificador de cada esquema de balanceamento de carga, além de mais detalhes, consulte Como usar condições do IAM em balanceadores de carga do Trusted Cloud .
|
Tipos de recursos compatíveis
Esse atributo está disponível para solicitações de criação dos seguintes tipos de recursos:
Serviço | Tipos de recurso |
---|---|
Cloud Load Balancing | Regras de encaminhamento |
Cloud VPN | Regras de encaminhamento (global e regional) |
Compute Engine | Regras de encaminhamento (para encaminhamento de protocolo) |
Cloud Service Mesh1 | Regras de encaminhamento |
1 Usa os atributos de recurso do Compute Engine.
Extrair valores de atributos
É possível usar a função extract()
para extrair um valor de um atributo. Por
exemplo, é possível extrair uma parte arbitrária de um nome de recurso e, em seguida, escrever uma
expressão de condição que se refere ao texto extraído.
Para usar a função extract()
, insira um modelo de extração, que
especifica a parte do atributo a ser extraída. Por exemplo, se você quiser
extrair um ID do projeto do nome do recurso de uma instância de VM do Compute Engine,
use o modelo projects/{project}/
.
Um modelo de extração contém as seguintes partes:
Um identificador, entre chaves, que identifica a substring a ser extraída.
Escolha um identificador pequeno e significativo que deixe claro qual valor você quer extrair. Use letras maiúsculas e minúsculas de
A
aZ
, dígitos numéricos e sublinhados (_
).No modelo
projects/{project}/
, o identificador éproject
.Opcional: um prefixo, que precisa aparecer antes da substring a ser extraída.
No modelo
projects/{project}/
, o prefixo éprojects/
.Opcional: um sufixo, que precisa aparecer depois da substring a ser extraída.
No modelo
projects/{project}/
, o sufixo é/
.
A função extract()
extrai partes diferentes do atributo com base no modelo de extração ter um prefixo, um sufixo ou ambos:
Tem prefixo | Tem sufixo | Valor extraído |
---|---|---|
— | — | Todo o atributo |
— | Os caracteres após a primeira ocorrência do prefixo ou uma string em branco se não houver caracteres depois do prefixo | |
— | Os caracteres antes da primeira ocorrência do sufixo ou uma string em branco se não houver caracteres antes do sufixo | |
Os caracteres entre a primeira ocorrência do prefixo e a primeira ocorrência subsequente do sufixo, ou uma string vazia se não houver caracteres entre o prefixo e o sufixo |
Se você especificar um prefixo ou sufixo que não apareça no atributo, ou se o sufixo aparecer somente antes do prefixo, a função extract()
retornará uma string vazia.
Nos exemplos a seguir, mostramos a saída de vários modelos de extração
diferentes. Estes exemplos se referem a um nome de recurso para um objeto do
Cloud Storage,
projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/
:
Modelo de extração | Saída |
---|---|
/order_date={date}/ |
2019-11-03 |
buckets/{name}/ |
acme-orders-aaa |
/orders/{empty}order_date |
Esvaziar string |
{start}/objects/data_lake |
projects/_/buckets/acme-orders-aaa |
orders/{end} |
order_date=2019-11-03/aef87g87ae0876 |
{all} |
projects/_/buckets/acme-orders-aaa/objects/data_lake/orders/ |
/orders/{none}/order_date= |
Esvaziar string |
/orders/order_date=2019-11-03/ |
Esvaziar string |
Se você extrair uma string que represente uma data, use as
funções e operadores de data/hora nesta página para converter o
valor extraído em um Timestamp
de data/hora. Para exemplos, consulte
Como configurar o acesso com base em recursos.