Ativar acesso baseado no certificado para aplicativos da Web

Esta página descreve como ativar o acesso baseado em certificado (CBA, na sigla em inglês) para seus aplicativos da Web. É possível usar o CBA para proteger o acesso de dispositivos confiáveis a aplicativos da Web empresariais executados no Google Cloud.

Visão geral

O CBA para aplicativos da Web usa os recursos de acesso baseado no contexto do Chrome Enterprise Premium e a rede do Google Cloud para proteger o acesso usando TLS mútuo (mTLS). Confira a seguir os principais componentes com que você trabalha para ativar a CBA em aplicativos da Web:

  • Access Context Manager: permite criar níveis de acesso que exigem certificados ao determinar o acesso a aplicativos da Web.
  • Identity-Aware Proxy (IAP): autentica o acesso do usuário a aplicativos da Web.
  • Balanceador de carga HTTPS do Google Cloud: oferece autenticação mútua (mTLS) entre usuários e aplicativos da Web.
  • Política do Chrome Enterprise: oferece autenticação mútua (mTLS) entre e aplicativos da Web ao usar o navegador Chrome.

Antes de começar

Verifique se você tem uma versão atual da Google Cloud CLI. executando o seguinte comando:

gcloud components update

Configurar o mTLS para o balanceador de carga HTTPS externo

Siga as instruções para configurar balanceador de carga HTTPS externo. Anote o nome do proxy HTTPS de destino que é criado, porque você vai precisar dele em uma etapa posterior.

Criar uma configuração de confiança

Crie uma configuração de confiança para representam seu tipo de infraestrutura de chave pública (ICP).

Para concluir essa tarefa, você precisa ter o certificatemanager.trustconfigs.create no projeto de destino do Google Cloud.

É possível criar uma configuração de confiança usando um certificado emitido pelo Google (Método 1), seu próprio certificado (Método 2) ou um certificado autoassinado com a Verificação de endpoints (Método 3).

Método 1

Use um certificado emitido pelo Google para criar uma configuração de confiança.

  1. Conclua as etapas para criar uma AC raiz.
  2. Busque o conteúdo do arquivo PEM:

    gcloud privateca roots describe ROOT_CA_ID \
        --pool=POOL_ID \
        --location=CA_LOCATION \
        --format='value(pemCaCertificates)'
    

    Substitua:

    • ROOT_CA_ID: o ID do certificado raiz.
    • POOL_ID: o ID do pool do certificado raiz.
    • CA_LOCATION: o local da AC.
  3. Recupere o certificado raiz, retornado no campo pemCaCertificates. O certificado é a string entre os marcadores BEGIN CERTIFICATE e END CERTIFICATE e inclui ambos.

  4. Salve o certificado raiz no formato PEM em um arquivo.

  5. Crie uma configuração de confiança:

    1. Configure as variáveis de ambiente a seguir:

      ROOT_PEM_FILE=TRUST_ANCHOR_PATH
      INT_PEM_FILE1=IM_CERT_PATH
      INT_PEM_FILE2=SECOND_IM_CERT_PATH
      

      Substitua:

      • TRUST_ANCHOR_PATH: o caminho para a âncora de confiança codificada em PEM.
      • IM_CERT_PATH: o caminho para o certificado intermediário codificado em PEM.
      • SECOND_IM_CERT_PATH: o caminho para o segundo certificado intermediário codificado em PEM.
    2. Prepare o conteúdo do arquivo YAML de configuração de confiança:

      ROOT=$(cat ROOT_PEM_FILE | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      INT_1=$(cat INT_PEM_FILE1 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      INT_2=$(cat INT_PEM_FILE2 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
      
    3. Crie o arquivo YAML de configuração de confiança:

      cat << EOF > trust_config.yaml
      name: "${TRUST_CONFIG_NAME?}"
      trustStores:
      - trustAnchors:
        - pemCertificate: "${ROOT?}"
        intermediateCas:
        - pemCertificate: "${INT_1?}"
        - pemCertificate: "${INT_2?}"
       EOF
      

      Esse arquivo YAML define uma configuração de confiança chamada TRUST_CONFIG_NAME. O configuração de confiança contém um repositório de confiança, que inclui o endereço e dois intermediários.

    4. Importe a configuração de confiança para o Gerenciador de certificados do Google Cloud:

      gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
        --project=GCP_PROJECT \
        --source=${PWD?}/trust_config.yaml
      

      Substitua:

      • TRUST_CONFIG_NAME: o nome da configuração de confiança.
      • GCP_PROJECT: o ID do projeto do Google Cloud.

Se você implantar uma estrutura mais complexa com ACs intermediárias assinadas pelo raiz, adicione os intermediários como intermediateCAs.

Método 2

Use sua própria implantação de ICP com certificados existentes para criar uma configuração de confiança.

Esse tipo de configuração de confiança pressupõe um repositório de confiança básico com um único âncora que representa um certificado raiz. Nenhum certificado intermediário é especificado.

Crie uma configuração de confiança:

  1. Configure as variáveis de ambiente a seguir:

    ROOT_PEM_FILE=TRUST_ANCHOR_PATH
    INT_PEM_FILE1=IM_CERT_PATH
    INT_PEM_FILE2=SECOND_IM_CERT_PATH
    

    Substitua:

    • TRUST_ANCHOR_PATH: o caminho para a âncora de confiança codificada em PEM.
    • IM_CERT_PATH: o caminho para o certificado intermediário codificado em PEM.
    • SECOND_IM_CERT_PATH: o caminho para o segundo certificado intermediário codificado em PEM.
  2. Prepare o conteúdo do arquivo YAML de configuração de confiança:

    ROOT=$(cat ROOT_PEM_FILE | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    INT_1=$(cat INT_PEM_FILE1 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    INT_2=$(cat INT_PEM_FILE2 | sed 's/^[ ]*//g' | tr '\n' $ | sed 's/\$/\\n/g')
    
  3. Crie o arquivo YAML de configuração de confiança:

    cat << EOF > trust_config.yaml
    name: "${TRUST_CONFIG_NAME?}"
    trustStores:
    - trustAnchors:
      - pemCertificate: "${ROOT?}"
      intermediateCas:
      - pemCertificate: "${INT_1?}"
      - pemCertificate: "${INT_2?}"
    EOF
    

    Esse arquivo YAML define uma configuração de confiança chamada TRUST_CONFIG_NAME. O configuração de confiança contém um repositório de confiança, que inclui o endereço e dois intermediários.

  4. Importe a configuração de confiança para o Gerenciador de certificados do Google Cloud:

    gcloud certificate-manager trust-configs import TRUST_CONFIG_NAME \
      --project=GCP_PROJECT \
      --source=${PWD?}/trust_config.yaml
    

    Substitua:

    • TRUST_CONFIG_NAME: o nome da configuração de confiança.
    • GCP_PROJECT: o ID do projeto do Google Cloud.

Método 3

Se você estiver usando um navegador Chrome e quiser usar um certificado autoassinado com a Verificação de endpoints, siga as instruções desta seção.

Siga as instruções para implantar a Verificação de endpoints na sua organização. A Endpoint Verification implanta automaticamente uma conta de serviço do Google aos seus dispositivos, sem precisar criar uma configuração de confiança.

Criar uma política de TLS para ativar o mTLS no balanceador de carga externo

Se você usou o Método 3, pule esta etapa.

Para concluir esta tarefa, é necessário ter as seguintes permissões:

  1. Crie o arquivo YAML da política de TLS do servidor:

    cat << EOF > server_tls_policy.yaml
    name: "SERVER_TLS_POLICY_NAME"
    mtlsPolicy:
      clientValidationMode: ALLOW_INVALID_OR_MISSING_CLIENT_CERT
      clientValidationTrustConfig: projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME
    EOF
    

    Substitua:

    • SERVER_TLS_POLICY_NAME: o nome da política de TLS do servidor.
    • GCP_PROJECT: o ID do projeto do Google Cloud.
    • TRUST_CONFIG_NAME: a configuração de confiança que você criado em uma etapa anterior.

    Para informações sobre as opções de validação do cliente para clientValidationMode, consulte Modos de validação do cliente MTLS.

  2. Importe o YAML da política de TLS do servidor para o projeto do Google Cloud:

    gcloud network-security server-tls-policies import ${SERVER_TLS_POLICY_NAME?} \
      --project=GCP_PROJECT \
      --source=${PWD?}/server_tls_policy.yaml \
      --location=global
    

    Substitua GCP_PROJECT pelo ID do projeto do Google Cloud.

Depois de criar uma política TLS, ela não poderá ser modificada. Se você quiser fazer alterações em um a política de TLS, exclua a política atual e crie uma nova.

Anexar uma política de TLS a uma política HTTPS de destino

Para concluir esta tarefa, você precisa ter a permissão compute.targetHttpsProxies.get no projeto do Google Cloud de destino.

  1. Exporte o proxy HTTPS de destino atual para um arquivo local:

    gcloud compute target-https-proxies export TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --destination=${PWD?}/xlb-mtls-target-proxy.yaml
    

    Substitua:

    • TARGET_HTTPS_PROXY_NAME: o proxy HTTPS de destino.
    • GCP_PROJECT: o ID do projeto do Google Cloud.
  2. Anexe o ServerTlsPolicy à configuração do proxy HTTPS de destino:

    Para concluir esta tarefa, é necessário ter as seguintes permissões:

    echo "serverTlsPolicy:
    //networksecurity.googleapis.com/projects/GCP_PROJECT/locations/global/serverTlsPolicies/SERVER_TLS_POLICY_NAME" >> xlb-mtls-target-proxy.yaml
    

    Substitua:

    • GCP_PROJECT: o ID do projeto do Google Cloud.
    • SERVER_TLS_POLICY_NAME: a política de TLS do servidor.
  3. Atualize o proxy HTTPS de destino importando a nova configuração do arquivo local:

    gcloud compute target-https-proxies import TARGET_HTTPS_PROXY_NAME \
        --project=GCP_PROJECT \
        --global \
        --source=${PWD?}/xlb-mtls-target-proxy.yaml
    

    Substitua:

    • TARGET_HTTPS_PROXY_NAME: o proxy HTTPS de destino.
    • GCP_PROJECT: o ID do projeto do Google Cloud.

Criar um nível de acesso que exige certificados

Console

  1. Siga as instruções para criar um nível de acesso personalizado.
  2. Adicione a seguinte expressão ao seu nível de acesso personalizado:

    Se você criou uma configuração de confiança (método 1 ou método 2), adicione o seguinte: expressão no campo Condições do seu nível de acesso personalizado para usar Vinculação de atestado de ICP ao autenticar:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true
    

    Em que TLS_POLICY_FULL_RESOURCE_PATH1 e TLS_POLICY_FULL_RESOURCE_PATH2 são os caminhos que representam várias configurações de confiança: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

    É necessário fornecer pelo menos um caminho de configuração de confiança.

    Substitua:

    • GCP_PROJECT: o ID do projeto do Google Cloud.
    • TRUST_CONFIG_NAME: o nome da configuração de confiança.

    Se você usou uma conta de serviço certificado (Método 3), adicione a seguinte expressão no Condições do seu nível de acesso personalizado para usar o certificado vinculação ao autenticar:

    certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
    

gcloud

Se você criou uma configuração de confiança (método 1 ou 2), execute o comando a seguir para criar um nível de acesso personalizado que use a vinculação de atestado de PKI na autenticação:

gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
    --title=TITLE \
    --custom-level-spec=FILE \
    --description=DESCRIPTION \
    --policy=POLICY_NAME

Substitua:

  • ACCESS_LEVEL_NAME: um nome exclusivo para o nível de acesso.
  • TITLE: um título legível.
  • FILE: um arquivo YAML que contém a seguinte expressão:

    certIsPkiAttested(origin, ["TLS_POLICY_FULL_RESOURCE_PATH1", "TLS_POLICY_FULL_RESOURCE_PATH2", …]) == true

    Em que TLS_POLICY_FULL_RESOURCE_PATH1 e TLS_POLICY_FULL_RESOURCE_PATH2 são os caminhos que representam várias configurações de confiança: certificatemanager.googleapis.com/projects/GCP_PROJECT/locations/global/trustConfigs/TRUST_CONFIG_NAME.

    É necessário fornecer pelo menos um caminho de configuração de confiança.

    Substitua:

    • GCP_PROJECT: o ID do projeto do Google Cloud.
    • TRUST_CONFIG_NAME: o nome da configuração de confiança.
  • DESCRIPTION: uma descrição longa do nível de acesso.

  • POLICY_NAME: a política de acesso da sua organização.

Se você não tiver uma configuração de confiança porque está usando uma conta de serviço certificado com Verificação de endpoints (Método 3), adicione a seguinte expressão ao seu nível de acesso personalizado:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

Aplicar acesso baseado em certificado usando o Identity-Aware Proxy (IAP)

Na arquitetura de aplicativos da Web (CBA), o IAP oferece aplicação de políticas baseadas em principal para proteger aplicativos da Web contra dispositivos não confiáveis.

Siga estas etapas para ativar o IAP e configurar a política de CBA:

  1. Se você não tiver configurado o IAP, siga as instruções para configurar o IAP.
  2. Acesse o IAP para anexar o nível de acesso que você criou anteriormente:
    Acesse o IAP
  3. Selecione o recurso que você quer proteger com a CBA e clique em Configurações.
  4. No campo Níveis de acesso, insira o nome do nível de acesso que você criou.

Para usar a Google Cloud CLI para configurar uma política de CBA no IAP, consulte a documentação da Google Cloud CLI.

Configurar o navegador para selecionar o certificado automaticamente

Para que o navegador selecione automaticamente o certificado ao determinar o acesso, siga as etapas para o navegador.

Chrome

Configure a política AutoSelectCertificateForURLs do Chrome para que ele use o certificado correto durante o handshake de mTLS.

  1. Verifique se o navegador Chrome é gerenciado pelo Gerenciamento de nuvem do navegador Chrome ou pela Política de grupo do Windows:

  2. Adicione a política AutoSelectCertificateForUrls:

    1. No Admin Console, acesse Dispositivos > Chrome > Configurações > Usuário e Configurações do navegador > Certificados do cliente.
    2. Selecione uma organização.
    3. Adicione uma política AutoSelectCertificateForUrls para o URL do seu aplicativo da Web e as informações do certificado raiz.

Para mais informações, consulte a documentação do esquema da política. Veja a seguir um exemplo de configuração de política que usa o certificado da Verificação de endpoints:

{
  "pattern":"https://[*.].mysite.com",
  "Filter":{
    "ISSUER":{
      "CN":"Google Endpoint Verification"
    }
  }
}

Safari

Configure a preferência de identidade:

  1. Abra o app Acesso às Chaves e selecione Todos os itens.
  2. Selecione o certificado que você quer configurar.
  3. Clique em Arquivo > Nova preferência de identidade.
  4. Digite o URL e clique em Adicionar.

Isso cria uma nova entrada de preferência de identidade no Keychain que pode ser atualizada.

Edge

Defina a política AutoSelectCertificateForUrls Edge seguindo as instruções na documentação do Edge.