Nesta página, descrevemos como ativar o acesso baseado em certificado (CBA, na sigla em inglês) para seus aplicativos da Web. Você pode usar a CBA para proteger o acesso de dispositivos confiáveis a aplicativos da Web corporativos em execução no Google Cloud.
Visão geral
A CBA para aplicativos da Web usa os recursos de acesso baseado no contexto do Chrome Enterprise Premium e Google Cloud rede para proteger o acesso usando TLS mútuo (mTLS). A seguir, veja 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 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 a Verificação de endpoint (método 3).
Método 1
Use um certificado emitido pelo Google para criar uma configuração de confiança.
- Siga as etapas para criar uma CA raiz.
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 de certificados raiz.
- CA_LOCATION: o local da CA.
Recupere o certificado raiz, retornado no campo
pemCaCertificates
. O certificado é a string entre os marcadoresBEGIN CERTIFICATE
eEND CERTIFICATE
, incluindo os dois.Salve o certificado raiz no formato PEM em um arquivo.
Crie uma configuração de confiança:
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 sua â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.
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')
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.Importe a configuração de confiança para o Gerenciador de certificados 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 sua configuração de confiança.
- GCP_PROJECT: o ID do projeto do Google Cloud .
Se você implantar uma estrutura mais complexa com CAs intermediárias assinadas pela raiz, adicione as intermediárias como intermediateCAs
.
Método 2
Use sua própria implantação de ICP com certificados atuais 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 foi especificado.
Crie uma configuração de confiança:
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 sua â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.
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')
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.Importe a configuração de confiança para o Gerenciador de certificados 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 sua 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 Verificação de endpoints implanta automaticamente um certificado autoassinado emitido pelo Google nos seus dispositivos. Não é necessário 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 essa tarefa, é necessário ter as seguintes permissões:
certificatemanager.trustconfigs.use
na configuração de confiança criada para esteServerTlsPolicy
networksecurity.serverTlsPolicies.create
no projeto Google Cloud de destino
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ê criou em uma etapa anterior.
Para informações sobre as opções de validação de cliente para
clientValidationMode
, consulte Modos de validação de cliente mTLS.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 de TLS, não é possível modificá-la. Se você quiser fazer mudanças em uma política de TLS atual, exclua a política 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.
Exporte o proxy HTTPS de destino 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 .
Adicione o
ServerTlsPolicy
à configuração do proxy HTTPS de destino:Para concluir essa tarefa, é necessário ter as seguintes permissões:
networksecurity.serverTlsPolicies.use
noServerTlsPolicy
que você criou para o proxy HTTPS de destinocompute.targetHttpsProxies.update
no projeto Google Cloud de destino
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.
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 exija certificados
Console
- Siga as instruções para criar um nível de acesso personalizado.
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 Condições do seu nível de acesso personalizado para usar a vinculação de atestado de PKI 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 sua configuração de confiança.
Se você usou um certificado autoassinado emitido pelo Google (método 3), adicione a seguinte expressão ao campo Condições do seu nível de acesso personalizado para usar a vinculação de certificado 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 seguinte comando para criar um nível de acesso personalizado que use a vinculação de atestado de PKI ao autenticar:
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 sua 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
Impor o acesso baseado em certificado usando o Identity-Aware Proxy (IAP)
Na arquitetura de CBA para aplicativos da Web, o IAP oferece aplicação de políticas baseadas em principais 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:
- Se você não tiver o IAP configurado, siga as instruções.
- Acesse o IAP para anexar o nível de acesso criado anteriormente:
Acessar o IAP - Selecione o recurso que você quer proteger com a CBA e clique em Configurações.
- No campo Níveis de acesso, insira o nome do nível de acesso que você criou.
Para usar a Google Cloud CLI e configurar uma política de CBA na 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 seu navegador.
Chrome
Configure a política do Chrome AutoSelectCertificateForURLs
para que o Chrome use
o certificado correto durante o handshake de mTLS.
Verifique se o navegador Chrome é gerenciado pelo Gerenciamento de nuvem do navegador Chrome ou pela Política de grupo do Windows:
- Windows, macOS e Linux: siga as etapas para configurar um perfil gerenciado do Chrome.
- Chrome: registre o dispositivo na empresa.
Adicione a política
AutoSelectCertificateForUrls
:- No Admin Console, acesse Dispositivos > Chrome > Configurações > Configurações do navegador e usuário > Certificados do cliente.
- Selecione uma organização.
- Adicione uma política
AutoSelectCertificateForUrls
ao URL do seu aplicativo da Web e informações do certificado raiz.
Para mais informações, consulte a documentação sobre o esquema de política. Confira 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:
- Abra o app Acesso às Chaves e selecione Todos os itens.
- Selecione o certificado que você quer configurar.
- Clique em Arquivo > Nova preferência de identidade.
- 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 do AutoSelectCertificateForUrls
Edge seguindo as instruções
na documentação do Edge.