Configure o IAP com a federação de identidade da força de trabalho

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:

  1. Configure um Workforce Pool e um fornecedor.
  2. Crie um segredo e um ID de cliente OAuth.
  3. 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

  1. 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:

    1. 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 o clientID gerado.

    2. Quando tiver o clientID, execute update um cliente OAuth para atualizar allowed-redirect-uris para o seguinte: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      Em que CLIENT_ID é o clientID obtido no passo anterior.

    3. Depois de criar o segredo do cliente, execute describe credenciais de um cliente OAuth para obter o clientSecret gerado.

    Guarde o clientId e o clientSecret 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

  1. Na Google Cloud consola, abra a página de CAsI.
    Aceda à página de CIsA
  2. 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.
  3. Clique no separador Aplicações e, de seguida, localize a aplicação à qual quer restringir o acesso através de CAs.
  4. 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

  1. Crie um ficheiro settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. 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

  1. 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
    
  2. 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 ou folder.

      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 e compute.

    Para ver detalhes sobre o comando, consulte o artigo gcloud iap settings set.

API

  1. 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
    
  2. 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 ou cloud_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 e compute.
  3. Substitua RESOURCE_NAME no comando seguinte pelo RESOURCE_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

  1. Na Google Cloud consola, abra a página de CAsI.
    Aceda à página de CIsA
  2. Selecione o recurso que quer proteger com a CNA.
  3. 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.
  4. Em Atribuir funções, selecione Utilizador da app Web protegida por IAP.
  5. 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 ou backend-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.

  1. 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.

  2. 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"
          }
        }
      ]
    }
    
  3. 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.