Este guia descreve como estender as políticas de acesso do Proxy com reconhecimento de identidade (IAP) através dos níveis de acesso e da estrutura de condições da gestão de identidade e de acesso (IAM). Os níveis de acesso permitem restrições de acesso a recursos com base no endereço IP e nos atributos do dispositivo do utilizador final. As condições da IAM permitem restrições de acesso com base em anfitriões, caminhos, data e hora do URL.
Por exemplo, consoante a configuração da política, a sua app sensível pode:
- Conceda acesso a todos os funcionários se estiverem a usar um dispositivo corporativo fidedigno da sua rede corporativa.
- Conceda acesso aos funcionários no grupo Acesso remoto se estiverem a usar um dispositivo empresarial fidedigno com uma palavra-passe segura e um nível de patch atualizado, a partir de qualquer rede.
- Conceda acesso apenas a funcionários no grupo Acesso privilegiado se o caminho do URL começar por
/admin.
Antes de começar
Antes de começar, precisa do seguinte:
- Uma app protegida por IAP à qual quer adicionar acesso individual ou em grupo.
- Nomes de utilizadores ou grupos aos quais quer conceder acesso.
Configure um nível de acesso
Para limitar o acesso com base no endereço IP ou nos atributos do dispositivo do utilizador final, crie um nível de acesso. Alguns atributos, como os atributos de dispositivos, requerem uma licença do Chrome Enterprise Premium. A validação de licenças só ocorre quando configura os níveis de acesso e não afeta o acesso em tempo de execução. Para saber como criar um nível de acesso, consulte o guia do Access Context Manager. O IAP usa o nome do nível de acesso para o associar a uma app protegida pelo IAP.
A utilização de políticas com âmbito não é suportada pela IAP. Os níveis de acesso têm de ser definidos na política de acesso organizacional. Para mais informações, consulte Crie uma política de acesso.
Edite a política IAM
Uma app protegida pelo IAP tem uma política do IAM que associa a função do IAP à app.
Ao adicionar uma vinculação condicional de IAM à política de 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/caminho do URL
- Data/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. Para mais informações
acerca das condições de nome de anfitrião e caminho, consulte o artigo Use condições de nome de anfitrião e caminho.
Adicione e edite associações condicionais na sua política de IAM seguindo o processo abaixo.
Consola
Para adicionar uma associação condicional através da Google Cloud consola:
Aceda à página de administração de IAP.
Selecione a caixa de verificação junto aos recursos para os quais quer atualizar as autorizações da IAM.
No painel de informações do lado direito, clique em Adicionar principal.
Na caixa Novo principal, introduza os principais aos quais quer atribuir uma função.
Na lista pendente Selecionar uma função, selecione a função Utilizador da app Web protegida por IAP e especifique as condições do nível de acesso que os principais têm de cumprir para aceder ao recurso.
- 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 por IAP e ter autorizações ao nível da organização para ver os níveis de acesso existentes. Tem de lhe ser concedida
uma das seguintes funções:
- Administrador do Gestor de acesso sensível ao contexto
- Editor do Gestor de acesso sensível ao contexto
- Leitor do Gestor de acesso sensível ao contexto
- Para criar e gerir níveis de acesso, use o Gestor de contexto de acesso.
- 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 por IAP e ter autorizações ao nível da organização para ver os níveis de acesso existentes. Tem de lhe ser concedida
uma das seguintes funções:
Se quiser adicionar mais funções aos principais, clique em Adicionar outra função.
Quando terminar de adicionar funções, clique em Guardar.
Acaba de adicionar uma associação condicional ao seu recurso.
Para remover uma associação condicional:
Aceda à página de administração de IAP.
Selecione a caixa de verificação junto ao recurso do qual quer remover a função de IAM de um principal.
No painel de informações do lado direito, em Função / diretor, clique na função que quer remover do diretor.
Clique em Remover junto ao principal.

Na caixa de diálogo Remover função do principal apresentada, clique em Remover. Para remover todas as funções não herdadas do principal no recurso selecionado, selecione a caixa de verificação antes de clicar em Remover.
gcloud
Neste momento, só pode usar a ferramenta gcloud para definir associações condicionais ao nível do projeto.
Para definir associações condicionais, edite o ficheiro policy.yaml do seu projeto seguindo o processo abaixo:
Abra a política de IAM para a app através do seguinte comando gcloud:
gcloud iap web get-iam-policy --project=PROJECT_ID > policy.yaml
Edite o ficheiro
policy.yamlpara especificar o seguinte:- Os utilizadores e os grupos aos quais quer aplicar a condição de IAM.
- A função
iap.httpsResourceAccessorpara lhes conceder acesso aos recursos. A condição do IAM.
O fragmento seguinte mostra uma condição do IAM com apenas um atributo especificado. Esta condição concede acesso ao utilizador e ao grupo se os requisitos do nível de acesso ACCESS_LEVEL_NAME forem cumpridos e o caminho do URL do recurso começar por
/.
bindings: ... - 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 ...Associe a política à aplicação através do comando
set-iam-policy.gcloud iap web set-iam-policy --project=PROJECT_ID policy.yaml
A sua política de IAM inclui agora uma associação condicional.
API
Para editar o ficheiro policy.json da sua app, siga o processo abaixo para o 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 executar os passos da API específicos da aplicação abaixo, exporte as seguintes variáveis:
export PROJECT_NUM=PROJECT_NUMBER
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/${PROJECT_NUM}/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
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}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 pedidocurlem POST em vez de GET.curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${GAE_BASE_URL}/:getIamPolicy -d ''
Adicione a associação condicional da IAM ao ficheiro JSON da política IAM. Segue-se um exemplo de um ficheiro
policy.jsoneditado que associa a funçãoiap.httpsResourceAccessora dois utilizadores, concedendo-lhes acesso aos recursos protegidos pelo IAP. Foi adicionada uma condição do 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" } } ] } }
Defina o novo ficheiro
policy.jsonatravés do métodosetIamPolicy.curl -i -H "Authentication: 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, de todas as versões ou de uma versão específica de um serviço. Para o fazer para uma versão específica de um serviço:
- Exporte as seguintes variáveis adicionais.
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- 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}
- Obtenha e defina a política de IAM para a versão através dos comandos
getIamPolicyesetIamPolicyapresentados acima.
GKE e Compute Engine
Exporte o ID do projeto do seu serviço de back-end.
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
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 pedidocurlem POST em vez de GET.curl -i -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \ -d ''Adicione a associação condicional da IAM ao ficheiro JSON da política IAM. Segue-se um exemplo de um ficheiro
policy.jsoneditado que associa a funçãoiap.httpsResourceAccessora dois utilizadores, concedendo-lhes acesso aos recursos protegidos pelo IAP. Foi adicionada uma condição do 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.
Ficheiro policy.json de exemplo{ "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" } } ] } }
Defina o novo ficheiro
policy.jsonatravés do métodosetIamPolicy.curl -i -H "Content-Type:application/json" \ -H "Authentication: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \ -d @${JSON_NEW_POLICY}
Use condições de nome do anfitrião e caminho
O acesso à sua app pode ser protegido através do nome de anfitrião e do caminho de um URL de pedido.
Por exemplo, a condição request.path.startsWith do IAM pode ser usada para conceder acesso apenas a funcionários no grupo Acesso privilegiado se o caminho do URL começar por /admin.
Para mais informações sobre a utilização de condições de nome de anfitrião e caminho, consulte os atributos de pedido.
Normalização de strings
Um URL tem um nome de anfitrião e um caminho. Por exemplo, o URL https://sheets.google.com/create?query=param
tem um nome do anfitrião de sheets.google.com e um caminho de /create.
Os back-ends podem interpretar os nomes de anfitriões e os caminhos de formas diferentes. Para remover a ambiguidade, o IAP normaliza as strings de nome de anfitrião e caminho quando verifica as políticas.
O IAP realiza duas verificações de políticas quando um pedido tem um caminho não normalizado. Se o caminho não normalizado passar na verificação de políticas, o IAP normaliza o caminho e é feita uma segunda verificação de políticas. O acesso é concedido se os caminhos não normalizados e normalizados passarem na verificação de políticas.
Por exemplo, se um pedido tiver o caminho /internal;some_param/admin, o IAP executa primeiro uma verificação de políticas no caminho não normalizado (/internal). Se essa verificação for aprovada, o IAP executa uma segunda verificação de políticas no caminho normalizado (/internal/admin).
Nomes de anfitriões
Os nomes de anfitrião são normalizados da seguinte forma:
- Remover pontos finais
- Usar carateres em minúsculas
- A converter para ASCII
Os nomes de anfitrião que incluem carateres não ASCII são ainda mais normalizados com a codificação Punycode. Tem de usar o punycode na string do nome do anfitrião para que seja feita uma correspondência.
Para converter a sua string de nome de anfitrião em Punycode, use um conversor como o Punycode.
Seguem-se exemplos de nomes de anfitrião normalizados:
FOO.comé normalizado parafoo.comcafé.fré normalizado paraxn--caf-dma.fr
Caminhos
Os caminhos são normalizados através do seguinte:
- Remover parâmetros do caminho
- Resolver caminhos relativos para o respetivo equivalente absoluto
Um parâmetro de caminho inclui todos os carateres de um ; até ao / seguinte ou ao final do caminho.
Os pedidos que contêm ..; no início de uma secção do caminho são considerados inválidos.
Por exemplo, /..;bar/ e /bar/..;/ devolvem o erro HTTP 400: Bad Request.
Seguem-se exemplos de caminhos normalizados:
/internal;some_param/adminé normalizado para/internal/admin/a/../bé normalizado para/b/bar;param1/baz;baz;param2é normalizado para/bar/baz
Extensões de subdomínios
Uma política definida com request.host.endsWith("google.com") vai corresponder a sub_domain.google.com e testgoogle.com. Se o seu objetivo for limitar a política a todos os subdomínios que terminam com google.com, defina a política como request.host.endsWith(".google.com").
Tenha em atenção que a definição da política como request.host.endsWith(".google.com") vai corresponder a sub_domain.google.com, mas não a google.com devido ao . adicional.
Cloud Audit Logs e níveis de acesso
A ativação dos registos de auditoria do Cloud para o seu projeto protegido pelo IAP permite-lhe ver pedidos de acesso autorizados e não autorizados. Veja os pedidos e todos os níveis de acesso que um requerente cumpriu seguindo o processo abaixo:
-
Aceda à Google Cloud consola
Explorador de registos do seu projeto.
Aceda à página de registos - Na lista pendente do seletor de recursos, selecione um recurso. Os recursos HTTPS protegidos pelo IAP estão em Aplicação do App Engine e Serviço de back-end do Compute Engine. Os recursos SSH e TCP protegidos pelo IAP estão em Instância de VM do Compute Engine .
-
Na lista pendente Tipo de registos, selecione
data_access.
- O tipo de registo data_access só aparece se tiver havido tráfego para o seu recurso depois de ativar os registos de auditoria do Google Cloud para o IAP.
-
Clique para expandir a data e a hora do acesso que quer rever.
- O acesso autorizado tem um ícone
iazul. - O acesso não autorizado tem um ícone
!!laranja.
- O acesso autorizado tem um ícone
-
Veja os níveis de acesso que o requerente cumpriu clicando para expandir as secções
até aceder a
protoPayload>requestMetadata>requestAttributes>auth>accessLevels.
Tenha em atenção que todos os níveis de acesso que um utilizador cumpriu são visíveis quando vê um pedido, incluindo os níveis de acesso que não eram necessários para aceder ao mesmo. A visualização de um pedido não autorizado não indica que níveis de acesso não foram cumpridos. Isto é determinado comparando as condições no recurso com os níveis de acesso visíveis no pedido.
Consulte o guia dos registos de auditoria do Cloud para mais informações sobre os registos.