Nesta página, mostramos como configurar o Identity-Aware Proxy (IAP) para usar a federação de identidade de colaboradores.
Ao configurar a federação de identidade de colaboradores com o IAP, é possível usar um provedor de identidade externo (IdP) para autenticar e autorizar uma força de trabalho, um grupo de usuários, como funcionários, parceiros e prestadores de serviços, usando o Identity and Access Management (IAM), para que os usuários possam acessar com segurança os serviços implantados no Google Cloud ou no local.
Ao configurar o IAP com a federação de identidade de colaboradores, é possível fazer o seguinte em relação aos aplicativos protegidos pelo IAP:
- Redirecionar um usuário final para um IdP externo, como o Okta, para fazer login.
- Configure uma sessão de login entre 15 minutos e 12 horas.
- Permitir que apenas usuários finais ou conjuntos de usuários finais específicos em um IdP acessem seu aplicativo.
- Especifique o contexto em que um usuário final pode acessar um aplicativo. Por exemplo, permitir o acesso apenas durante um horário específico do dia.
Configurar o IAP com a federação de identidade de colaboradores para um aplicativo
A configuração do IAP com a federação de identidade de colaboradores inclui as seguintes tarefas principais:
- Configure um pool e um provedor de força de trabalho.
- Crie um ID do cliente OAuth e uma chave secreta.
- Ative o IAP e configure-o para usar a federação de identidade de colaboradores.
Configurar um pool e um provedor de força de trabalho
Para configurar um pool e um provedor de força de trabalho, siga as instruções de um dos seguintes provedores:
Ao definir a duração da sessão, consulte Gerenciar o IAP com sessões da federação de identidade de colaboradores.
Se você quiser mapear um endereço de e-mail de um IdP de terceiros para o Google Cloud,
adicione um mapeamento de atributos no provedor do pool de força de trabalho para o google.email.
Exemplo: google.email=assertion.email.
Criar um ID do cliente OAuth e uma chave secreta
Importante: o ID do cliente OAuth e a chave secreta que você cria nas etapas a seguir são criados para a infraestrutura da federação de identidade de colaboradores. Eles são diferentes do ID do cliente e da chave secreta necessários ao usar a configuração personalizada do OAuth para ativar o IAP com Google Identities.Siga as instruções para criar um ID do cliente OAuth e uma chave secreta em um projeto na mesma organização que o pool de colaboradores que você vai usar para essa configuração. O projeto não precisa ser o mesmo em que o recurso protegido pelo IAP está. Ao criar o ID do cliente OAuth e a chave secreta, faça o seguinte:
Use um marcador de posição para o URI de redirecionamento ao criar o ID do cliente. Depois de criar o ID do cliente, execute
describeum cliente OAuth para receber oclientIDgerado.Quando você tiver o
clientID, executeupdateum cliente OAuth para atualizarallowed-redirect-urispara o seguinte:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.Em que
CLIENT_IDé oclientIDrecuperado na etapa anterior.Depois de criar a chave secreta do cliente, execute
describeuma credencial de cliente OAuth para receber oclientSecretgerado.
Salve o
clientIde oclientSecret, porque você vai precisar deles nas próximas etapas.
Ativar o IAP para usar a federação de identidade de colaboradores
Para ativar o IAP com a federação de identidade de colaboradores, siga estas etapas.
Ativar o IAP
Ative o IAP no recurso.
Console
- No console do Google Cloud , abra a página do IAP.
Acesse a página do IAP - Selecione um projeto. O projeto precisa estar na mesma organização que o pool de colaboradores que você criou anteriormente. O projeto não precisa ser o mesmo em que você criou o ID do cliente OAuth e a chave secreta.
- Clique na guia Aplicativos e localize o aplicativo que você quer restringir o acesso usando o IAP.
- Na coluna "IAP", habilite a opção Ativado.
gcloud
Para usar a CLI gcloud para ativar o IAP, siga os procedimentos do serviço aplicável:
API
Crie um arquivo
settings.json.cat << EOF > settings.json { "iap": { "enabled":true, } } EOFAtivar o IAP no App Engine.
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"Para ativar o IAP no Compute Engine, use o seguinte URL:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.
Atualizar as configurações do IAP
Para configurar o IAP para usar a federação de identidade de colaboradores, defina as seguintes configurações:
WorkforceIdentitySettings: o ID do cliente e a chave secreta do cliente OAuth criados anteriormente.IdentitySources: a origem de identidade.
Para mais informações, consulte as APIs do IAP.
gcloud
Usando o exemplo a seguir como referência, crie um arquivo
iap_settings.yaml.CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.yaml access_settings: identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"] workforce_identity_settings: workforce_pools: ["$WORKFORCE_POOL_NAME"] oauth2: client_id: "$CLIENT_ID" client_secret: "$CLIENT_SECRET" EOFExecute o comando a seguir para atualizar as configurações do IAP do recurso.
gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICESubstitua:
- PROJECT: o ID do projeto.
- RESOURCE_TYPE: o tipo de recurso do IAP. O tipo de recurso precisa ser
cloud-run(pré-lançamento),app-engine,iap_web,compute,organizationoufolder. Para o tipo de recursocloud-run, use a sinalização--regionpara indicar a região em que o serviço do Cloud Run está implantado. - SERVICE: o nome do serviço. É opcional para
app-engineecompute.
Para detalhes sobre o comando, consulte gcloud iap settings set.
API
Usando o exemplo a seguir como referência, crie um arquivo de configurações
iap_settings.json.CLIENT_ID=clientId CLIENT_SECRET=clientSecret WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool cat <<EOF > iap_settings.json { "access_settings": { "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"], "workforce_identity_settings": { "workforce_pools": ["$WORKFORCE_POOL_NAME"], "oauth2": { "client_id": "$CLIENT_ID", "client_secret": "$CLIENT_SECRET", } } } } EOFUse a CLI gcloud para receber o nome do recurso e, em seguida, copie o
RESOURCE_NAMEda saída, porque você vai precisar dele na próxima etapa.gcloud iap settings get \ --project=PROJECT \ --resource-type=RESOURCE_TYPE \ --service=SERVICESubstitua:
- PROJECT: o ID do projeto.
- RESOURCE_TYPE: o tipo de recurso do IAP. O
tipo de recurso precisa ser
appengine,iap_web,compute,organization,folderoucloud_run-$REGION(pré-lançamento), em que $REGION é a região em que o serviço do Cloud Run está implantado. - SERVICE: o nome do serviço. É opcional para
app-engineecompute.
Substitua
RESOURCE_NAMEno comando a seguir peloRESOURCE_NAMEda etapa anterior.curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @iap_settings.json \ "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
Conceder acesso a recursos protegidos pelo IAP
Para acessar um recurso protegido pelo IAP, os usuários finais precisam ter o papel de usuário do app da Web protegido pelo IAP no recurso. É possível conceder o papel de usuário do app da Web protegido pelo IAP a um único usuário (principal) ou a um conjunto de usuários (conjunto de principais, que é mapeado para um grupo, um atributo específico ou um pool inteiro de usuários).
Não é possível ter acesso irrestrito a recursos protegidos pelo IAP.
Console
- No console do Google Cloud , abra a página do IAP.
Acesse a página do IAP - Selecione o recurso que você quer proteger com o IAP.
- Clique em Adicionar principal e adicione os identificadores de principal dos grupos ou indivíduos a quem você quer conceder um papel do IAM para o recurso.
- Em Atribuir papéis, selecione Usuário do app da Web protegido pelo IAP.
- Clique em Adicionar.
gcloud
Execute o comando a seguir.
gcloud iap web add-iam-policy-binding \
--member=PRINCIPAL_IDENTIFIER \
--role='roles/iap.httpsResourceAccessor' \
--project=PROJECT_ID \
--resource-type=RESOURCE_TYPE \
--service=SERVICE \
--condition=CONDITION
Substitua:
- PRINCIPAL_IDENTIFIER: o identificador do principal.
- PROJECT_ID: o ID do projeto.
- RESOURCE_TYPE: o tipo de recurso do IAP, que pode ser
app-engineoubackend-services. - SERVICE: (opcional) o nome do serviço.
- CONDITION: (opcional) condições do IAM. Veja a seguir um exemplo de condição configurada com níveis de acesso:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access on weekdays
API
Esse método não é recomendado porque afeta toda a política do IAM de um recurso. Um erro pode remover a política de um recurso.
Obtenha as vinculações de política do IAM.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d {} \ "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.jsonSubstitua RESOURCE_NAME pelo RESOURCE_NAME que você recebeu em uma etapa anterior.
No arquivo
iam_policy_bindings.jsonque você recebeu na etapa anterior, remova as linhas de versão e etag e adicione a vinculação que você quer adicionar ao identificador principal. Para mais informações, consulte Noções básicas sobre políticas de permissão.{ "bindings": [ { // existing bindings }, { "role": "roles/iap.httpsResourceAccessor", "members": [ "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject" ], "condition": { "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels", "title": "iap-test-access-level", "description": "only access on weekdays" } } ] }Atualize as vinculações de política do IAM.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d "{"policy":$(cat iam_policy_bindings.json)}" \ "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"Substitua RESOURCE_NAME pelo RESOURCE_NAME que você recebeu em uma etapa anterior.
Consulte GetIamPolicy e SetIamPolicy para mais informações.
(Opcional) Configurar o acesso baseado no contexto
Se quiser, configure regras de acesso baseado no contexto para autorização avançada.
Para configurar níveis de acesso, consulte Como criar e aplicar níveis de acesso. Os níveis de acesso com base em informações do dispositivo não estão disponíveis ao usar a federação de identidade de colaboradores. Ainda é possível usar níveis de acesso baseados no contexto da solicitação com condições de endereço IP, hora e data.
Autenticação programática
O IAP é compatível com a autenticação JWT de conta de serviço para aplicativos configurados com a federação de identidade de colaboradores. Para instruções, consulte Como autenticar com um JWT de conta de serviço.
Limitações ao trabalhar com pools de colaboradores
* Para cada aplicativo com o IAP ativado, só é possível configurar um pool de colaboradores, que pode conter apenas um provedor. * O pool de colaboradores, o ID e a chave secreta do cliente OAuth e os aplicativos com o IAP ativado precisam estar na mesma organização. * Não há suporte para níveis de acesso a informações relacionadas ao dispositivo. * Somente as seguintes configurações do IAP são compatíveis: * CorsSettings * CsmSettings * AccessDeniedPageSettings.accessDeniedPageUri * CookieDomain * O acesso programático com a federação de identidade de colaboradores só é compatível com contas de serviço do Google.Solução de problemas
Para informações sobre solução de problemas, consulte Solução de problemas e perguntas frequentes.