Usar clientes OAuth personalizados com o IAP

Este documento descreve quando e como usar clientes OAuth personalizados para o Identity-Aware Proxy (IAP).

Por padrão, o IAP usa clientes OAuth gerenciados pelo Google para autenticar usuários. Os clientes OAuth gerenciados pelo Google só podem ser usados para gerenciar o acesso de usuários internos que estão em uma organização.

É necessário usar uma configuração OAuth personalizada para fazer o seguinte:

  • Gerencie o acesso a aplicativos ativados para IAP de usuários externos que não fazem parte da sua organização.
  • Gerenciar o acesso a aplicativos da Web em projetos que não estão em uma organização doGoogle Cloud .
  • Mostrar informações personalizadas da marca nas telas de consentimento durante a autenticação.

É possível configurar clientes OAuth personalizados na IAP ou diretamente na sua plataforma.

Ao usar clientes OAuth personalizados, é necessário configurar a tela de permissão OAuth. Para que a personalização da marca apareça na tela de consentimento, envie seu aplicativo para verificação do Google. Para mais informações sobre o processo de verificação, consulte Como configurar a tela de permissão OAuth.

Ao configurar clientes OAuth personalizados, você é responsável por criar e gerenciar as credenciais, o que inclui armazenar com segurança a chave secreta do cliente e compartilhá-la com clientes autorizados quando necessário.

Comparar clientes OAuth gerenciados pelo Google e clientes OAuth personalizados

Os clientes OAuth gerenciados pelo Google não podem acessar de maneira programática aplicativos protegidos pelo IAP. No entanto, aplicativos protegidos pela IAP que usam o cliente OAuth gerenciado pelo Google ainda podem ser acessados de forma programática usando um cliente OAuth separado configurado pela configuração programmatic_clients ou um JWT de conta de serviço.

A tabela a seguir compara o cliente OAuth gerenciado pelo Google e um cliente OAuth personalizado.

Cliente OAuth gerenciado pelo Google Cliente OAuth personalizado
Usuários Somente interno Parceiros internos e externos
Marca Google Cloud marca Marca de propriedade do cliente
Configuração do OAuth Configurado pelo Google O cliente está configurado
Credenciais do OAuth Gerenciada pelo Google Gerenciada pelo cliente
Acesso a aplicativos Fluxo somente no navegador Fluxo do navegador e acesso programático

Configurar a página de branding

Para configurar a página de branding personalizada usando o console do Google Cloud , faça o seguinte:

  1. No console Google Cloud , acesse a página Branding do OAuth:

    Acessar Branding

  2. Clique em Primeiros passos.

  3. Em Nome do app, insira o nome do aplicativo para a tela de consentimento.

  4. Em E-mail de suporte ao usuário, insira o endereço de e-mail do administrador para receber suporte.

  5. Em Público-alvo, selecione Interno para restringir o acesso a usuários da sua organização ou Externo para permitir o acesso a usuários de fora dela.

  6. Em Dados de contato, insira o e-mail do administrador para entrar em contato sobre os apps protegidos pelos clientes OAuth. Você vai configurar os clientes OAuth em uma etapa posterior.

  7. Para criar a configuração do OAuth, clique em Criar.

Configurar clientes OAuth personalizados no IAP

Esta seção descreve como configurar clientes OAuth personalizados no IAP.

Você pode criar um cliente OAuth personalizado para IAP usando o console doGoogle Cloud das seguintes maneiras:

Independente do método usado, configure a página de branding antes de criar o cliente OAuth. O formato de URI de redirecionamento obrigatório é mostrado nos dois métodos.

Criar o cliente OAuth personalizado

Nesta seção, descrevemos como criar clientes OAuth personalizados usando o consoleGoogle Cloud . É possível configurar clientes OAuth personalizados do IAP em qualquer nível da hierarquia de recursos.

Para criar clientes OAuth personalizados para um recurso usando o console Google Cloud , use um dos seguintes métodos:

Método 1: criar um cliente OAuth usando o console Google Cloud

Use esse método quando quiser criar o cliente OAuth separadamente, talvez antes de configurar o IAP para seus recursos. Para isso, é preciso adicionar manualmente o URI de redirecionamento da IAP.

  1. No console Google Cloud , acesse APIs e serviços > Credenciais.

  2. Clique em Criar credenciais e selecione ID do cliente OAuth.

  3. Em Tipo de aplicativo, selecione Aplicativo da Web.

  4. No campo Nome, insira um nome descritivo para o cliente OAuth.

  5. Clique em Criar. Anote o ID do cliente gerado.

  6. Depois que o cliente OAuth for criado, acesse a seção URIs de redirecionamento autorizados na página de detalhes do cliente OAuth recém-criado.

  7. Clique em Adicionar URI e insira o seguinte URI de redirecionamento autorizado específico da IAP:

    https://iap.googleapis.com/v1/oauth/clientIds/YOUR_CLIENT_ID:handleRedirect

    Substitua YOUR_CLIENT_ID pelo ID do cliente que você recebeu na etapa anterior.

  8. Clique em Salvar.

Método 2: criar um cliente OAuth usando credenciais geradas automaticamente pelo IAP

Use esse método para que a IAP crie e configure o cliente OAuth para você e adicione automaticamente o URI de redirecionamento necessário.

  1. No console do Google Cloud , acesse a página IAP.

    Acessar o IAP

  2. Na guia Aplicativos, na lista de recursos, encontre aquele que você quer configurar.

    Para recursos no nível do projeto, faça o seguinte:

    • Crie o cliente OAuth usando o Google Cloud console:

      1. Na coluna Ações, clique em Mais opções > Configurações.

      2. Na caixa de diálogo Configurações, selecione OAuth personalizado.

      3. Se você não tiver configurado uma tela de consentimento, faça o seguinte:

        1. Clique em Configurar tela de consentimento.

        2. Siga as instruções para configurar a página de branding fornecidas anteriormente neste documento.

      4. Na caixa de diálogo de configurações da IAP, clique em Gerar credenciais automaticamente. O IAP gera um novo cliente e segredo do OAuth para usar com esse recurso. Na Google Auth Platform, o campo URIs de redirecionamento autorizados contém uma entrada no seguinte formato:

        https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
      5. Para acessar o ID e a chave secreta do cliente, clique em Fazer o download das credenciais. As credenciais são salvas em um arquivo formatado em JSON. Como o arquivo contém credenciais sensíveis para acessar recursos, verifique se ele está protegido ou foi excluído.

      6. Para salvar a configuração do OAuth do IAP e aplicar o cliente OAuth ao IAP, clique em Salvar.

Aplicar clientes OAuth personalizados ao IAP

Esta seção descreve como aplicar clientes OAuth ao IAP. Você pode usar esse método em vez de aplicar os clientes diretamente na sua plataforma.

  1. Para criar o cliente OAuth personalizado, siga as instruções do consoleGoogle Cloud fornecidas anteriormente neste documento.

  2. Aplique o cliente OAuth personalizado.

    gcloud

    Para aplicar o cliente OAuth personalizado usando a CLI gcloud, faça o seguinte:

    1. Crie um arquivo YAML de configurações.

      cat << EOF > iap-oauth.yaml
      accessSettings:
      oauthSettings:
        clientId: CLIENT_ID
        clientSecret: CLIENT_SECRET
      EOF
      

      Substitua:

      • CLIENT_ID: o ID do cliente das credenciais do OAuth que você gerou anteriormente.
      • CLIENT_SECRET: a chave secreta do cliente das credenciais do OAuth que você gerou anteriormente.
    2. Para definir a configuração do OAuth, faça o seguinte:

      • Para definir a configuração do OAuth no nível do projeto, execute o comando a seguir:
      gcloud iap settings set iap-oauth.yaml

      Para definir a configuração em outro nível da hierarquia de recursos, use uma das seguintes flags em vez de --project. Definir clientes OAuth personalizados em um nível da hierarquia de recursos fornece a mesma marca personalizada a todos os serviços que são executados nesse nível.

      * <pre>--folder=<var>FOLDER_ID</var></pre>
      * <code>--organization=<var>ORGANIZATION_ID</var></code>
      
      • Para definir a configuração em um serviço específico, execute o seguinte comando:
      gcloud iap settings set iap-oauth.yaml \
          --project=PROJECT_ID \
          --resource-type= RESOURCE_TYPE \
          --region=REGION \
          --service=SERVICE_NAME

      Substitua:

      • PROJECT_ID: o ID do recurso do projeto. Para definir a configuração em outro nível, use uma das seguintes flags em vez de --project:

        • --folder=FOLDER_ID
        • --organization=ORGANIZATION_ID
      • RESOURCE_TYPE: substitua por um dos seguintes tipos de recursos, dependendo do recurso:

        • app-engine
        • backend-services
        • cloud-run
        • compute
        • folder
        • forwarding-rule
        • iap_web
        • organization
      • REGION: a região em que você executa o serviço do Cloud Run.

      • SERVICE_NAME: o nome do seu serviço.

    Terraform

    Para aplicar o cliente OAuth personalizado usando o Terraform, faça o seguinte:

    resource "google_iap_settings" "iap_settings" {
    name = IAP_RESOURCE_NAME
    access_settings {
      oauth_settings {
          oauth_client_id = CLIENT_ID
          oauth_client_secret = CLIENT_SECRET
      }
    }
    }
    

    Substitua:

    • IAP_RESOURCE_NAME: o nome do recurso iap_settings do serviço, que tem o seguinte formato: projects/PROJECT_NUMBER/iap_web/REGION/services/SERVICE_NAME
    • CLIENT_ID: o ID do cliente das credenciais do OAuth que você gerou anteriormente
    • CLIENT_SECRET: a chave secreta do cliente das credenciais do OAuth que você gerou anteriormente

    API REST

    1. Crie um arquivo JSON de configurações.

      cat << EOF > iap-oauth.json
      {
      "accessSettings": {
        "oauthSettings": {
          "clientId": "CLIENT_ID",
          "clientSecret": "CLIENT_SECRET"
        }
      }
      }
      EOF

      Substitua:

      • CLIENT_ID: o ID do cliente das credenciais do OAuth que você gerou anteriormente.
      • CLIENT_SECRET: a chave secreta do cliente das credenciais do OAuth que você gerou anteriormente.
    2. Aplique o arquivo de configurações.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)"
      -H "Content-Type: application/yaml" \
      "https://iap.googleapis.com/v1/projects/cb-managed-ingress-demo/iap_web/forwarding_rule-us-central1/services/psc-fr:iapSettings?update_mask=iapSettings.accessSettings.oauthSettings.oauthClientId,iapSettings.accessSettings.oauthSettings.oauthClientSecret" \
      -d @iap-oauth.json
      

Para testar se os aplicativos da Web estão protegidos pelo IAP com os clientes OAuth, consulte Testar acesso.

Configuração legada de clientes OAuth personalizados em um recurso

As seções a seguir descrevem métodos legados para configurar clientes OAuth personalizados na IAP para determinados tipos de recursos. Você pode pular esta seção se tiver usado o método descrito anteriormente neste documento.

App Engine

Esta seção descreve como ativar clientes OAuth personalizados no App Engine.

gcloud

Antes de configurar o projeto e o IAP, você precisa de uma versão atualizada da CLI gcloud. Para instruções sobre como instalar a CLI gcloud, consulte Instalar a CLI gcloud.

  1. Para autenticar, use a Google Cloud CLI e execute o seguinte comando:
    gcloud auth login
  2. Para fazer login, siga o URL que aparece.
  3. Depois de fazer login, copie o código de verificação que aparece e cole-o na linha de comando.
  4. Execute o seguinte comando para especificar o projeto que contém o recurso que você quer proteger com o IAP.
    gcloud config set project PROJECT_ID
  5. Siga as instruções em Como criar clientes OAuth para IAP para configurar a tela de permissão OAuth e criar o cliente OAuth.
  6. Salve o ID e a chave secreta do cliente OAuth.
  7. Para ativar o IAP, execute o seguinte comando.
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

Depois de ativar o IAP, use a CLI gcloud para modificar a política de acesso do IAP usando o papel do IAM roles/iap.httpsResourceAccessor. Saiba mais sobre como gerenciar papéis e permissões.

API

  1. Siga as instruções em Como criar clientes OAuth para IAP para configurar a tela de permissão OAuth e criar o cliente OAuth.

  2. Salve o ID e a chave secreta do cliente OAuth.

  3. Execute o comando a seguir para preparar um arquivo settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled": true,
        "oauth2ClientId": "CLIENT_ID",
        "oauth2ClientSecret":" CLIENT_SECRET"
      }
    }
    EOF
    

  4. Execute o comando a seguir para ativar o IAP.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default 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"
    

Depois de ativar o IAP, use a Google Cloud CLI para modificar a política de acesso do IAP usando o papel do IAM roles/iap.httpsResourceAccessor. Saiba mais sobre como gerenciar papéis e permissões.

GKE

Esta seção descreve como ativar clientes OAuth personalizados no GKE.

Configurar o BackendConfig

Se você estiver executando clusters do GKE versão 1.24 ou mais recente, poderá configurar o IAP e o GKE usando a API Gateway do Kubernetes. Consulte Configurar o IAP para instruções.

  1. Siga as instruções em Como criar clientes OAuth para IAP para configurar a tela de permissão OAuth e criar o cliente OAuth.

  2. Crie um objeto Secret do Kubernetes para encapsular o cliente OAuth.

    kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \
      --from-literal=client_secret=CLIENT_SECRET
    
    Substitua:

    • MY_SECRET: o nome do secret a ser criado
    • CLIENT_ID: o ID do cliente OAuth
    • CLIENT_SECRET: a chave secreta do cliente OAuth

    Você vai receber uma confirmação, como a saída a seguir, de que o secret foi criado:

    secret "MY_SECRET" created
    

  3. Adicione as credenciais do OAuth ao BackendConfig.

    apiVersion: cloud.google.com/v1
    kind: BackendConfig
    metadata:
      name: CONFIG_DEFAULT
      namespace: my-namespace
    spec:
    iap:
      enabled: true
      oauthclientCredentials:
        secretName: MY_SECRET
    

  4. Ative o IAP associando portas de serviço ao BackendConfig. Consulte Como associar o BackendConfig ao Ingress. Uma forma de fazer essa associação é tornar todas as portas de serviço como padrão para seu BackendConfig. Para isso, inclua a anotação a seguir no recurso Service:

    metadata:
      annotations:
          beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}}'
    

Depois de ativar o IAP, use a CLI gcloud para modificar a política de acesso do IAP usando o papel do IAM roles/iap.httpsResourceAccessor. Saiba mais sobre como gerenciar papéis e permissões.

Solução de problemas

Se o secretName referenciado não existir ou não estiver estruturado corretamente, uma das mensagens de erro a seguir será exibida:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. Para resolver esse erro, verifique se você criou o objeto Secret do Kubernetes corretamente, conforme descrito na etapa 2.

  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. Para resolver esse erro, verifique se você criou as credenciais do OAuth corretamente. Além disso, verifique se você referenciou corretamente as chaves client_id e client_secret.

Serviço de back-end de balanceador de carga

Para usuários do Compute Engine e do Cloud Run, esta seção descreve como configurar clientes OAuth no IAP para o serviço de back-end do balanceador de carga.

gcloud

Antes de configurar o projeto e o IAP, você precisa de uma versão atualizada da CLI gcloud. Para instruções sobre como instalar a CLI gcloud, consulte Instalar a CLI gcloud.

  1. Para autenticar, use a Google Cloud CLI e execute o seguinte comando.
    gcloud auth login
  2. Para fazer login, siga o URL que aparece.
  3. Depois de fazer login, copie o código de verificação que aparece e cole-o na linha de comando.
  4. Execute o seguinte comando para especificar o projeto que contém o recurso que você quer proteger com o IAP.
    gcloud config set project PROJECT_ID
  5. Siga as instruções em Como criar clientes OAuth para IAP para configurar a tela de permissão OAuth e criar o cliente OAuth.
  6. Salve o ID e a chave secreta do cliente OAuth.
  7. Para ativar o IAP, execute o comando com escopo global ou regional.

    Escopo global
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --global \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    Escopo regional
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --region REGION_NAME \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
        

Depois de ativar o IAP, use a CLI gcloud para modificar a política de acesso do IAP usando o papel do IAM roles/iap.httpsResourceAccessor. Saiba mais sobre como gerenciar papéis e permissões.

API

  1. Siga as instruções em Como criar clientes OAuth para IAP para configurar a tela de permissão OAuth e criar o cliente OAuth.

  2. Salve o ID e a chave secreta do cliente OAuth.

  3. Execute o comando a seguir para preparar um arquivo settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled": true,
        "oauth2ClientId": "CLIENT_ID",
        "oauth2ClientSecret": "CLIENT_SECRET"
      }
    }
    EOF
    

  4. Execute o comando a seguir para ativar IAP.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME"
    

Depois de ativar o IAP, use a CLI gcloud para modificar a política de acesso do IAP usando o papel do IAM roles/iap.httpsResourceAccessor. Saiba mais sobre como gerenciar papéis e permissões.

Testar o acesso

Depois de configurar o cliente OAuth personalizado, teste se a IAP está usando ele para proteger seu serviço fazendo o seguinte:

  1. Na página do IAP, na guia Aplicativos, veja os aplicativos gerenciados pelo IAP.

  2. Acesse o URL de um dos aplicativos. Se você estiver acessando o aplicativo pela primeira vez desde que configurou a tela de consentimento, ela vai aparecer.