É possível usar níveis de acesso personalizados no Access Context Manager para controlar o acesso a Google Cloud recursos usando expressões booleanas escritas em um subconjunto da Common Expression Language (CEL). Você pode avaliar atributos de solicitação, como projeto de rede de origem, endereço IP, identidade e dados de dispositivo de serviços de segurança de terceiros, para aplicar requisitos de acesso baseado no contexto e refinados.
Para usar atributos de dispositivo em expressões de nível de acesso personalizado, é necessário ter uma assinatura paga. Para mais detalhes sobre como criar expressões CEL, consulte a especificação do nível de acesso personalizado. Depois de criar um nível de acesso personalizado, você pode gerenciá-lo da mesma forma que um nível de acesso básico nível de acesso.
Antes de começar
- Crie uma política de acesso para sua organização.
Criar um nível de acesso personalizado
É possível criar um nível de acesso personalizado usando o Google Cloud console,
a ferramenta de linha de comando gcloud , a API REST ou RPC.
Console
Para criar um nível de acesso personalizado usando o Google Cloud console, faça o seguinte:
Abra a página Access Context Manager no Google Cloud console.
Se solicitado, selecione a organização.
Na parte superior da página do Access Context Manager, clique em Novo.
No painel Novo nível de acesso, faça o seguinte:
Na caixa Título do nível de acesso, digite um título para o nível de acesso. O título precisa ter no máximo 50 caracteres, começar com uma letra e pode conter apenas números, letras, sublinhados e espaços.
Ao lado de Criar condições em, selecione Modo avançado.
Na seção Condições, insira as expressões para seu nível de acesso personalizado. A condição precisa ser resolvida como um único valor booleano.
Para ver exemplos e mais informações sobre o suporte à Common Expression Language (CEL) e os níveis de acesso personalizados, consulte a Especificação do nível de acesso personalizado.
Clique em Save.
gcloud
Para criar um nível de acesso personalizado usando a ferramenta de linha de comando gcloud, use o
gcloud access-context-manager levels create comando.
gcloud access-context-manager levels create LEVEL_NAME \ --title=TITLE \ --custom-level-spec=FILE \ --description=DESCRIPTION \ --policy=POLICY_NAME
Substitua:
LEVEL_NAME: um nome exclusivo para o nível de acesso. O nome precisa começar com uma letra e incluir apenas letras, números e sublinhados. O nome pode ter no máximo 50 caracteres.TITLE: o título curto e legível por humanos para o nível de acesso.FILE: um arquivo YAML que contém sua expressão CEL formatada como um único par de chave-valor:expression: "CEL_EXPRESSION".Para ver exemplos e mais informações sobre o suporte à Common Expression Language (CEL) e os níveis de acesso personalizados, consulte a Especificação do nível de acesso personalizado.
DESCRIPTION: uma descrição legível por humanos do nível de acesso.POLICY_NAME: o nome numérico da política de acesso da sua organização.
Se quiser, inclua qualquer uma das
gcloud-wide flags.
Arquivo YAML custom-level-spec
Ao usar a ferramenta de linha de comando gcloud para criar um nível de acesso personalizado, é necessário fornecer um arquivo YAML para a opção custom-level-spec. O arquivo YAML define uma expressão CEL que é resolvida como um único valor booleano. O arquivo YAML
precisa conter um único par de chave-valor formatado como
expression: "CEL_EXPRESSION". O valor de expression precisa ser uma string.
Exemplo de arquivo YAML
expression: "device.encryption_status == DeviceEncryptionStatus.ENCRYPTED && (origin.region_code in ['US'] || device.is_admin_approved_device)"
Exemplo de comando
gcloud access-context-manager levels create Custom_Trust \
--custom-level-spec=customspec.yaml \
--description="Custom access level for corp." \
--title="Custom Trust Level" \
--policy=1521580097614100
REST
Para criar um nível de acesso personalizado usando a API REST, use o
accessPolicies.accessLevels.create
método.
Corpo da solicitação
No corpo da solicitação da chamada, inclua uma instância do objeto
AccessLevel.
{
"name": string,
"title": string,
"description": string,
"custom": {
"expr": {
"expression": string,
"title": string,
"description": string
}
}
}
Para o campo custom, crie um objeto que inclua as expressões CEL
para seu nível de acesso personalizado. A expressão completa precisa ser resolvida com um
valor booleano. Os campos title e description são opcionais.
Exemplo
{
"name": "example_custom_level",
"title": "Example custom level",
"description": "An example custom access level.",
"custom": {
"expr": {
"expression": "device.is_corp_owned == true || (device.os_type != OsType.OS_UNSPECIFIED && device.is_admin_approved_device == true)",
"title": "Check for known devices",
"description": "Permits requests from corp-owned devices and admin-approved devices with a known OS."
}
}
}
RPC
Para criar um nível de acesso personalizado usando RPC, chame
CreateAccessLevel.
Para o campo access_level, inclua uma instância de AccessLevel.
| Campos | |||||
|---|---|---|---|---|---|
name
|
|
||||
title
|
|
||||
description
|
|
||||
custom
|
|
||||
Exemplos de níveis de acesso personalizados
Esta seção fornece exemplos de níveis de acesso personalizados.
Restringir o acesso com base no projeto de origem
É possível restringir o acesso a recursos para permitir apenas solicitações originadas de projetos Google Cloud específicos e projetos de locatário relacionados. A restrição de acesso baseada em projetos é útil para proteger interações por identidades de carga de trabalho, que são identidades não humanas pertencentes a um Google Cloud projeto. As identidades de carga de trabalho incluem contas de serviço, identidades de federação de identidade de carga de trabalho, identidades de carga de trabalho gerenciadas e identidades de agente.
A expressão a seguir concede acesso se a solicitação vier de projects/123456789:
originatesFromProjects(origin, ["projects/123456789"])
Restringir o acesso da identidade da carga de trabalho ao próprio projeto de rede
É possível restringir uma identidade de carga de trabalho para que ela só possa fazer solicitações de
redes associadas a um Google Cloud projeto que seja proprietário da
identidade da carga de trabalho. O projeto pode ser um projeto de nível superior ou projetos de locatário do projeto de nível superior. A restrição de acesso baseada em projetos é útil para proteger interações de identidade de carga de trabalho. Ao contrário de originatesFromProjects, não é necessário especificar números de projetos na expressão, o que permite reutilizar o mesmo nível de acesso em vários projetos.
A expressão a seguir concede acesso se o projeto de rede de origem (ou os projetos de locatário associados a ele) corresponder ao projeto que é proprietário da identidade da carga de trabalho de chamada:
request.auth.matchesNetworkProject(origin)