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

Esta página explica como criar níveis de acesso através do Access Context Manager e aplicá-los em recursos protegidos pelo Identity-Aware Proxy (IAP).

Vista geral

Um nível de acesso é um conjunto de atributos atribuídos a pedidos com base na respetiva origem. Usando informações como o tipo de dispositivo, o endereço IP e a identidade do utilizador, pode designar o nível de acesso a conceder. Por exemplo, pode atribuir um nível de "High_Trust" às ligações a partir da sua rede empresarial e um nível de "Medium_Trust" aos dispositivos externos que executam sistemas operativos aprovados.

As informações do dispositivo são recolhidas e referenciadas pelos níveis de acesso assim que configurar a validação de pontos finais. A validação de pontos finais cria um inventário de todos os dispositivos corporativos e pessoais que acedem aos seus recursos corporativos.

Um nível de acesso é aplicado adicionando-o como uma condição da gestão de identidade e de acesso (IAM) no seu recurso protegido pelo IAP. O IAP permite-lhe aplicar um modelo de controlo de acesso detalhado ao nível do recurso, em vez de usar firewalls ao nível da rede. Por exemplo, pode especificar que, embora muitos recursos estejam disponíveis para "Medium_Trust", determinados recursos mais confidenciais requerem o nível "High_Trust".

Para mais informações, consulte a vista geral do Access Context Manager.

Antes de começar

Antes de começar, tem de fazer o seguinte:

  • Proteja um recurso com o IAP.
  • Configure a validação de pontos finais. Tenha em atenção que isto só é necessário se quiser limitar o acesso aos seus recursos com base nas informações do dispositivo do utilizador, como o estado de encriptação do armazenamento.
  • Certifique-se de que tem uma das seguintes funções concedidas no seu projeto.

    • Administrador do Gestor de acesso sensível ao contexto
    • Editor do Gestor de acesso sensível ao contexto

Criar um nível de acesso

O processo seguinte cria um nível de acesso.

Para este exemplo, vamos supor que quer criar um nível de acesso que permita a um grupo de auditores internos aceder ao Google Cloud Observability para um projeto. Todos os dispositivos dos auditores têm IPs atribuídos numa sub-rede que varia entre 203.0.113.0 e 203.0.113.127. Também quer garantir que os respetivos dispositivos estão encriptados. Sabe que não vão existir dispositivos atribuídos a essa sub-rede, exceto os usados pelos auditores.

Consola

  1. Aceda à página Gestor de contexto de acesso na Google Cloud consola.

    Aceda à página Gestor de acesso sensível ao contexto

  2. Se lhe for pedido, selecione a sua organização.

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

  4. No painel Novo nível de acesso, na secção Condições, clique em Adicionar atributo e, de seguida, clique em Política de dispositivos.

  5. Clique no menu pendente Encriptação de armazenamento e selecione Encriptado. Tenha em atenção que esta regra só funciona depois de configurar a validação de pontos finais nos dispositivos dos seus funcionários.

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

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

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

  8. Clique em Guardar.

gcloud

  1. Crie um ficheiro 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, introduza o seguinte no ficheiro YAML:

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

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

    Tenha em atenção que a regra devicePolicy só funciona depois de configurar a validação de pontos finais nos dispositivos dos seus funcionários.

  2. Guarde o ficheiro. Neste exemplo, o nome do ficheiro é 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. Tem de começar por uma letra e incluir apenas letras, números e sublinhados.

    • TITLE é um título legível. Tem de ser exclusivo da política.

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

    Deverá ver uma saída semelhante à seguinte:

    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 do pedido 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 exija armazenamento encriptado.

    Neste exemplo, para limitar o acesso apenas aos auditores, introduziria o seguinte no corpo do pedido:

    {
     "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. Tem de começar por uma letra e incluir apenas letras, números e sublinhados.

    • TITLE é um título legível. Tem de ser exclusivo da 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 sua organização.

Aplicar um nível de acesso

Um recurso protegido pelo IAP tem uma política IAM que associa a função do IAP ao recurso.

Ao adicionar uma associação condicional do IAM à política do IAM, o acesso aos seus recursos é ainda mais restrito com base nos atributos do pedido. Estes atributos de pedido incluem:

  • Níveis de acesso
  • Anfitrião e caminho do URL
  • Data e hora

Tenha em atenção que os valores de pedido comparados com request.host e request.path especificados numa associação condicional da IAM têm de ser exatos. Por exemplo, se restringir o acesso a caminhos que começam com /internal admin, pode contornar a restrição acedendo a /internal%20admin. Consulte o artigo Usar condições de nome do anfitrião e caminho para mais informações.

Quando aplica níveis de acesso a um recurso do IAP, certifique-se de que os níveis de acesso estão ao nível da organização e não ao nível do projeto ou da pasta. Os passos seguintes mostram como adicionar o seu nível de acesso a um recurso protegido por IAP atualizando a respetiva política de IAM.

Consola

  1. Aceda à página de compras na app.

    Aceda à página de CIs

  2. Selecione a caixa de verificação junto aos recursos para os quais quer atualizar as autorizações da IAM.

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

  4. Na caixa Novo principal, introduza os principais aos quais quer atribuir uma função.

  5. Na lista pendente Selecionar uma função, selecione a função Utilizador da app Web protegida por IAP.

  6. Para especificar os níveis de acesso existentes, selecione-os na lista pendente Níveis de acesso. Tem de selecionar a função Utilizador da app Web protegida pelo IAP e ter autorizações ao nível da organização para ver os níveis de acesso existentes.

    Quando aplica vários níveis de acesso a um recurso, os utilizadores recebem acesso ao recurso quando cumprem as condições especificadas em, pelo menos, um dos níveis de acesso que selecionar (é um OU lógico dos níveis de acesso na lista). Se quiser que os utilizadores cumpram as condições em mais do que um nível de acesso (um E lógico de níveis de acesso), crie um nível de acesso que contenha vários níveis de acesso.

  7. Se quiser adicionar mais funções aos principais, clique em Adicionar outra função.

  8. Quando terminar de adicionar funções, clique em Guardar.

gcloud

Atualmente, só pode usar a CLI gcloud para definir associações condicionais ao nível do projeto.

Para definir associações condicionais, edite o ficheiro policy.yaml do seu projeto:

  1. Abra a política de IAM para a app através do seguinte comando gcloud:

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

    • Os utilizadores e os grupos aos quais quer aplicar a condição do IAM.
    • A função iap.httpsResourceAccessor para lhes conceder acesso aos recursos.
    • A condição do IAM com o seu nível de acesso.

    A condição seguinte concede acesso ao utilizador e ao grupo se os requisitos de nível de acesso ACCESS_LEVEL_NAME forem cumpridos e o caminho do URL do recurso começar por /.

    ...
    - 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. Associe a política à app através do comando set-iam-policy. none gcloud projects set-iam-policy PROJECT_ID policy.yaml

API

Para editar o ficheiro policy.json da sua app, siga o processo para o seu tipo de app. Consulte o artigo Gerir o acesso a recursos protegidos pelo IAP para mais informações sobre a utilização da API IAM para gerir políticas de acesso.

Antes de concluir os passos da API específicos da app, exporte as seguintes 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. Obtenha a Política IAM para a app do App Engine através do método getIamPolicy. O bit de dados vazio no final transforma o pedido curl em POST em vez de GET.

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

  3. Adicione a sua associação condicional da IAM ao ficheiro JSON da política IAM. Segue-se um exemplo de um ficheiro policy.json editado que associa a função iap.httpsResourceAccessor a dois utilizadores, concedendo-lhes acesso aos recursos protegidos do Chrome Enterprise Premium. Foi adicionada uma condição da IAM para lhes conceder acesso aos recursos apenas se o requisito do nível de acesso ACCESS_LEVEL_NAME for cumprido e o caminho do URL do recurso começar com /. Só pode existir uma condição por associação.

    Exemplo de ficheiro 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 o novo ficheiro policy.json através do 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 pode atualizar a política de IAM de um serviço do App Engine, todas as versões ou uma versão específica de um serviço. Para o fazer para 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 GAE_BASE_URL exportada.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Obtenha e defina a política IAM para a versão através dos comandos getIamPolicy e setIamPolicy.

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. Obtenha a política IAM para a app Compute Engine através do método getIamPolicy. O bit de dados vazio no final transforma o pedido 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 a sua associação condicional da IAM ao ficheiro JSON da política IAM. Segue-se um exemplo de um ficheiro policy.json editado que associa a função iap.httpsResourceAccessor a dois utilizadores, concedendo-lhes acesso aos recursos protegidos do Chrome Enterprise Premium. Foi adicionada uma condição de IAM para lhes conceder acesso aos recursos apenas se o requisito do nível de acesso ACCESS_LEVEL_NAME for cumprido e o caminho do URL do recurso começar por /. Só pode existir uma condição por associação.


    Exemplo de ficheiro 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 o novo ficheiro policy.json através do 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}