Como configurar o Acesso baseado no contexto com o Cloud Identity-Aware Proxy

Neste guia, descrevemos como estender as políticas de acesso do Cloud Identity-Aware Proxy (Cloud IAP) usando níveis de acesso e a biblioteca de condições do Cloud Identity and Access Management (Cloud IAM). Os níveis de acesso permitem restrições de acesso a recursos com base no endereço IP e nos atributos de dispositivo do usuário final. As condições do Cloud IAM permitem restrições de acesso com base em hosts de URL, caminhos, data e hora.

Se você está inscrito na versão Beta particular do framework do Cloud IAM Conditions, também pode usar níveis de acesso para projetos protegidos pelo Cloud IAP.

Por exemplo, dependendo da configuração de política, seu app confidencial poderá:

  • conceder acesso a todos os funcionários se eles estiverem usando um dispositivo corporativo confiável na rede local;
  • conceder acesso aos funcionários no grupo Acesso remoto se eles estiverem usando um dispositivo corporativo confiável com uma senha segura e um nível de patch atualizado a partir de qualquer rede;
  • conceder acesso apenas aos funcionários no grupo Acesso privilegiado se o caminho do URL começar com /admin.

Antes de começar

Antes de começar, você precisará de:

  • um aplicativo protegido pelo Cloud IAP ao qual você quer adicionar acesso individual ou em grupo;
  • nomes de usuários ou de grupos a que você quer conceder acesso;
  • acesso à lista de permissões da versão Beta particular do framework do Cloud IAM Conditions caso queira definir condições no nível do projeto.

Como configurar um nível de acesso

Para limitar o acesso baseado no endereço IP ou nos atributos de dispositivo de usuário final, crie um nível de acesso. Se você quiser saber como criar um nível de acesso, consulte o guia do Access Context Manager. O Cloud IAP usa o nome do nível de acesso para associá-lo a um app protegido pelo Cloud IAP.

Como criar uma conta de serviço

Para usar os níveis de acesso e atualizar sua política do Cloud IAM usando a API, você precisa de uma conta de serviço autenticada para o projeto.

  1. No projeto em que seu app é implantado, crie uma nova conta de serviço.
  2. Autentique a nova conta usando gcloud auth activate-service-account.

Como fazer o download do arquivo de credenciais

Você precisa fazer o download do arquivo JSON de credenciais da nova conta de serviço para atualizar sua política do Cloud IAM usando a API. Para fazer o download do arquivo JSON de credenciais, siga estas etapas:

  1. Acesse a página Contas de serviço.
    Acessar a página "Contas de serviço"

  2. Clique no endereço de e-mail da sua conta de serviço.

  3. Clique em Editar.

  4. Clique em Criar chave.

  5. Selecione JSON como o tipo de chave.

  6. Crie sua nova chave clicando em Criar e fechando a janela de confirmação que aparece.

Foi feito o download do seu arquivo JSON de credenciais.

Como editar a política do Cloud IAM

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

Ao adicionar uma vinculação condicional do Cloud IAM à política do Cloud IAM, o acesso aos seus recursos fica ainda mais restrito com base nos atributos de 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 ligação condicional do Cloud IAM, precisam ser exatos. Por exemplo, se você restringir o acesso a caminhos que começam com /internal admin, poderá ignorar a restrição acessando /internal%20admin. Para mais informações sobre o nome do host e as condições do caminho, consulte Como usar o nome do host e as condições do caminho.

Adicione e edite as vinculações condicionais na sua política do Cloud IAM seguindo o processo abaixo.

Console

Para adicionar uma ligação condicional usando o console do GCP, siga estas etapas:

  1. Acesse a página de administração do Cloud IAP.

    Acesse a página de administração do Cloud IAP

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

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

  4. Na caixa Novo membro, insira os membros a quem você quer atribuir um papel.

  5. Na lista suspensa Selecionar um papel, selecione o papel Usuário do app da Web protegido pelo IAP e especifique as condições de nível de acesso necessárias para acessar o recurso.

    • 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. Você precisa ter recebido um dos seguintes papéis:
      • Administrador do Access Context Manager
      • Editor do Access Context Manager
      • Leitor Access Context Manager
    • Para criar e gerenciar níveis de acesso, use o Access Context Manager.
  6. Se você quiser adicionar mais papéis aos membros, clique em Adicionar outro papel.

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

    Você adicionou uma ligação condicional ao seu recurso.

Para remover uma ligação condicional, siga estas etapas:

  1. Acesse a página de administração do Cloud IAP.

    Acesse a página de administração do Cloud IAP

  2. Marque a caixa de seleção ao lado do recurso com o papel do membro do Cloud IAM que você quer remover.

  3. No lado direito do painel de informações, em Papel/membro, clique no papel que você quer remover do membro.

  4. Clique em Remover ao lado do membro.

  5. Na caixa de diálogo Remover papel do membro, clique em Remover. Para remover todos os papéis não herdados do membro no recurso selecionado, marque a caixa de seleção antes de clicar em Remover.

gcloud

Para definir ligações condicionais usando a ferramenta gcloud, é preciso inscrever-se para a biblioteca de condições do Cloud IAM Beta particular. No momento, você só pode usar a ferramenta gcloud para definir ligações condicionais no nível do projeto.

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

  1. Abra a política do Cloud 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 a que você quer aplicar a condição do Cloud IAM;
    • o papel iap.httpsResourceAccessor para conceder a eles acesso aos recursos;
    • a condição do Cloud IAM.

      O snippet a seguir mostra uma condição do Cloud IAM com apenas um atributo especificado. Essa condição 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. Ligue a política ao aplicativo usando o comando set-iam-policy.

    gcloud projects set-iam-policy PROJECT_ID policy.yaml

Sua política do Cloud IAM agora inclui uma ligação condicional.

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 Cloud IAP para mais informações sobre o uso da API Cloud IAM para gerenciar políticas de acesso.

Antes de executar as seguintes etapas da API específicas do aplicativo:

  1. Faça o download do arquivo de credenciais da sua conta de serviço.
  2. 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 with the path to your local service account's downloaded JSON file
    export JSON_CREDS=EXAMPLE.IAM.GSERVICEACCOUNT.COM.JSON
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    

  3. Converta o arquivo JSON de credenciais da sua conta de serviço em um token de acesso OAuth usando o Oauth2l. Para isso, execute o seguinte comando:

    oauth2l header --json ${JSON_CREDS} cloud-platform

  4. Se esta for a primeira vez que você executa o comando acima, quando solicitado, siga estas etapas:

    1. Consiga o código de verificação clicando no link exibido e copiando o código.
    2. Cole o código de verificação no prompt do aplicativo.
    3. Copie o token do portador retornado.
    4. Exporte uma nova variável atribuída ao token do portador retornado.
      export CLOUD_OAUTH_TOKEN=AUTHORIZATION_BEARER_TOKEN
  5. Se já tiver executado esse comando antes, exporte a seguinte variável:

    export CLOUD_OAUTH_TOKEN ="$(oauth2l header --json ${JSON_CREDS} cloud-platform)"

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. Solicite a política do Cloud 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 "${CLOUD_OAUTH_TOKEN}" ${GAE_BASE_URL}/:getIamPolicy \
         -d ''
    

  3. Adicione sua vinculação condicional do Cloud IAM ao arquivo JSON de política do Cloud IAM. A seguir, há 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 Cloud IAP. Uma condição do Cloud IAM será adicionada para conceder acesso somente se o requisito de nível 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 "${CLOUD_OAUTH_TOKEN}" ${GAE_BASE_URL}:setIamPolicy \
         -d @${JSON_NEW_POLICY}

Serviços e versões do App Engine

Você também pode atualizar a política do Cloud 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 Cloud IAM referente à versão usando os comandos getIamPolicy e setIamPolicy mostrados acima.

GKE e Compute Engine

  1. Exporte o código do projeto do seu serviço de back-end.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Solicite a política do Cloud 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 "${CLOUD_OAUTH_TOKEN}" ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
         -d ''

  3. Adicione sua vinculação condicional do Cloud IAM ao arquivo JSON de política do Cloud IAM. A seguir, há 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 Cloud IAP. Uma condição do Cloud IAM será adicionada para conceder acesso somente se o requisito de nível 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 "$(oauth2l header --json ${JSON_CREDS} cloud-platform)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}

Como usar as condições de nome e caminho do host

O acesso ao seu app pode ser protegido usando o nome e o caminho de host de um URL de solicitação. Por exemplo, é possível usar a condição request.path.startsWith do Cloud IAM para conceder acesso somente aos funcionários no grupo Acesso privilegiado se o caminho começar com /admin.

Para mais informações sobre as condições de nome e caminho do host, veja Atributos de solicitação.

Normalização de strings

Um URL tem um nome e caminho de host. Por exemplo, https://sheets.google.com/create?query=param tem um nome de host sheets.google.com e um caminho /create.

Os back-ends podem interpretar os nomes e caminhos de host de maneiras diferentes. Para remover a ambiguidade, o Cloud IAP normaliza essas informações ao verificar as políticas.

O Cloud IAP executa duas verificações de política quando uma solicitação tem um caminho não normalizado. Se esse caminho passar na verificação, ele será normalizado e uma segunda verificação de política será executada pelo Cloud IAP. Será concedido acesso se os caminhos não normalizados e normalizados passarem na investigação.

Por exemplo, se uma solicitação tiver o caminho /internal;some_param/admin, o Cloud IAP primeiro executará uma verificação de política no caminho não normalizado (/internal). Se ele for aprovado, o Cloud IAP executará uma segunda verificação no normalizado (/internal/admin).

Nomes de host

Os nomes de host podem ser normalizados das seguintes formas:

  • Removendo pontos à direita
  • Colocando os caracteres em minúsculo
  • Convertendo para ASCII

Os nomes de host que incluem caracteres não ASCII são normalizados com punycoding. Assim, você precisará codificar a string de nome de host com punycode para uma correspondência seja feita.

Para isso, use um conversor como o Punycoder (em inglês).

Veja a seguir exemplos de nomes de host normalizados:

  • FOO.com é a versão normalizada para foo.com
  • café.fr é a versão normalizada para xn--caf-dma.fr

Caminhos

Os caminhos podem ser normalizados da seguinte forma:

  • Removendo parâmetros de caminho
  • Resolvendo caminhos relativos ao equivalente absoluto deles

Um parâmetro de caminho inclui todos os caracteres de ; até o próximo / ou o fim desse caminho.

Solicitações que contenham ..; no início de uma seção de caminho serão consideradas inválidas. Por exemplo, /..;bar/ e /bar/..;/ retornam o erro HTTP 400: Bad Request.

Veja a seguir exemplos de caminhos normalizados:

  • /internal;some_param/admin é a versão normalizada para /internal/admin
  • /a/../b é a versão normalizada para /b
  • /bar;param1/baz;baz;param2 é a versão normalizada para /bar/baz

Terminações de subdomínios

Uma política definida com request.host.endsWith("google.com") corresponderá a sub_domain.google.com e testgoogle.com. Se seu objetivo é limitar a política a todos os subdomínios com final google.com, defina-a como request.host.endsWith(".google.com").

Se você configurar sua política como request.host.endsWith(".google.com"), sub_domain.google.com será correspondido, mas não google.com, devido ao . adicional.

Registros de auditoria do Cloud e níveis de acesso

Ativar os registros de auditoria do Cloud para seu projeto protegido pelo Cloud IAP permite que você veja as solicitações de acesso autorizadas e não autorizadas. Veja as solicitações e todos os níveis de acesso que um solicitante atendeu seguindo o processo abaixo:

  1. Acesse a página Registros do console do GCP do seu projeto.
    Acessar a página "Registros"
  2. Na lista suspensa Seletor de recursos, selecione um recurso. Os recursos protegidos pelo Cloud IAP incluem Aplicativo do GAE e Serviço de back-end do GCE.
  3. Na lista suspensa Tipo de registros, selecione data_access.
    1. O tipo de registro data_access será exibido somente se houver tráfego no seu recurso depois que você ativar os registros de auditoria do Cloud para o Cloud IAP.
  4. Clique para expandir a data e a hora do acesso que você quer avaliar.
    1. O acesso autorizado tem um ícone azul i.
    2. O acesso não autorizado tem um ícone laranja !! .
  5. Visualize os níveis de acesso a que o solicitante atendeu clicando para expandir as seções até chegar em protoPayload > requestMetadata > requestAttributes > auth > accessLevels.

Observe que todos os níveis de acesso a que um usuário atendeu são visíveis ao visualizar uma solicitação, incluindo níveis de acesso que não eram necessários para acessá-la. Visualizar uma solicitação não autorizada não indica quais níveis de acesso não foram atendidos. Isso é determinado comparando as condições no recurso com os níveis de acesso visíveis na solicitação.

Consulte o guia Registros de auditoria do Cloud para mais informações sobre registros.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Identity-Aware Proxy