Configurar o IAP com a federação de identidade de colaboradores

Nesta página, mostramos como configurar o Identity-Aware Proxy (IAP) para usar Federação de identidade de colaboradores.

Ao configurar a federação de identidade de colaboradores com o IAP, você pode usar um provedor de identidade (IdP) externo para autenticar e autorizar um força de trabalho (um grupo de usuários, como funcionários, parceiros e contratados) usando Identity and Access Management (IAM), para que os usuários possam acessar com segurança os serviços implantados Google Cloud ou no local.

Configurar o IAP com a federação de identidade de colaboradores permite que você faça a seguir com relação aos aplicativos protegidos pelo IAP:

  • Redirecione um usuário final para um IdP externo, como o Okta, para fazer login.
  • Configurar 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 seus para o aplicativo.
  • Especifique o contexto em que um usuário final pode acessar um aplicativo. Para por exemplo, permitir acesso apenas durante um horário específico do dia.

Você pode usar o IAP com a federação de identidade de colaboradores os recursos e balanceadores de carga atuais compatíveis com o IAP.

Configurar o IAP para um aplicativo com a federação de identidade de colaboradores

A configuração do IAP com a federação de identidade de colaboradores abrange as seguintes tarefas principais:

  1. Configurar um pool de força de trabalho e um provedor.
  2. Crie um ID e uma chave secreta do cliente OAuth.
  3. Ative o IAP e configure-o para usar a federação de identidade de colaboradores.

Configurar um pool de força de trabalho e um provedor

Para configurar um pool de força de trabalho e um provedor, siga as instruções em Federação de identidade da força de trabalho e quando Defina a duração da sessão em Gerenciar o IAP com sessões de 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 google.email. Exemplo: google.email=assertion.email.

Criar um ID e uma chave secreta do cliente OAuth

  1. Siga as instruções para criar um ID e uma chave secreta do cliente OAuth. em um projeto na mesma organização do pool de força de trabalho que você usar para essa configuração. O projeto não precisa ser o mesmo em que está o recurso protegido pelo IAP. Ao criar o ID e a chave secreta do cliente OAuth, faça o seguinte:

    1. Use um marcador para o URI de redirecionamento ao criar o ID do cliente. Depois você cria o ID do cliente, executa describe um cliente OAuth para receber o clientID gerado.

    2. Quando você tiver a 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 recuperado na etapa anterior.

    3. Depois de criar a chave secreta do cliente, execute describe um cliente OAuth credentials para receber o clientSecret gerado.

    Salve a clientId e a clientSecret porque você vai precisar deles mais tarde. etapas.

Ativar o IAP para usar a federação de identidade de colaboradores

Console

  1. No console do Google Cloud, abra a página do IAP.
    Acessar a página do IAP
  2. Selecione um projeto. O projeto precisa estar na mesma organização no pool de força de trabalho criado anteriormente. O projeto não precisa ser projeto em que você criou o ID e a chave secreta do cliente OAuth.
  3. Clique na guia Aplicativos e localize o aplicativo que você restringir o acesso ao uso do IAP.
  4. Na coluna "IAP", habilite a opção Ativado.

gcloud

Para usar a CLI gcloud para ativar o IAP, siga as procedimentos para o serviço aplicável:

API

  1. Crie um arquivo settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. Ativar 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 Compute Engine, use este 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 e a chave secreta do cliente OAuth criados anteriormente.
  • IdentitySources: a origem de identidade.

Para mais informações, consulte as APIs do IAP.

gcloud

  1. Usando o exemplo a seguir como referência, crie um 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 comando a seguir para atualizar as configurações do IAP para seu recurso.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    Substitua:

    • PROJECT: o ID do projeto.
    • RESOURCE_TYPE: o tipo de recurso do IAP. O O tipo de recurso precisa ser app-engine, iap_web, compute. organization ou folder.
    • SERVICE: o nome do serviço. Isso é opcional para app-engine e compute.

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

API

  1. Usando o exemplo a seguir como referência, crie um iap_settings.json de configuração do Terraform.

    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 saber o nome do recurso e, em seguida, copie o RESOURCE_NAME da saída, porque você vai precisar dele no etapa seguinte.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    Substitua:

    • PROJECT: o ID do projeto.
    • RESOURCE_TYPE: o tipo de recurso do IAP. O O tipo de recurso precisa ser app-engine, iap_web, compute. organization ou folder.
    • SERVICE: o nome do serviço. Isso é opcional para app-engine e compute.
  3. No comando a seguir, substitua RESOURCE_NAME pelo RESOURCE_NAME da 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 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 um conjunto de usuários (conjunto principal, que mapeia para um grupo, um atributo específico ou um conjunto inteiro de usuários).

Não há suporte para o acesso irrestrito a recursos protegidos pelo IAP.

Console

  1. No console do Google Cloud, abra a página do IAP.
    Acessar a página do IAP
  2. Selecione o recurso que você quer proteger com o IAP.
  3. Clique em Adicionar principal e adicione o identificadores principais dos grupos ou indivíduos aos quais você deseja conceder uma papel do IAM para o recurso.
  4. Em Atribuir papéis, selecione Usuário do app da Web protegido pelo IAP.
  5. 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 o seguinte :

  • PRINCIPAL_IDENTIFIER: o identificadores principais.
  • PROJECT_ID: o ID do projeto.
  • RESOURCE_TYPE: o tipo de recurso de IAP, que pode ser app-engine ou backend-services.
  • SERVICE: o nome do serviço. Isso é opcional quando o resource-type é app-engine.
  • 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 in 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.

  1. Consiga as vinculações de política do 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 você recebeu em uma etapa anterior.

  2. Para o arquivo iam_policy_bindings.json que você recebeu do comando remova as linhas de versão e etag e adicione a vinculação que deseja a serem adicionados para o identificador principal. Para mais informações, consulte Como funcionam as 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 in week days"
          }
        }
      ]
    }
    
  3. Atualizar as vinculações de políticas 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 o 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

Também é possível configurar regras de acesso baseado no contexto para autorização avançada.

Para configurar os níveis de acesso, consulte Como criar e aplicar níveis de acesso. Os níveis de acesso com base nas informações do dispositivo não estão disponíveis ao usar Federação de identidade de colaboradores. Você ainda pode usar o acesso baseado no contexto com condições de endereço IP, hora e data.

Limitações ao trabalhar com pools de força de trabalho

  • O IAP aceita apenas um pool de força de trabalho, e o pool de força de trabalho pode conter apenas um provedor.
  • O pool da força de trabalho, o ID e a chave secreta do cliente OAuth e a Os aplicativos ativados para IAP precisam estar todos na mesma organização.
  • Os níveis de acesso para informações relacionadas ao dispositivo não são compatíveis.
  • Somente as seguintes configurações de configurações do IAP são compatíveis:
  • O acesso programático com a federação de identidade de colaboradores não está disponível.