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
Aceda à página Gestor de contexto de acesso na Google Cloud consola.
Se lhe for pedido, selecione a sua organização.
Na parte superior da página Access Context Manager, clique em Novo.
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.
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.
Clique novamente em Adicionar atributo e selecione Sub-redes de IP.
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.Clique em Guardar.
gcloud
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.Guarde o ficheiro. Neste exemplo, o nome do ficheiro é CONDITIONS.yaml.
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
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.
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
Aceda à página de compras na app.
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.
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.
Se quiser adicionar mais funções aos principais, clique em Adicionar outra função.
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:
Abra a política de IAM para a app através do seguinte comando gcloud:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
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 ...
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
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 pedidocurl
em POST em vez de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
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çãoiap.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" } } ] } }
Defina o novo ficheiro
policy.json
através do métodosetIamPolicy
.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:
- 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 IAM para a versão através dos comandos
getIamPolicy
esetIamPolicy
.
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 pedidocurl
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 ''
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çãoiap.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" } } ] } }
Defina o novo ficheiro
policy.json
através do métodosetIamPolicy
.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}