Como criar um nível de acesso personalizado

É 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

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:

  1. Abra a página Access Context Manager no Google Cloud console.

    Abrir a página do Access Context Manager

  2. Se solicitado, selecione a organização.

  3. Na parte superior da página do Access Context Manager, clique em Novo.

  4. No painel Novo nível de acesso, faça o seguinte:

    1. 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.

    2. Ao lado de Criar condições em, selecione Modo avançado.

    3. 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.

    4. 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
Tipo string
Descrição

Obrigatório.

O nome do recurso para o nível de acesso. O POLICY_ID é o nome numérico da política de acesso da sua organização. O SHORT_NAME precisa começar com uma letra e incluir apenas letras, números e sublinhados.

Formato :

            accessPolicies/policy_id/accessLevels/short_name
            
title
Tipo string
Descrição

Um rótulo legível por humanos para o nível de acesso. Os níveis de acesso precisam ter nomes exclusivos.

description
Tipo string
Descrição

Uma descrição do nível de acesso.

custom
Tipo string
Descrição

As expressões CEL para seu nível de acesso personalizado. A expressão completa precisa ser resolvida com um valor booleano.

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)