Como criar e aplicar níveis de acesso a recursos protegidos pelo IAP

Nesta página, explicamos como criar níveis de acesso usando o Access Context Manager e aplicá-las em recursos protegidos do Identity-Aware Proxy (IAP).

Visão geral

Um nível de acesso é um conjunto de atributos ligados a solicitações com base em na origem delas. Usando informações como tipo de dispositivo, endereço IP e identidade do usuário, é possível designar o nível de acesso a ser concedido. Por exemplo, atribua um nível "High_Trust" às conexões da rede corporativa e confiança "Medium_Trust" a dispositivos externos que executam sistemas operacionais aprovados.

As informações do dispositivo são coletadas e referenciadas por níveis de acesso depois de configurar a Verificação de endpoint. A Verificação de endpoints cria um inventário de todos os dispositivos corporativos e pessoais que acessam seus recursos corporativos.

Um nível de acesso é aplicado adicionando-o como uma condição de gerenciamento de identidade e acesso (IAM, na sigla em inglês) no recurso protegido por IAP. O IAP permite aplicar um modelo de controle de acesso detalhado no nível do recurso, em vez de usar firewalls de rede. Por exemplo, você pode especificar que, enquanto muitos recursos estão disponíveis para "Medium_Trust", certos recursos mais confidenciais exigem o nível "High_Trust".

Para mais informações, consulte a visão geral do Access Context Manager.

Antes de começar

Antes de começar, siga estas etapas:

  • Proteja um recurso com o IAP.
  • Configure a Verificação de endpoints. Isso só será necessário se você quiser limitar o acesso aos seus recursos com base em informações de dispositivos de usuários, como o status de criptografia de armazenamento.
  • Verifique se você tem um dos seguintes papéis concedidos no seu projeto.

    • Administrador do Access Context Manager
    • Editor do Access Context Manager

Como criar um nível de acesso

O processo a seguir cria um nível de acesso.

Neste exemplo, suponha que você queira criar um nível de acesso que permita a um grupo de auditores internos acessar a Observabilidade do Google Cloud para um projeto. Todos os dispositivos para eles recebem IPs em uma sub-rede que varia entre 203.0.113.0 e 203.0.113.127. Você também quer garantir que os dispositivos sejam criptografados. Você sabe que não haverá dispositivos designados para essa sub-rede além daqueles usados pelos auditores.

Console

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

    Acessar 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, na seção Condições, clique em Adicionar atributo e, em seguida, clique em Política do dispositivo.

  5. Clique na lista suspensa Criptografia de armazenamento e selecione Criptografado. Essa regra só funciona depois que você configura a Verificação de endpoints nos dispositivos dos funcionários.

  6. Clique em Adicionar atributo novamente e selecione Sub-redes de IP.

  7. Na caixa Sub-redes IP, digite um ou mais intervalos IPv4 ou IPv6 formatados como blocos CIDR.

    Neste exemplo, para limitar o acesso apenas aos auditores, insira 203.0.113.0/25 na caixa Sub-redes de IP.

  8. Clique em Save.

gcloud

  1. Crie um arquivo .yaml para um nível de acesso que inclua um ou mais intervalos IPv4 ou IPv6 formatados como blocos CIDR.

    Neste exemplo, para limitar o acesso apenas aos auditores, insira o seguinte no arquivo .yaml:

    - ipSubnetworks:
        - 203.0.113.0/25
    - devicePolicy:
        allowedEncryptionStatuses
          - ENCRYPTED
    

    Para ver uma lista de atributos de nível de acesso e o formato YAML, consulte Atributos de nível de acesso. Consulte este arquivo YAML de nível de acesso de exemplo para um arquivo YAML abrangente sobre todos os atributos possíveis.

    Observe que a regra devicePolicy só funciona quando você configura a verificação de endpoint nos dispositivos dos funcionários.

  2. Salve o arquivo. Neste exemplo, o arquivo é denominado CONDITIONS.yaml.

  3. Crie o nível de acesso.

    gcloud access-context-manager levels create NAME \
       --title TITLE \
       --basic-level-spec CONDITIONS.yaml \
       --policy=POLICY_NAME

    Onde:

    • NAME é o nome exclusivo do nível de acesso. Ele precisa começar com uma letra e incluir apenas letras, números e sublinhados;

    • TITLE é um título legível. Ele precisa ser exclusivo para a política.

    • POLICY_NAME é o nome da política de acesso da organização.

    Você verá uma saída como:

    Create request issued for: NAME
    Waiting for operation [accessPolicies/POLICY_NAME/accessLevels/NAME/create/1521594488380943] to complete...done.
    Created level NAME.
    

API

  1. Crie um corpo de solicitação para criar um recurso AccessLevel que inclua um ou mais intervalos IPv4 ou IPv6 formatados como blocos CIDR e uma política de dispositivo que. exige armazenamento criptografado.

    Neste exemplo, para limitar o acesso apenas aos auditores, insira o seguinte no corpo da solicitação:

    {
     "name": "NAME",
     "title": "TITLE",
     "basic": {
       "conditions": [
         {
           "ipSubnetworks": [
             "203.0.113.0/25"
           ]
         },
         {
         "devicePolicy": [
           "allowedEncryptionStatuses": [
             "ENCRYPTED"
           ]
         ]
         }
       ]
     }
    }

    Onde:

    • NAME é o nome exclusivo do nível de acesso. Ele precisa começar com uma letra e incluir apenas letras, números e sublinhados;

    • TITLE é um título legível. Ele precisa ser exclusivo para a política.

  2. Crie o nível de acesso chamando accessLevels.create.

    POST https://accesscontextmanager.googleapis.com/v1/accessPolicies/POLICY_NAME/accessLevels

    Onde:

    • POLICY_NAME é o nome da política de acesso da organização.

Como aplicar um nível de acesso

Um recurso protegido pelo IAP tem uma política do IAM que vincula o papel do IAP ao recurso.

Ao adicionar uma vinculação condicional do IAM à política do IAM, o acesso aos seus recursos fica ainda mais restrito com base nos atributos da solicitação. Esses atributos de solicitação incluem:

  • Níveis de acesso
  • URL/caminho do host
  • Data/hora

Os valores de solicitação que serão comparados a request.host e request.path, especificados em uma vinculação condicional do IAM, precisam ser exatos. Por exemplo, se você restringir o acesso a caminhos que começam com /internal admin, será possível ignorar a restrição acessando /internal%20admin. Consulte Como usar o nome do host e as condições do caminho para mais informações.

As etapas a seguir mostram como adicionar o nível de acesso a um recurso protegido pelo IAP atualizando a política do IAM.

Console

  1. Acesse a página de administrador do IAP.

    Acessar a página de administrador do IAP

  2. Marque a caixa de seleção ao lado dos recursos que tem as permissões do IAM que você quer atualizar.

  3. No painel de informações direito, clique em Adicionar principal.

  4. Na caixa Novo principal, insira os principais aos quais você quer atribuir um papel.

  5. Na lista suspensa Selecionar um papel, selecione o papel Usuário do app da Web protegido pelo IAP.

  6. Para especificar os níveis de acesso atuais, selecione-os na lista suspensa Níveis de acesso. É necessário selecionar o papel Usuário do app da Web protegido pelo IAP e ter permissões no nível da organização para exibir os níveis de acesso atuais.

    Quando você aplica vários níveis de acesso a um recurso, os usuários recebem acesso a ele quando atendem às condições especificadas em pelo menos um dos níveis de acesso selecionados. A lógica dos níveis de acesso na lista é "OR". Se você quiser que os usuários atendam às condições em mais de um nível de acesso (com a lógica "AND"), crie um nível de acesso que tenha vários níveis de acesso.

  7. Se você quiser adicionar mais papéis aos principais, clique em Adicionar outro papel.

  8. Quando terminar de adicionar papéis, clique em Salvar.

gcloud

No momento, só é possível usar a CLI gcloud para definir vinculações condicionais para envolvidos no projeto.

Para definir vinculações condicionais, edite o arquivo policy.yaml do seu projeto seguindo o processo abaixo:

  1. Abra a política do IAM do app usando o seguinte comando gcloud:

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml
  2. Edite o arquivo policy.yaml para especificar:

    • Os usuários e grupos aos quais você quer aplicar a condição do IAM.
    • o papel iap.httpsResourceAccessor para conceder a eles acesso aos recursos.
    • A condição do IAM com seu nível de acesso.

    A condição a seguir concederá acesso ao usuário e ao grupo se os requisitos de nível ACCESS_LEVEL_NAME forem atendidos e o caminho do URL do recurso começar com /.

    ...
    - members:
    - group:EXAMPLE_GROUP@GOOGLE.COM
    - user:EXAMPLE_USER@GOOGLE.COM
    role: roles/iap.httpsResourceAccessor
    condition:
        expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")
        title: CONDITION_TITLE
    ...
  3. Vincule a política ao app usando o comando set-iam-policy. gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

Para editar o arquivo policy.json do seu app, siga o processo abaixo de acordo com o tipo de aplicativo. Consulte Como gerenciar o acesso a recursos protegidos pelo IAP para mais informações sobre como usar a API do IAM para gerenciar políticas de acesso.

Antes de concluir as etapas de API específicas do app abaixo, exporte o seguinte variáveis:

 export PROJECT_NUM=PROJECT_NUMBER
 export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
 # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
 export JSON_NEW_POLICY=POLICY_FILE.JSON
 

App Engine

  1. Exporte as seguintes variáveis do App Engine:

    # The APP_ID is usually the project ID
    export GAE_APP_ID=APP_ID
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}

  2. Receba a política do IAM para o aplicativo do App Engine usando o método getIamPolicy. O bit de dados vazio no final transforma a solicitação curl em POST em vez de GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -d '' ${GAE_BASE_URL}/:getIamPolicy

  3. Adicione sua vinculação condicional do IAM ao arquivo JSON de política do IAM. Confira a seguir um exemplo um arquivo policy.json editado que vincula o iap.httpsResourceAccessor a dois usuários, o que concede a eles acesso ao Chrome Enterprise recursos mais seguros. Uma condição IAM será adicionada para conceder acesso somente se o requisito de nível de acesso ACCESS_LEVEL_NAME for atendido e o caminho do URL do recurso começar com /. Pode haver apenas uma condição por vinculação.

    Exemplo de arquivo policy.json

    {
    "policy": {
      "bindings": [
            {
              "role": "roles/iap.httpsResourceAccessor",
              "members": [
                  "group:EXAMPLE_GROUP@GOOGLE.COM",
                  "user:EXAMPLE_USER@GOOGLE.COM"
              ],
              "condition": {
                "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
                "title": "CONDITION_NAME"
              }
            }
        ]
      }
    }

  4. Defina seu novo arquivo policy.json usando o método setIamPolicy.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    ${GAE_BASE_URL}:setIamPolicy -d @${JSON_NEW_POLICY}

Serviços e versões do App Engine

Também é possível atualizar a política do IAM de um serviço do App Engine, todas as versões ou uma versão específica de um serviço. Para atualizar uma versão específica de um serviço:

  1. Exporte as seguintes variáveis adicionais.
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
  2. Atualize a variável exportada GAE_BASE_URL.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Consiga e defina a política do IAM para a versão usando os comandos getIamPolicy e setIamPolicy mostrados acima.

GKE e Compute Engine

  1. Exporte o ID do projeto do seu serviço de back-end.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Consiga a política do IAM para o aplicativo do Compute Engine usando o método getIamPolicy. O bit de dados vazio no final transforma a solicitação curl em POST em vez de GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
     -d ''

  3. Adicione sua vinculação condicional do IAM ao arquivo JSON de política do IAM. Confira a seguir um exemplo de um arquivo policy.json editado que vincula o papel iap.httpsResourceAccessor a dois usuários, concedendo a eles acesso aos recursos protegidos pelo Chrome Enterprise Premium. Uma condição IAM será adicionada para conceder acesso somente se o requisito de nível de acesso ACCESS_LEVEL_NAME for atendido e o caminho do URL do recurso começar com /. Pode haver apenas uma condição por vinculação.


    Exemplo de arquivo policy.json

    {
      "policy": {
        "bindings": [
          {
            "role": "roles/iap.httpsResourceAccessor",
            "members": [
              "group":EXAMPLE_GROUP@GOOGLE.COM,
              "user:EXAMPLE_USER@GOOGLE.COM"
            ],
            "condition": {
              "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
              "title": "CONDITION_NAME"
            }
          }
        ]
      }
    }

  4. Defina seu novo arquivo policy.json usando o método setIamPolicy.

    curl -i -H "Content-Type:application/json" \
         -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}