Ative o acesso baseado em certificados para aplicações Web

Esta página descreve como ativar o acesso baseado em certificados (CBA) para as suas aplicações Web. Pode usar a CBA para proteger o acesso de dispositivos fidedignos a aplicações Web empresariais em execução no Google Cloud.

Vista geral

A CBA para aplicações Web usa as funcionalidades de acesso sensível ao contexto do Chrome Enterprise Premium e a Google Cloud rede para proteger o acesso através do TLS mútuo (mTLS). Seguem-se os principais componentes com os quais trabalha para ativar a CBA para aplicações Web:

  • Gestor de acesso sensível ao contexto: permite-lhe criar níveis de acesso que requerem certificados quando determinam o acesso a aplicações Web.
  • Identity-Aware Proxy (IAP): autentica o acesso dos utilizadores a aplicações Web.
  • Google Cloud Balanceador de carga HTTPS: fornece autenticação mútua (mTLS) entre os utilizadores e as aplicações Web.
  • Política do Chrome Enterprise: fornece autenticação mútua (mTLS) entre os utilizadores e as aplicações Web quando usam o navegador Chrome.

Antes de começar

Verifique se tem uma versão atual da CLI gcloud executando o seguinte comando:

gcloud components update

Configure o mTLS para o balanceador de carga HTTPS externo

Siga as instruções para configurar o balanceador de carga externo HTTPS. Tome nota do nome do proxy HTTPS de destino que é criado, porque vai precisar dele num passo posterior.

Crie uma configuração de confiança

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

Para concluir esta tarefa, tem de ter a autorização certificatemanager.trustconfigs.create no projeto Google Cloud de destino.

Pode criar uma configuração de confiança com um certificado emitido pela Google (método 1), com o seu próprio certificado (método 2) ou com um certificado autoassinado com a validação de pontos finais (método 3).

Método 1

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

  1. Conclua os passos para criar uma AC raiz.
  2. Obtenha o conteúdo do ficheiro PEM:

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

    Substitua o seguinte:

    • ROOT_CA_ID: o ID do certificado de raiz.
    • POOL_ID: o ID do conjunto do certificado de raiz.
    • CA_LOCATION: a localização CA.
  3. Obtenha o certificado de raiz, devolvido no campo pemCaCertificates. O certificado é a string entre os marcadores BEGIN CERTIFICATE e END CERTIFICATE e inclui ambos os marcadores.

  4. Guarde o certificado de raiz no formato PEM num ficheiro.

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

    1. Defina as seguintes variáveis de ambiente:

      ROOT_PEM_FILE=TRUST_ANCHOR_PATH
      INT_PEM_FILE1=IM_CERT_PATH
      INT_PEM_FILE2=SECOND_IM_CERT_PATH
      

      Substitua o seguinte:

      • TRUST_ANCHOR_PATH: o caminho para a âncora de confiança codificada em PEM.
      • IM_CERT_PATH: o caminho para o certificado intermédio codificado em PEM.
      • SECOND_IM_CERT_PATH: o caminho para o seu segundo certificado intermédio codificado em PEM.
    2. Prepare o conteúdo do ficheiro 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 ficheiro 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
      

      Este ficheiro YAML define uma configuração de confiança denominada TRUST_CONFIG_NAME. A configuração de fidedignidade contém uma loja de fidedignidade, que inclui o certificado de raiz e dois certificados intermédios.

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

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

      Substitua o seguinte:

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

Se implementar uma estrutura mais complexa com ACs intermédias assinadas pela AC raiz, certifique-se de que adiciona as ACs intermédias como intermediateCAs.

Método 2

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

Este tipo de configuração de confiança pressupõe uma loja de confiança básica com uma única âncora de confiança que representa um certificado de raiz. Não foram especificados certificados intermédios.

Crie uma configuração de confiança:

  1. Defina as seguintes variáveis de ambiente:

    ROOT_PEM_FILE=TRUST_ANCHOR_PATH
    INT_PEM_FILE1=IM_CERT_PATH
    INT_PEM_FILE2=SECOND_IM_CERT_PATH
    

    Substitua o seguinte:

    • TRUST_ANCHOR_PATH: o caminho para a âncora de confiança codificada em PEM.
    • IM_CERT_PATH: o caminho para o certificado intermédio codificado em PEM.
    • SECOND_IM_CERT_PATH: o caminho para o seu segundo certificado intermédio codificado em PEM.
  2. Prepare o conteúdo do ficheiro 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 ficheiro 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
    

    Este ficheiro YAML define uma configuração de confiança denominada TRUST_CONFIG_NAME. A configuração de fidedignidade contém uma loja de fidedignidade, que inclui o certificado de raiz e dois certificados intermédios.

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

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

    Substitua o seguinte:

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

Método 3

Se estiver a usar um navegador Chrome e quiser usar um certificado autoassinado com a validação de pontos finais, siga as instruções nesta secção.

Siga as instruções para implementar a validação de pontos finais para a sua organização. A validação de pontos finais implementa automaticamente um certificado autoassinado emitido pela Google nos seus dispositivos, e não tem de criar uma configuração de confiança.

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

Se usou o Método 3, pode ignorar este passo.

Para concluir esta tarefa, tem de ter as seguintes autorizações:

  1. Crie o ficheiro 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 o seguinte:

    • SERVER_TLS_POLICY_NAME: O nome da política TLS do servidor.
    • GCP_PROJECT: O Google Cloud ID do projeto.
    • TRUST_CONFIG_NAME: a configuração de confiança que criou num passo anterior.

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

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

Depois de criar uma política de TLS, não a pode modificar. Se quiser fazer alterações a uma política de TLS existente, elimine a política de TLS existente e crie uma nova.

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

Para concluir esta tarefa, tem de ter a autorização compute.targetHttpsProxies.get no projeto Google Cloud de destino.

  1. Exporte o proxy HTTPS de destino existente para um ficheiro local:

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

    Substitua o seguinte:

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

    Para concluir esta tarefa, tem de ter as seguintes autorizações:

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

    Substitua o seguinte:

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

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

    Substitua o seguinte:

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

Crie um nível de acesso que exija certificados

Consola

  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 criou uma configuração de confiança (método 1 ou método 2), adicione a seguinte expressão no campo Condições do seu nível de acesso personalizado para usar a associação de atestação de infraestrutura de chaves públicas (PKI) durante a autenticaçã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.

    Tem de indicar, pelo menos, um caminho de configuração de confiança.

    Substitua o seguinte:

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

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

    certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE
    

gcloud

Se criou uma configuração de confiança (método 1 ou método 2), execute o seguinte comando para criar um nível de acesso personalizado que use a associação de atestação de infraestrutura de chaves públicas (PKI) durante a autenticação:

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

Substitua o seguinte:

  • ACCESS_LEVEL_NAME: um nome exclusivo para o nível de acesso.
  • TITLE: um título legível.
  • FILE: um ficheiro 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.

    Tem de indicar, pelo menos, um caminho de configuração de confiança.

    Substitua o seguinte:

    • GCP_PROJECT: O Google Cloud ID do 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 não tiver uma configuração de confiança, porque está a usar um certificado autoassinado com a validação de pontos finais (método 3), adicione a seguinte expressão ao seu nível de acesso personalizado:

certificateBindingState(origin, device) == CertificateBindingState.CERT_MATCHES_EXISTING_DEVICE

Aplique o acesso baseado em certificados através do Identity-Aware Proxy (IAP)

Na CBA para arquitetura de aplicações Web, a IAP fornece aplicação de políticas baseada em principais para proteger as suas aplicações Web de dispositivos não fidedignos.

Conclua os passos seguintes para ativar as IAP e configurar a política de CBA:

  1. Se não tiver a CAs configurada, siga as instruções para configurar a CAs.
  2. Aceda ao IAP para anexar o nível de acesso que criou anteriormente:
    Aceda ao IAP
  3. Selecione o recurso que quer proteger com a CBA e, de seguida, clique em Definições.
  4. No campo Níveis de acesso, introduza o nome do nível de acesso que 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.

Configure o navegador para selecionar automaticamente o certificado

Para que o navegador selecione automaticamente o certificado ao determinar o acesso, conclua os passos para o seu navegador.

Chrome

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

  1. Certifique-se de que o navegador Chrome é gerido pelo Chrome Browser Cloud Management ou pela Política de grupo do Windows:

  2. Adicione a política AutoSelectCertificateForUrls:

    1. Na consola do administrador, aceda a Dispositivos > Chrome > Definições > Definições de utilizadores e navegadores > Certificados de cliente.
    2. Selecione uma organização.
    3. Adicione uma AutoSelectCertificateForUrlspolítica para o URL da sua aplicação Web e informações do certificado de raiz.

Para mais informações, consulte a documentação sobre o esquema de políticas. Segue-se um exemplo de configuração de política que usa o certificado da validação de pontos finais:

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

Safari

Configure a preferência de identidade:

  1. Abra a app Keychain Access e, de seguida, selecione Todos os itens.
  2. Selecione o certificado que quer configurar.
  3. Clique em Ficheiro > Nova preferência de identidade.
  4. Introduza o URL e clique em Adicionar.

Esta ação cria uma nova entrada de preferência de identidade no seu porta-chaves que pode atualizar.

Edge

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