Nesta página, descrevemos métodos diferentes para proteger gateways no Google Kubernetes Engine (GKE). Saiba como proteger um gateway.
Como funciona a segurança do gateway
Um gateway representa o front-end de um balanceador de carga. Dependendo dos requisitos de segurança e compliance, é possível proteger o tráfego por um gateway de duas maneiras principais:
- Encerramento de TLS: o gateway encerra as conexões TLS do cliente no front-end do gateway usando certificados SSL gerenciados ou autogerenciados. O gateway pode criptografar novamente o tráfego entre o gateway e os pods de back-end usando uma BackendTLSPolicy.
- Passagem de TLS: o tráfego TLS criptografado passa diretamente pelo gateway para os pods de back-end sem que o balanceador de carga encerre ou descriptografe o tráfego. Use os recursos TLSRoute para rotear o tráfego com base no nome do host da indicação de nome do servidor (SNI, na sigla em inglês).
Nesta página, descrevemos como proteger o caminho do cliente para o gateway usando certificados enviados e gerenciados no nível do gateway e como configurar a passagem de TLS de ponta a ponta. Para saber como proteger o tráfego do gateway para o pod com o término de TLS, consulte Proteger o balanceador de carga ao tráfego de aplicativos usando TLS.
Término de TLS em comparação com passagem de TLS
O gateway do GKE é compatível com dois modos de operação de TLS distintos, dependendo se o TLS é descriptografado no balanceador de carga ou transmitido diretamente para as cargas de trabalho de back-end: término de TLS e passagem de TLS.
término de TLS
Com o término de TLS, o gateway encerra as conexões TLS dos clientes no front-end do balanceador de carga.
Ao configurar um listener de gateway com o campo tls.mode definido como
Terminate e o campo protocol definido como HTTPS, você anexa certificados TLS
diretamente ao gateway usando secrets do Kubernetes, certificados SSL ou
o Certificate Manager.
As principais características do término de TLS incluem:
- Inspeção da camada 7: como o gateway descriptografa o tráfego do cliente, ele pode avaliar os atributos de solicitação HTTP (como cabeçalhos, caminhos e métodos) e rotear o tráfego usando recursos HTTPRoute.
- Segurança de borda: permite a integração com as políticas de segurança do Google Cloud Armor, as regras do firewall de aplicativos da Web (WAF) e o armazenamento em cache de borda do Cloud CDN.
- Criptografia de back-end com BackendTLSPolicy: se as cargas de trabalho exigirem criptografia de ponta a ponta em trânsito, configure um recurso BackendTLSPolicy para criptografar novamente o tráfego entre o gateway e os pods de back-end.
O diagrama a seguir mostra como um gateway do GKE criptografa os dois
caminhos de tráfego quando você usa término de TLS com criptografia de back-end. Um cliente externo envia uma solicitação HTTPS criptografada (https://example.com) para o gateway em uma rede de nuvem privada virtual (VPC), em que o balanceador de carga encerra a conexão TLS. Em seguida, o balanceador de carga estabelece uma conexão separada e criptografada novamente para encaminhar o tráfego para os pods de back-end Store no cluster do GKE:
Além da criptografia, é possível proteger o caminho do cliente para o gateway usando políticas de autorização. As políticas de autorização permitem uma arquitetura de confiança zero, inspecionando as solicitações recebidas e aplicando o controle de acesso com base nas identidades do cliente, nos cabeçalhos HTTP e nos caminhos solicitados antes que o tráfego seja roteado para os pods de back-end.
Para mais informações sobre como configurar término de TLS e o TLS de back-end, consulte Proteger um gateway.
Passagem de TLS
Com a passagem de TLS, o gateway faz o proxy do tráfego TLS criptografado diretamente para as cargas de trabalho de back-end sem descriptografar o payload no balanceador de carga.
Quando você configura um listener de gateway com o campo tls.mode definido como
Passthrough e o campo protocol definido como TLS, o gateway não
encerra o TLS nem mantém certificados SSL. Em vez disso, o balanceador de carga inspeciona apenas
o nome do host da indicação de nome do servidor (SNI, na sigla em inglês) não criptografado no handshake de TLS ClientHello
e roteia o fluxo TCP criptografado bruto para os pods de back-end usando
recursos TLSRoute.
As principais características da passagem de TLS incluem:
- Criptografia de ponta a ponta: o tráfego permanece criptografado durante todo o trânsito do cliente para os pods de back-end. O aplicativo de back-end gerencia certificados, encerra o TLS e descriptografa o payload.
- Não é necessário gerenciar certificados no gateway: não é preciso anexar certificados ou secrets do Kubernetes ao listener do gateway.
- Proxy da camada 4: o balanceador de carga encaminha streams TCP criptografados e roteia o tráfego com base em metadados de handshake de TLS não criptografados (como o nome do host SNI) usando recursos TLSRoute.
- Compensações de segurança: a passagem de TLS funciona bem para requisitos de conformidade em que não é possível compartilhar chaves privadas com a infraestrutura em nuvem ou para protocolos não HTTP baseados em TLS. No entanto, ele impede a inspeção do balanceador de carga da camada 7 e os serviços de segurança de borda, como as regras de WAF do Google Cloud Armor.
O diagrama a seguir mostra como o gateway criptografa e roteia o tráfego do
cliente para os pods de back-end ao usar a passagem de TLS. Um cliente envia uma solicitação TLS criptografada com o nome do host SNI store.example.com para o gateway, que encaminha o stream criptografado sem descriptografia diretamente para os pods Store de destino:
Para mais informações sobre como implantar um gateway de passagem de TLS com TLSRoute, consulte Implantar um gateway de passagem de TLS.
Vantagens
É possível proteger um aplicativo de várias maneiras usando a API Gateway, que oferece flexibilidade para diferentes papéis que interagem com o gateway.
Quem é o proprietário da configuração do domínio e do TLS?
O modelo da API Gateway introduz dois papéis que usam ou implantam gateways:
- Administrador da plataforma: o operador do cluster é o administrador de clusters inteiros. Elas gerenciam políticas, acesso à rede e permissões de apps.
- Desenvolvedor de aplicativos: o desenvolvedor do aplicativo define o aplicativo e as configurações de serviço.
O diagrama a seguir mostra os campos nos recursos Gateway e HTTPRoute
que influenciam a propriedade TLS e a propriedade do domínio de dois aplicativos (store-v1 e
store-v2).
No diagrama, o operador do cluster controla:
- Quais domínios os desenvolvedores de aplicativos podem usar nos apps deles em cada namespace.
- Os certificados específicos que encerram domínios diferentes.
- Certificados fornecidos pelo proprietário do gateway.
- Se os proprietários de HTTPRoute podem especificar seus próprios nomes de host para geração de certificados.
Os desenvolvedores de aplicativos controlam o nome do host que gera um certificado, se a definição de gateway permitir.
Essa separação de tarefas operacionais permite que os desenvolvedores de aplicativos implantem e gerenciem os próprios HTTPRoute para ter um controle mais distribuído, além de permitir que os administradores da plataforma implantem e gerenciem Gateways para controle centralizado do TLS.
Gerenciamento de certificados de gateway
É possível proteger os gateways usando qualquer um dos seguintes métodos:
Se você usar os secrets do Kubernetes ou os recursos SslCertificate da
API Compute Engine, poderá anexar no máximo 15 certificados a um único gateway.
Com o Certificate Manager, é possível anexar até 10.000.000 certificados por balanceador de carga, caso você solicite um aumento de cota.
Para saber mais sobre os certificados SSL do Google Cloud , consulte Visão geral dos certificados SSL.
Secrets do Kubernetes
A
especificação da API Gateway
é compatível com o
Secrets do Kubernetes
para armazenar e anexar certificados ao Gateways. É possível associar um ou mais secrets do Kubernetes a um gateway usando o campo Gateway.spec.tls.certificateRef.
Os recursos de gateway protegidos pelo Secrets do Kubernetes têm os seguintes requisitos:
- Defina o listener de gateway
porteprotocola443eHTTPS. - Defina o campo
listener.tls.modecomoTerminate. - É preciso fazer referência às credenciais TLS no bloco
listeners.tls.
Os recursos de gateway protegidos pelo Secrets do Kubernetes têm as seguintes limitações:
- Somente listeners HTTPS encerram tráfego usando os Secrets especificados, embora é possível especificar vários listeners com uma combinação de HTTP e HTTPS.
- Se você tiver vários listeners usando HTTPS no mesmo gateway, cada um deles precisará ter um nome de host exclusivo.
- Só é possível omitir um único nome do host ou atribuir
*para cada par de porta e protocolo. - Só é possível atribuir um certificado padrão a cada gateway.
Para saber como proteger um gateway usando um secret do Kubernetes, consulte Proteger um gateway usando um secret do Kubernetes.
Certificados SSL
Os certificados SSL armazenam e enviam certificados para balanceadores de carga. Um certificado SSL pode ser autogerenciado ou gerenciado pelo Google.
- Os certificados SSL autogerenciados são obtidos, provisionados e renovados por você.
- Os certificados SSL gerenciados pelo Google são aqueles que o Google Cloud recebe, gerencia e renova automaticamente.
Para saber mais sobre as diferenças entre esses dois tipos de certificados, consulte Visão geral dos certificados SSL.
O escopo e o local do certificado SSL precisam corresponder ao escopo e ao local do gateway que está usando o certificado. Por exemplo, um certificado SSL global não pode ser usado por um gateway regional.
A tabela a seguir lista os requisitos de escopo e localização dos certificados SSL para cada GatewayClass:
| GatewayClass | Escopo do certificado SSL | Local do certificado SSL |
|---|---|---|
gke-l7-global-external-managed |
Certificado SSL global | Global |
gke-l7-global-external-managed-mc |
||
gke-l7-gxlb |
||
gke-l7-gxlb-mc |
||
gke-l7-regional-external-managed |
Certificado SSL regional | Precisa ser a mesma região do gateway |
gke-l7-regional-external-managed-mc |
||
gke-l7-cross-regional-internal-managed-mc |
||
gke-l7-rilb |
||
gke-l7-rilb-mc |
Os certificados SSL gerenciados pelo Google não são compatíveis com os gateways regionais. Para proteger gateways regionais, use o Certificate Manager.
Para saber como proteger um gateway usando um certificado SSL, consulte Proteger um gateway usando um certificado SSL.
Certificate Manager
O Certificate Manager é um local centralizado para gerenciar seus certificados TLS.
Quando você protege um gateway usando o Certificate Manager, é possível fazer o seguinte:
- Faça referência a um
CertificateMapdiretamente de um gateway que você criou no Certificate Manager. - Gerenciar seus próprios certificados.
- Melhore os tempos de propagação de certificados.
- Usar o Cloud Monitoring para certificados expirados e propagação de certificados.
O Certificate Manager é compatível com certificados SSL autogerenciados e gerenciados pelo Google. Para saber como proteger um gateway usando o Certificate Manager, consulte Proteger um gateway usando o Certificate Manager.
Compatibilidade com TLS da GatewayClass
Na tabela a seguir, descrevemos os métodos de encerramento de TLS compatíveis com o GKE para cada GatewayClass:
| GatewayClass |
gke-l7-global-external-managedgke-l7-global-external-managed-mcgke-l7-gxlbgke-l7-gxlb-mc
|
gke-l7-regional-external-managedgke-l7-regional-external-managed-mcgke-l7-rilbgke-l7-rilb-mc
|
gke-l7-cross-regional-internal-managed-mc
|
|---|---|---|---|
| TLS do cliente para o gateway | Compatível | Compatível | |
| Gateway para TLS de back-end | Compatível | Compatível | |
| Recurso de certificadoGoogle Cloud | Certificado SSL globalCertificateMap |
Certificado SSL regional | |
| Passagem de TLS (TLSRoute) | Não compatível | Compatível | Compatível |
| Certificados autogerenciados com secrets do Kubernetes | Compatível | Compatível | Não compatível |
| Certificados SSL autogerenciados do Compute Engine | Compatível | Compatível | Não compatível |
| Certificados SSL do Compute Engine gerenciados pelo Google | Compatível | Não compatível | Não compatível |
| Certificados SSL autogerenciados com o Certificate Manager | Compatível | Compatível | Compatível |
| Certificados SSL gerenciados pelo Google com o Certificate Manager | Compatível | Compatível | Compatível |
Autorização e controle de acesso
Os gateways do GKE são compatíveis com o controle de acesso baseado em identidade usando o
recurso personalizado GCPAuthzPolicy. Esse recurso permite que os administradores da plataforma
definam regras explícitas de ALLOW ou DENY para o tráfego norte-sul.
Além disso, os gateways podem ser integrados às extensões de serviço usando o recurso GCPAuthzExtension. Esse recurso permite que o gateway faça chamadas inline para mecanismos de autorização externos, personalizados ou de terceiros (como o Identity-Aware Proxy) para avaliar solicitações em tempo real.
A seguir
- Saiba como implantar um gateway de passagem de TLS.
- Saiba como proteger um gateway.
- Saiba como implantar gateways.
- Saiba mais sobre os conceitos da API Gateway.
- Saiba como configurar recursos de gateway.