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:

  • a compatibilidade com Anthos e 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 visualizar e atualizar as configurações usando o Console do Cloud, a API IAP ou a ferramenta de linha de comando gcloud.

Para gerenciar as configurações no IAP:

Console

Para ver e modificar as configurações usando o Console do Cloud:

  1. Acesse a página Identity-Aware Proxy.
    Acessar a página "Identity-Aware Proxy"
  2. Encontre seu recurso na guia Recursos HTTPS.
  3. Abra o menu mais ações e clique em Configurações.
  4. Depois de fazer as alterações, clique em Salvar.

gcloud

Para obter e modificar configurações usando a ferramenta de linha de comando gcloud, use os comandos gcloud iap settings get e gcloud iap settings set como mostrado abaixo:

  • Para ver as configurações de um projeto, pasta ou organização, use os comandos a seguir. Consulte o tópico gcloud iap settings get para mais informações:
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 Emite Anthos e Istio RCTokens
access_settings.gcip_settings Autentica com o Identity Platform

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 seu nome de domínio do espaço de trabalho do Google, como example.com.

Em geral, ativar essa configuração impede que usuários que não estejam no domínio especificado do espaço de trabalho do Google se conectem ao seu aplicativo. Também é possível usar a autenticação programática caso seja necessário autenticar usuários de fora do domínio.

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

Como definir 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.

Como emitir IDs de malha RCToken do Anthos 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.