Esta página mostra como configurar o Identity-Aware Proxy (IAP) para usar a Federação de identidades da força de trabalho.
Quando configura a federação de identidades da força de trabalho com o IAP, pode usar um fornecedor de identidade (IdP) externo para autenticar e autorizar uma força de trabalho, um grupo de utilizadores, como funcionários, parceiros e contratados, através da gestão de identidades e acessos (IAM), para que os utilizadores possam aceder em segurança aos serviços implementados noGoogle Cloud ou no local.
A configuração do IAP com a federação de identidade da força de trabalho permite-lhe fazer o seguinte relativamente às suas aplicações protegidas pelo IAP:
- Redirecionar um utilizador final para um IdP externo, como o Okta, para iniciar sessão.
- Configure uma sessão de início de sessão entre 15 minutos e 12 horas.
- Permitir que apenas utilizadores finais ou conjuntos de utilizadores finais específicos num IdP acedam à sua aplicação.
- Especifique o contexto em que um utilizador final pode aceder a uma aplicação. Por exemplo, só permitir o acesso durante uma hora específica do dia.
Pode usar o IAP com a federação de identidade da força de trabalho em todos os recursos e equilibradores de carga existentes que o IAP suporta.
Configure o IAP com a federação de identidade da força de trabalho para uma aplicação
A configuração da IAP com a federação de identidade da força de trabalho compreende as seguintes tarefas principais:
- Configure um Workforce Pool e um fornecedor.
- Crie um segredo e um ID de cliente OAuth.
- Ative o IAP e configure-o para usar a federação de identidade da força de trabalho.
Configure um Workforce Pool e um fornecedor
Para configurar um Workforce Pool e um fornecedor, siga as instruções em Federação de identidade da força de trabalho e, quando definir o tempo de duração da sessão, consulte o artigo Faça a gestão do IAP com sessões da federação de identidade da força de trabalho.
Se quiser mapear um endereço de email de um IdP de terceiros para Google Cloud,
tem de adicionar um mapeamento de atributos no seu fornecedor do Workforce Pool para google.email
.
Exemplo: google.email=assertion.email
.
Crie um ID de cliente e um segredo do OAuth
Siga as instruções para criar um ID de cliente e um segredo OAuth num projeto na mesma organização que o conjunto de trabalhadores que vai usar para esta configuração. O projeto não tem de ser o mesmo projeto em que se encontra o recurso protegido pelo IAP. Ao criar o ID de cliente e o segredo do cliente OAuth, faça o seguinte:
Use um marcador de posição para o URI de redirecionamento quando criar o ID de cliente. Depois de criar o ID de cliente, execute
describe
um cliente OAuth para obter oclientID
gerado.Quando tiver o
clientID
, executeupdate
um cliente OAuth para atualizarallowed-redirect-uris
para o seguinte:https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect
.Em que
CLIENT_ID
é oclientID
obtido no passo anterior.Depois de criar o segredo do cliente, execute
describe
credenciais de um cliente OAuth para obter oclientSecret
gerado.
Guarde o
clientId
e oclientSecret
porque vai precisar deles nos passos seguintes.
Ative o IAP para usar a federação de identidade da força de trabalho
Para ativar a IAP com a Workforce Identity Federation, conclua os seguintes passos.
Ative a IAP
Ative o IAP no recurso.
consola
- Na Google Cloud consola, abra a página de CAsI.
Aceda à página de CIsA - Selecione um projeto. O projeto tem de estar na mesma organização que o conjunto de trabalhadores que criou anteriormente. O projeto não tem de ser o projeto no qual criou o ID de cliente e o segredo do cliente OAuth.
- Clique no separador Aplicações e, de seguida, localize a aplicação à qual quer restringir o acesso através de CAs.
- Na coluna IAP, ative o interruptor.
gcloud
Para usar a CLI gcloud para ativar o IAP, siga os procedimentos para o serviço aplicável:
API
Crie um ficheiro
settings.json
.cat << EOF > settings.json { "iap": { "enabled":true, } } EOF
Ative a 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 a CNA no Compute Engine, use o seguinte URL:
https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled
.
Atualize as definições de CAs
Para configurar o IAP para usar a federação de identidades da força de trabalho, tem de configurar as seguintes definições:
WorkforceIdentitySettings
: o ID de cliente e o segredo do cliente OAuth criados anteriormente.IdentitySources
: a origem da identidade.
Para mais informações, consulte as APIs IAP.
gcloud
Usando o exemplo seguinte como referência, crie um ficheiro
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" EOF
Execute o seguinte comando para atualizar as definições de IAP do seu recurso.
gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
Substitua o seguinte:
- PROJECT: o ID do projeto.
RESOURCE_TYPE: o tipo de recurso de CNA. O tipo de recurso tem de ser
cloud-run
(pré-visualização),app-engine
,iap_web
,compute
,organization
oufolder
.Para o tipo de recurso
cloud-run
, use a flag--region
para indicar a região onde o seu serviço do Cloud Run está implementado.SERVICE: o nome do serviço. Isto é opcional para
app-engine
ecompute
.
Para ver detalhes sobre o comando, consulte o artigo gcloud iap settings set.
API
Usando o exemplo seguinte como referência, crie um ficheiro de definiçõ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", } } } } EOF
Use a CLI gcloud para obter o nome do recurso e, em seguida, copie o
RESOURCE_NAME
da saída, uma vez que vai precisar dele no passo seguinte.gcloud iap settings get \ --project=PROJECT \ --resource-type=RESOURCE_TYPE \ --service=SERVICE
Substitua o seguinte:
- PROJECT: o ID do projeto.
- RESOURCE_TYPE: o tipo de recurso de CNA. O tipo de recurso tem de ser
appengine
,iap_web
,compute
,organization
,folder
oucloud_run-$REGION
(Pré-visualização), onde $REGION é a região na qual o seu serviço do Cloud Run está implementado. - SERVICE: o nome do serviço. Isto é opcional para
app-engine
ecompute
.
Substitua
RESOURCE_NAME
no comando seguinte peloRESOURCE_NAME
do passo 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"
Conceda acesso a recursos protegidos pelo IAP
Para aceder a um recurso protegido pelo IAP, os utilizadores finais têm de ter a função Utilizador da app Web protegida pelo IAP no recurso. Pode conceder a função de utilizador da app Web protegida por IAP a um único utilizador (principal) ou a um conjunto de utilizadores (conjunto principal, que é mapeado para um grupo, um atributo específico ou um conjunto completo de utilizadores).
O acesso sem restrições a recursos protegidos pelo IAP não é suportado.
consola
- Na Google Cloud consola, abra a página de CAsI.
Aceda à página de CIsA - Selecione o recurso que quer proteger com a CNA.
- Clique em Adicionar principal e, de seguida, adicione os identificadores principais dos grupos ou indivíduos aos quais quer conceder um papel do IAM para o recurso.
- Em Atribuir funções, selecione Utilizador da app Web protegida por IAP.
- Clique em Adicionar.
gcloud
Execute o seguinte comando.
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 o seguinte :
- PRINCIPAL_IDENTIFIER: os identificadores principais.
- PROJECT_ID: o ID do projeto.
- RESOURCE_TYPE: o tipo de recurso de CNA, que pode ser
app-engine
oubackend-services
. - SERVICE: (Opcional) O nome do serviço.
- CONDITION: (Opcional) Condições do IAM. Segue-se um exemplo de uma 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 in weekdays
API
Este método não é recomendado porque afeta toda a política de IAM de um recurso. Um erro pode remover a política de um recurso.
Obtenha as associações de políticas IAM existentes.
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.json
Substitua o RESOURCE_NAME pelo RESOURCE_NAME que obteve num passo anterior.
No ficheiro
iam_policy_bindings.json
que obteve no passo anterior, remova as linhas de versão e etag e adicione a associação que quer adicionar para o identificador principal. Para mais informações, consulte o artigo Compreender as políticas de autorizaçã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 in week days" } } ] }
Atualize as associações de políticas 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 o RESOURCE_NAME pelo RESOURCE_NAME que obteve num passo anterior.
Consulte GetIamPolicy e SetIamPolicy para mais informações.
(Opcional) Configure o acesso sensível ao contexto
Opcionalmente, pode configurar regras de acesso sensível ao contexto para autorização avançada.
Para configurar níveis de acesso, consulte o artigo Criar e aplicar níveis de acesso. Os níveis de acesso baseados em informações do dispositivo não estão disponíveis quando usa a federação de identidades da força de trabalho. Pode continuar a usar níveis de acesso baseados no contexto do pedido com condições no endereço IP, e na hora e data.
Autenticação programática
O IAP suporta a autenticação JWT de contas de serviço para aplicações configuradas com a federação de identidades da força de trabalho. Para ver instruções, consulte o artigo Autenticação com um JWT de conta de serviço.
Limitações ao trabalhar com conjuntos de trabalhadores
- Para cada aplicação com IAP, só é possível configurar um conjunto de trabalhadores, e o conjunto de trabalhadores só pode conter um fornecedor.
- O Workforce Pool, o ID de cliente e o segredo OAuth, e as aplicações com o IAP ativado têm de estar todos na mesma organização.
- Os níveis de acesso para informações relacionadas com o dispositivo não são suportados.
- Apenas são suportadas as seguintes configurações de definições de IAP:
- O acesso programático com a federação de identidade da força de trabalho só é suportado para contas de serviço Google.