Como personalizar o IAP

Neste artigo, você aprenderá a personalizar as configurações do Identity-Aware Proxy (IAP). Com essas configurações, é possível controlar os comportamentos, incluindo:

  • Compatibilidade com o GKE Enterprise e o Istio no Google Kubernetes Engine
  • o processamento de solicitações simuladas de CORS;
  • a maneira como os usuários são autenticados;
  • a página de erro mostrada aos usuários quando o acesso é negado.

Como gerenciar as configurações

É possível ver e atualizar as configurações do IAP no balanceador de carga e nos aplicativos do App Engine usando o console do Google Cloud, a API IAP ou a Google Cloud CLI.

Para atualizar as configurações do IAP em todos os recursos, incluindo pastas, projetos e organizações, use a API ou Google Cloud CLI.

Para gerenciar as configurações no IAP:

Console

Para conferir e modificar configurações usando o console do Google Cloud:

  1. Acesse a página Identity-Aware Proxy.
    Acessar a página "Identity-Aware Proxy"
  2. Encontre o recurso na guia APLICATIVOS.
  3. Abra o menu mais ações e clique em Configurações.
  4. Clique em Save.

gcloud

Para acessar e modificar configurações usando a Google Cloud CLI, use os comandos gcloud iap settings get e gcloud iap settings set, conforme mostrado abaixo:

  • Para ver as configurações de um projeto, pasta ou organização, use os comandos a seguir. Para definir as configurações do IAP usando o console do Google Cloud ou a CLI gcloud, consulte Como personalizar o IAP.
gcloud iap settings get --project=PROJECT-ID
gcloud iap settings get --folder=FOLDER-ID
gcloud iap settings get --organization=ORGANIZATION-ID
  • Para ver as configurações de um tipo de recurso de IAP específico em um projeto:
gcloud iap settings get --project=PROJECT-ID \
  --resource-type=RESOURCE-TYPE-NAME
  • Para definir as configurações de um projeto, pasta ou organização ou um tipo de recurso IAP em um projeto, crie um arquivo JSON ou YAML que contenha as novas configurações desejadas e especifique o caminho para o arquivo. Consulte o tópico gcloud iap settings set para mais informações:
gcloud iap settings set SETTING_FILE --project=PROJECT-ID \
  --resource-type=RESOURCE-TYPE-NAME

API

Para receber e modificar configurações usando a API IAP, faça solicitações usando os verbos HTTP GET ou PATCH para o endpoint de recurso desejado no Google Cloud. Combine o sufixo :iapSettings com o caminho do recurso, como detalhado em Recursos e permissões, e o método HTTP adequado para receber ou modificar os detalhes de uma configuração. Consulte getIapSettings() e updateIapSettings() para mais informações:

  • Para receber ou definir configurações para um tipo de recurso de IAP específico em um projeto:
https://iap.googleapis.com/v1/projects/PROJECT-ID/iap_web/appengine-APP-ID/services/SERVICE-ID/versions/VERSION-ID:iapSettings
  • Para receber ou definir configurações para um projeto:
https://iap.googleapis.com/v1/projects/PROJECT-ID:iapSettings
  • Para obter ou definir configurações para uma pasta:
https://iap.googleapis.com/v1/folders/FOLDER-ID:iapSettings
  • Para obter ou definir configurações para uma organização:
https://iap.googleapis.com/v1/organizations/ORGANIZATION-ID:iapSettings

Noções básicas sobre controle de acesso de configurações

É necessário ter permissões específicas para visualizar e modificar as configurações do IAP. Veja na tabela abaixo a lista de permissões necessárias para ler e modificar as configurações de cada tipo de recurso. Consulte Recursos e permissões para uma descrição dos diferentes tipos de recursos.

Recurso Permissão para visualizar configurações Permissão para modificar configurações
Organização iap.organizations.getSettings iap.organizations.updateSettings
Pasta iap.folders.getSettings iap.folders.updateSettings
Projeto iap.projects.getSettings iap.projects.updateSettings
Todos os serviços da Web iap.web.getSettings iap.web.updateSettings
Tipo de serviço da Web iap.webTypes.getSettings iap.webTypes.updateSettings
Serviço da Web iap.webServices.getSettings iap.webServices.updateSettings
Versão do serviço da Web iap.webServiceVersions.getSettings iap.webServiceVersions.updateSettings

O papel de administrador de configurações do IAP (roles/iap.settingsAdmin) concede todas essas permissões, assim como o de editor do projeto (roles/editor). O papel de visualizador do projeto (roles/viewer) concede todas as permissões getSettings.

Para mais informações sobre como conceder papéis do IAM, consulte Como conceder, alterar e revogar acesso.

Como personalizar as configurações do IAP

O IAP fornece as configurações de personalização a seguir:

Campo Descrição
access_settings.cors_settings.allow_http_options Controla HTTP OPTIONS (simulação de CORS).
access_settings.oauth_settings.login_hint Simplifica o login para usuários de um domínio do G Suite
application_settings.access_denied_page_settings.access_denied_page_uri Mostra uma página de erro personalizada quando o acesso for negado
application_settings.csm_settings.rctoken_aud Emitir RCTokens do GKE Enterprise e do Istio
access_settings.gcip_settings Autentica com o Identity Platform
access_settings.ReauthSettings Defina uma política de reautenticação. Para mais detalhes, consulte Como configurar a reautenticação.

As configurações são aplicáveis para envolvidos no projeto ou em qualquer nível inferior de recursos do IAP.

É possível definir configurações para recursos de IAP baseados na Web, mas não recursos acessados com o IAP para encaminhamento de TCP.

Usando access_settings.cors_settings.allow_http_options como exemplo, é possível definir as configurações de personalização da seguinte maneira:

YAML

access_settings:
  cors_settings:
    allow_http_options: "false"

JSON

{
  "access_settings": {
    "cors_settings": {
      "allow_http_options": "false"
    }
  }
}

As seções a seguir fornecem mais informações sobre cada configuração.

Como permitir solicitações HTTP OPTIONS (simulação de CORS)

Campo Valor padrão
access_settings.cors_settings.allow_http_options false

A política de mesma origem (em inglês) da Web impede que os navegadores enviem solicitações AJAX entre sites. Por padrão, o JavaScript em uma página exibida a partir de uma origem não pode usar AJAX para enviar uma solicitação a um app protegido com IAP hospedado em uma origem diferente.

Em alguns casos, os navegadores tentarão enviar uma solicitação automaticamente, mas descartarão o conteúdo da resposta se ela não incluir um cabeçalho Access-Control-Allow-Origin. Para permitir esses tipos de solicitações, inclua esse cabeçalho nas respostas do seu app.

Em outros casos, o navegador enviará uma solicitação simulada de CORS, um tipo de solicitação HTTP OPTIONS, antes de enviar a solicitação entre origens. Se o app não retornar uma resposta simulada apropriada, contendo os cabeçalhos de resposta Access-Control-* obrigatórios, o navegador bloqueará a solicitação com um erro. Além disso, como as solicitações simuladas não são enviadas com qualquer credencial de autenticação, como um cookie de sessão, o IAP também responderá com um erro.

Faça o seguinte para permitir essas solicitações:

  1. Adicione um código ao app que responda a solicitações OPTIONS.

  2. Altere a configuração de access_settings.cors_settings.allow_http_options para true. Desse modo, o IAP transmitirá as solicitações OPTIONS para seu aplicativo.

Como autenticar usando um domínio do Google Workspace

Campo Valor padrão
access_settings.oauth_settings.login_hint ""

Se você quer que seu app seja usado apenas pelos membros de um domínio específico do espaço de trabalho do Google, configure o IAP para otimizar o fluxo de autenticação. Isso traz vários benefícios:

  • Se um usuário tiver feito login com várias contas, como uma conta de trabalho e outra pessoal, o sistema selecionará automaticamente a conta de trabalho em vez de exibir a IU de seleção de conta.

  • Se um usuário não estiver conectado com uma Conta do Google, a IU de login preencherá automaticamente a parte referente ao domínio no endereço de e-mail, ou seja, o usuário precisará digitar apenas alice, em vez de alice@example.com, por exemplo.

  • Se você configurou seu domínio do Google Workspace para usar um provedor de logon único de terceiros, o sistema exibirá uma página de login personalizada, em vez da página do Google.

Para ativar esse comportamento, defina o valor de access_settings.oauth_settings.login_hint como o nome de domínio do Google Workspace (como example.com). A propriedade do domínio precisa ter sido verificada: não é possível usar seus domínios de DNS arbitrários da Internet. Os domínios adicionados como domínio principal ou secundário do Google Workspace são verificados e, portanto, podem ser usados aqui.

Se você precisar autenticar usuários fora do domínio, use a autenticação programática.

Para mais informações, consulte a documentação do OpenID Connect.

Como configurar uma página de erro personalizada de acesso negado

Campo Valor padrão
application_settings.access_denied_page_settings.access_denied_page_uri ""

Você pode definir um URL nesse campo que redirecione os usuários para uma página personalizada, em vez da página de erro IAP padrão sempre que o acesso for negado por uma política.

Você também pode incorporar o URL da solução de problemas com esse recurso. Para mais informações, consulte Como ativar o URL de solução de problemas para sua página de erro personalizada de acesso negado.

Como emitir IDs de malha RCToken do GKE Enterprise e do Istio

Campo Valor padrão
application_settings.csm_settings.rctoken_aud ""

Se você usa o Istio no GKE, tem a opção de configurar o IAP para produzir um RCToken compatível com o Istio. Se o campo acima estiver definido como uma string não vazia, o IAP incluirá um cabeçalho HTTP Ingress-Authorization com um RCToken. A declaração aud será definida como o valor do campo.

Como autenticar com o Identity Platform

Campo Valor padrão
access_settings.gcip_settings null

Por padrão, o IAP usa o sistema de identidade nativo do Google. Se o campo acima estiver definido, o IAP usará o Identity Platform para autenticar usuários.

Noções básicas sobre a herança de configurações na hierarquia de recursos

O IAP sempre avalia as solicitações para uma versão específica do serviço da Web. Esse tipo de recurso está no nível mais baixo da hierarquia, que tem esta aparência:

- Organization
  - Folder
    - Project
      - All web services
        - Web service type
          - Web service
            - Web service version

Para determinar as configurações a serem aplicadas a uma versão do serviço da Web, o IAP começa com um conjunto padrão de valores e percorre a hierarquia de cima para baixo. As configurações são aplicadas conforme são encontradas. Por isso, os valores definidos em um nível inferior modificam aqueles definidos em um nível superior. Por exemplo, se access_settings.cors_settings.allow_http_options estiver definido como true para envolvidos no projeto, mas como false no nível do serviço, na prática, o valor será false.

Consulte Recursos e permissões para mais informações sobre a hierarquia de recursos do IAP.