Segurança do serviço

Este documento fornece uma visão geral da segurança de serviço com o Traffic Director. É destinado a usuários do Traffic Director que querem adicionar autenticação, criptografia e autorização às implantações. Neste documento, presumimos que você esteja familiarizado com o Traffic Director com Envoy e com aplicativos gRPC sem proxy.

O Traffic Director permite proteger comunicações de serviço a serviço na malha. Na malha, cada serviço tem uma identidade. Os recursos a seguir ajudam a oferecer suporte a comunicações seguras:

  • Autenticação e criptografia que usam o Transport Layer Security (TLS) e o TLS mútuo (mTLS, na sigla em inglês) para o Traffic Director com o Envoy e o Traffic Director com aplicativos gRPC sem proxy. As políticas de TLS do cliente e as políticas de TLS do servidor controlam se os serviços precisam comprovar as identidades deles e usar canais de comunicação criptografados.
  • Autorização, com base nas características do cliente e da solicitação. As políticas de autorização controlam se um serviço tem permissão para acessar outro serviço e quais ações são permitidas.

Além disso, o uso de certificados e chaves fornecidos por uma autoridade certificadora (CA, na sigla em inglês) particular, o Certificate Authority Service do Google, facilita a manutenção da segurança do serviço. O serviço de CA fornece certificados de malha do GKE. O recurso de certificados de malha do GKE e o Traffic Director permitem implantar automaticamente esses certificados e fazer com que as cargas de trabalho os usem. Modifique os pods para permitir que as cargas de trabalho recebam e usem credenciais mTLS. No momento, a segurança do serviço Traffic Director está disponível apenas para cargas de trabalho baseadas no GKE.

Em arquiteturas modernas baseadas em microsserviços, serviços menores e mais focados substituem aplicativos monolíticos grandes. As chamadas de serviço se comunicam entre si pela rede. Essas chamadas, que eram em processo em aplicativos monolíticos, apresentam desafios de segurança. Portanto, é melhor autenticar, criptografar e autorizar as chamadas. Essas etapas são suportam o princípio de confiança zero, em que todo o tráfego de rede é considerado como estando em risco, independentemente de o tráfego ser originado dentro ou fora da rede.

O padrão de design da malha de serviço separa a complexidade relacionada às comunicações de serviço a serviço da lógica de negócios. Isso fica por conta do plano de dados. Além de reduzir a complexidade do aplicativo, o padrão de design da malha de serviço permite padrões de segurança que podem ser difíceis de implementar e gerenciar.

Neste modelo, os arquivos secundários gRPC ou Envoy sem proxy autenticam e criptografam com segurança as comunicações ao receber informações de configuração do Traffic Director e de certificados de um pool de serviços de CA.

Esses recursos de segurança facilitam o processo de implantação do Traffic Director fornecendo o seguinte:

  • Provisionamento automático de chaves e certificados para todos os serviços na sua malha.
  • Rotação automática de chaves e certificados para fornecer segurança adicional.
  • Integração com o Google Kubernetes Engine (GKE) para usar todos os recursos, como descritores e rótulos de implantação.
  • Alta disponibilidade dos serviços gerenciados pelo Google, incluindo o Traffic Director e os pools de autoridades certificadoras particulares gerenciadas pelo serviço de CA.
  • Segurança vinculada ao Google Identity and Access Management (IAM): autorização de serviço com base em contas de serviço autorizadas do Google.
  • Interoperabilidade perfeita com suas cargas de trabalho baseadas em Envoy e sem proxy. Por exemplo, um serviço pode estar atrás de um proxy Envoy, mas o cliente usa segurança de malha de serviço sem proxy do gRPC. Por outro lado, um serviço pode estar por trás da segurança da malha de serviço sem proxy do gRPC, mas o cliente usa um proxy Envoy.

Comunicações seguras entre serviços

O Traffic Director oferece autorização e segurança de serviço a serviço com criptografia e autenticação que usam TLS. As políticas de TLS do cliente e as políticas de TLS do servidor permitem aos serviços:

  • Declarar e validar as identidades.
  • Criptografar sessões de comunicação usando TLS ou mTLS.

Em uma malha de serviço, o plano de dados cuida desse tipo de segurança para que os aplicativos não precisem fazer provisionamentos especiais para serem seguros.

As políticas de autorização permitem negar ou permitir acesso de acordo com as regras que você definir.

Usar TLS para criptografia

Quando um serviço chama em outro serviço usando o protocolo HTTP, HTTP/2 ou gRPC, o tráfego que transita pela rede está em texto simples. Esse tráfego pode estar sujeito a ataques person-in-the-middle, em que um invasor intercepta o tráfego e inspeciona ou manipula o conteúdo dele.

Para atenuar esse possível problema, use HTTP, HTTP/2 ou gRPC por TLS com o Traffic Director. Quando você usa esse protocolos em vez TLS, o tráfego entre o cliente e o servidor é criptografado usando TLS baseado no certificado do servidor. O tráfego não está mais em texto simples, reduzindo a probabilidade de um invasor interceptar e inspecionar ou manipular seu conteúdo.

Usar TLS para autenticação

Quando um serviço faz chamadas em outro serviço, considere as seguintes perguntas:

  • Como um cliente sabe que está recebendo uma resposta do servidor correto e não de um impostor? Por exemplo, em uma interação comum de solicitação/resposta com base em HTTP, o cliente não verifica a identidade do servidor.

  • O que acontece se um invasor interceptar esse tráfego? Por exemplo, o tráfego HTTP não é criptografado, então qualquer pessoa que receba o tráfego pode inspecionar o conteúdo. Isso é conhecido como ataque "person-in-the-middle".

Para atenuar esses problemas, use HTTP, HTTP/2 e gRPC em TLS. Nessas trocas entre um cliente e um servidor, o servidor precisa usar um certificado de servidor para provar a identidade dele ao cliente. As solicitações e as respostas são criptografadas usando TLS.

Autenticação TLS mútua

Quando o Traffic Director configura a rede de aplicativos para o cliente e para o servidor, por exemplo, configurando um proxy Envoy no lado do cliente e outro proxy Envoy no lado do servidor, é possível aproveitar os padrões de autenticação avançada como autenticação mútua.

Em uma troca HTTP em vez TLS típica, que não é baseada na autenticação mútua, o servidor tem um certificado que usa para criptografar as comunicações entre o cliente e o servidor. O cliente pode verificar a identidade do servidor verificando a assinatura que o servidor envia de volta durante o handshake de TLS. No entanto, o servidor não verifica a identidade do cliente.

Quando a autenticação mútua está ativada, o cliente também tem um certificado. O cliente verifica a identidade do servidor, conforme descrito no parágrafo anterior, e o servidor também pode verificar a identidade do cliente. Os certificados do cliente e do servidor são usados para criptografar o canal de comunicação. Isso também permite que o servidor autorize clientes com base na identidade verificada do cliente.

Autenticação TLS mútua (mTLS) em uma malha de serviço.
Autenticação TLS mútua (mTLS) em uma malha de serviço (clique para ampliar)

Autorizar chamadas de serviço

Você pode permitir ou negar o acesso ao serviço usando políticas de autorização. Com o Traffic Director, é possível definir regras de permissão e negação para autorizar o acesso com base nos parâmetros de solicitação. Você pode basear essas regras nos parâmetros da camada 3 e da camada 7, incluindo o ID do cliente, que é derivado do client-cert em uma conexão mTLS, endereço IP de origem, correspondência de host, correspondência de método e correspondência de cabeçalho. O diagrama a seguir mostra a autorização com os proxies do Envoy. O processo é semelhante com os clientes gRPC.

Autorização em uma malha de serviço
Autorização em uma malha de serviço usando o Envoy (clique para ampliar)

Restringir o acesso usando autorização

Uma prática recomendada em uma malha de serviço é seguir o princípio do menor privilégio. É possível aderir a esse princípio restringindo o acesso de serviço apenas aos autores da chamada que dependem do serviço. Quando um autor da chamada tenta acessar um serviço sem autorização, a tentativa é rejeitada.

Com o Traffic Director, é possível configurar políticas de autorização que permitem que seu plano de dados permita/recuse acesso ao serviço com base nas regras que você definir. Essas políticas consistem em dois componentes:

  • Uma ação: permitir ou negar
  • Uma lista de regras

Quando uma solicitação ou RPC é enviada, o cliente do Traffic Director no serviço chamado determina se há uma correspondência de regra. Se uma correspondência for encontrada, a solicitação ou a RPC será permitida ou negada. Você pode definir uma regra para corresponder a atributos, como estes:

  • Quando a mTLS for usada, a conta de serviço do Kubernetes do serviço de chamada
  • O endereço IP ou o intervalo de endereços do serviço de chamada
  • Portas de serviço de destino
  • Os atributos HTTP da solicitação, incluindo nomes de host, métodos e cabeçalhos HTTP definidos pelo usuário.

Nomenclatura segura

Como um mecanismo de segurança adicional, você pode configurar a nomenclatura segura com o Traffic Director. Isso permite que você defina uma lista de nomes permitidos ou identidades do SPIFFE (Secure Production Identity Framework para todos) para um determinado serviço ao qual um cliente está tentando se conectar. Durante a troca de TLS, o back-end do serviço retorna um certificado X.509 para o cliente. Em seguida, o cliente inspeciona o certificado para confirmar se o certificado X.509 corresponde a uma das identidades de nomes/SPIFFE. Para mais informações sobre as identidades do SPIFFE, consulte Framework de identidade de produção segura para todos.

Proteja o tráfego em um gateway

Para configurar os gateways, use o Traffic Director. Um gateway é um proxy Envoy autônomo que normalmente atua como um dos seguintes:

  • Um gateway de entrada que processe o tráfego que está entrando em uma malha ou outro domínio
  • Um gateway de saída que processa o tráfego que sai de uma malha ou algum outro domínio
  • Um proxy reverso ou proxy intermediário que distribui o tráfego de entrada entre um ou mais serviços.

Os clientes que querem enviar tráfego para a malha ou para fora dela malham no gateway. Em seguida, o gateway processa as solicitações de acordo com as regras que você configurou com o Traffic Director. Por exemplo, é possível impor que o tráfego entre na malha (pelo gateway de entrada) seja criptografado usando TLS.

Componentes de segurança

A segurança do serviço Traffic Director é compatível com políticas de TLS do cliente, do TLS do servidor e de autorização. Crie essas políticas para que o Traffic Director possa configurar o plano de dados e ativar os recursos de segurança. Para criar ou atualizar essas políticas, não é necessário fazer alterações nos aplicativos.

Modos de criptografia e autenticação compatíveis

Quando um serviço chama outro, a primeira etapa para estabelecer comunicações seguras é fazer com que cada serviço prove sua identidade para o outro serviço. O grau em que um serviço precisa provar a própria identidade é baseado no modo TLS que você configura.

É possível configurar os seguintes níveis de segurança:

  • Não criptografado/não autenticado
  • TLS
  • TLS mútuo (mTLS)
  • Permissivo: mTLS ou não criptografado/não autenticado, dependendo de como o cliente inicia a conexão

Certificados e Autoridades de certificação

Os certificados e uma autoridade de certificação (CA) confiável fornecem a base para a confiança em um sistema distribuído, como uma malha de serviço. Usando certificados, os serviços podem provar as identidades deles e verificar as identidades apresentadas a les das seguintes maneiras:

  • Um serviço que quer provar a identidade para outro serviço apresenta seu certificado a outro serviço. Uma CA em que ambos os serviços confiam assinam e emitem este certificado contando com criptografia.
  • O serviço que recebe esse certificado pode verificar se o certificado foi emitido por uma CA de confiança.

O Traffic Director não é uma autoridade de certificação. Para ativar as comunicações seguras, configure um mecanismo que:

  • Provisione identidades e certificados
  • Disponibilize os certificados para clientes do Traffic Director, como proxies Envoy, que o Traffic Director configura

O Traffic Director é compatível com o serviço de CA do Google. Os guias de configuração do Envoy e do gRPC sem proxy incluem instruções para configurar isso. Para mais detalhes, consulte A seguir.

Arquitetura e recursos

O Traffic Director inclui o namespace da API Network Security, que consiste em três recursos da API do Google Cloud que permitem especificar as políticas de segurança que precisam ser aplicadas ao plano de dados.

Dois recursos da API do Google Cloud são compatíveis com a autenticação na malha: políticas de TLS do cliente e políticas de TLS do servidor. Um terceiro recurso, a política de autorização, é compatível com a autorização.

O namespace da API Network Services inclui o recurso de política de endpoint, que permite ao Traffic Director fornecer configuração (TLS do servidor, TLS do cliente e políticas de autorização) para endpoints. Endpoints são clientes do Traffic Director que encerram uma comunicação de entrada de outro cliente do Traffic Director.

Política de TLS do cliente

Uma política de TLS do cliente permite especificar o modo TLS do cliente e as informações do provedor de certificados a serem aplicadas ao plano de dados. As políticas de TLS do cliente são compatíveis com a autenticação TLS e mTLS. As políticas de TLS do cliente precisam ser anexadas a um recurso de serviço de back-end global.

Ao configurar o TLS, é necessário fornecer um mecanismo pelo qual o cliente valide o certificado recebido do servidor durante a troca de TLS usando o campo da API serverValidationCa. O cliente usa essas informações para conseguir um certificado de validação que pode ser usado para validar o certificado do servidor.

Ao configurar o mTLS, você também precisa fornecer um mecanismo pelo qual o cliente receba o certificado e a chave privada usando o campo da API clientCertificate. O cliente usa essas informações para apresentar um certificado ao servidor durante o handshake de TLS.

Nesta versão, o Traffic Director suporta uma autoridade certificadora gerenciada, o serviço de CA. A configuração é simples: você especifica o nome do plug-in google_cloud_private_spiffe ao configurar o provedor de certificado. Isso faz com que os clientes xDS carreguem certificados e chaves de um local estático. Como pré-requisitos, configure pools de serviços de CA e ative certificados de malha no cluster do GKE.

Política de TLS do servidor

Uma política de TLS do servidor (recurso ServerTlsPolicy) permite especificar o modo TLS do servidor e as informações do provedor de certificados a serem aplicadas ao plano de dados. As políticas de TLS do servidor são compatíveis com TLS, mTLS e, apenas com o Envoy, autenticação Open_or_mTLS. As políticas de TLS do servidor são anexadas a um recurso de política de endpoint.

Nomes alternativos do requerente

Ao configurar o campo securitySettings de um serviço de back-end global, é possível fornecer uma lista de nomes alternativos do assunto no campo subjectAltNames. Quando um cliente inicia um handshake de TLS com um dos back-ends do serviço, o servidor apresenta o certificado X.509. O cliente inspeciona o campo subjectAltName do certificado. Se o campo contiver um dos valores especificados, a comunicação continuará. Esse mecanismo é descrito anteriormente em Nomenclatura segura.

Política de autorização

Uma política de autorização (recurso AuthorizationPolicy) especifica como um servidor autoriza solicitações de entrada ou RPCs. Ela pode ser configurada para permitir ou negar uma solicitação de entrada ou RPC com base em vários parâmetros, como a identidade do cliente que enviou a solicitação, o host, os cabeçalhos e outros atributos HTTP. Você anexa políticas de autorização a um recurso de política de endpoint.

Limitações

A segurança do serviço do Traffic Director é compatível apenas com o GKE. Não é possível implantar a segurança do serviço com o Compute Engine.

Limitações com aplicativos gRPC sem proxy

A segurança de serviços gRPC sem proxy tem as seguintes limitações:

  • Esta versão é limitada a Java, Python, C ++ e Go.

A seguir