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
Acesse a página do Access Context Manager no console do Google Cloud.
Se solicitado, selecione a organização.
Na parte superior da página do Access Context Manager, clique em Novo.
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.
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.
Clique em Adicionar atributo novamente e selecione Sub-redes de IP.
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.Clique em Save.
gcloud
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.Salve o arquivo. Neste exemplo, o arquivo é denominado 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. 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
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.
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
Acesse a página de administrador do IAP.
Marque a caixa de seleção ao lado dos recursos que tem as permissões do IAM que você quer atualizar.
No painel de informações direito, clique em Adicionar principal.
Na caixa Novo principal, insira os principais aos quais você quer atribuir um papel.
Na lista suspensa Selecionar um papel, selecione o papel Usuário do app da Web protegido pelo IAP.
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.
Se você quiser adicionar mais papéis aos principais, clique em Adicionar outro papel.
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:
Abra a política do IAM do app usando o seguinte comando gcloud:
gcloud projects get-iam-policy PROJECT_ID > policy.yaml
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 ...
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
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}
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çãocurl
em POST em vez de GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d '' ${GAE_BASE_URL}/:getIamPolicy
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 oiap.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" } } ] } }
Defina seu novo arquivo
policy.json
usando o 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 é 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:
- Exporte as seguintes variáveis adicionais.
export GAE_SERVICE=SERVICE_NAME export GAE_VERSION=VERSION_NAME
- 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}
- Consiga e defina a política do IAM para a versão usando
os comandos
getIamPolicy
esetIamPolicy
mostrados acima.
GKE e Compute Engine
Exporte o ID do projeto do seu serviço de back-end.
export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME
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çãocurl
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 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 papeliap.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" } } ] } }
Defina seu novo arquivo
policy.json
usando o 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}