Ativar o acesso baseado em 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 corporativos em execução 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 Google Cloud redes 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.
  • Google Cloud Balanceador de carga HTTPS: 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 usuários 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 o balanceador de carga externo HTTPS. 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 representar seu tipo de infraestrutura de chave pública (ICP).

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

É 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 verificação de endpoint (método 3).

Método 1

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

  1. Siga as etapas para criar uma AC raiz.
  2. Extraia 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. Extraia o certificado raiz, retornado no campo pemCaCertificates. O certificado é a string entre os marcadores BEGIN CERTIFICATE e END CERTIFICATE e inclui os dois marcadores.

  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. A configuração de confiança contém um repositório de confiança, que inclui o certificado raiz e dois certificados intermediários.

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

      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 Google Cloud projeto.

Se você implantar uma estrutura mais complexa com ACs intermediárias assinadas pela raiz, adicione as intermediárias 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 armazenamento de confiança básico com uma única âncora de confiança 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. A configuração de confiança contém um repositório de confiança, que inclui o certificado raiz e dois certificados intermediários.

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

    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 Google Cloud projeto.

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 Verificação de endpoints implanta automaticamente um certificado autoassinado emitido pelo Google nos seus dispositivos, e você não precisa 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 Google Cloud projeto.
    • TRUST_CONFIG_NAME: a configuração de confiança que você criou 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 do mTLS.

  2. Importe o YAML da política de TLS do servidor para o projeto 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 Google Cloud .

Depois de criar uma política TLS, não é possível modificá-la. Se você quiser fazer alterações em uma política 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 essa tarefa, você precisa ter a permissão compute.targetHttpsProxies.get no projeto 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 Google Cloud projeto.
  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 Google Cloud projeto.
    • 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 Google Cloud projeto.

Criar um nível de acesso que exija 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 2), adicione a seguinte expressão no campo Conditions do seu nível de acesso personalizado para usar vinculação de atestado de certificado de assinatura digital (PKI, na sigla em inglês) 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 Google Cloud projeto.
    • TRUST_CONFIG_NAME: o nome da configuração de confiança.

    Se você usou um certificado autoassinado emitido pelo Google (método 3), adicione a seguinte expressão no campo Condições do seu nível de acesso personalizado para usar a vinculação de certificado na autenticação:

    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 para humanos.
  • 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 Google Cloud projeto.
    • TRUST_CONFIG_NAME: o nome da configuração de confiança.
  • DESCRIPTION: uma descrição detalhada 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 um certificado autoassinado com a 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 o acesso baseado em certificado usando o Identity-Aware Proxy (IAP)

Na arquitetura de CBA para aplicativos da Web, o IAP oferece a aplicação de políticas baseadas em principal para proteger seus 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 CLI do Google Cloud para configurar uma política de CBA no IAP, consulte a documentação da CLI do Google Cloud.

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 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 > Google Chrome > Configurações > Configurações do usuário e 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 sobre o esquema de políticas. Confira abaixo um exemplo de configuração de política que usa o certificado da verificação de endpoint:

{
  "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.