Sem autenticação no nível do gateway, qualquer requisição pode alcançar seus serviços de backend e expô-los a acessos não autorizados. A autenticação JSON Web Token (JWT) em um gateway de entrada do Alibaba Cloud Service Mesh (ASM) aplica controle de acesso centralizado para garantir que apenas requisições com JWT válido cheguem aos seus serviços.
Como funciona
O ASM usa dois recursos de segurança do Istio para aplicar a autenticação JWT no gateway:
RequestAuthentication: define como o gateway valida os JWTs recebidos, incluindo emissor, chave de assinatura e local do token na requisição. O sistema rejeita requisições com JWT inválido. Requisições sem JWT são aceitas, mas não possuem identidade autenticada.
AuthorizationPolicy: controla quais requisições devem apresentar um JWT válido. Sem essa política, requisições não autenticadas (sem token) passam livremente para seus serviços.
Esses recursos funcionam em conjunto: o RequestAuthentication valida os tokens e o AuthorizationPolicy exige sua presença. Ao configurar a autenticação JWT pelo console do ASM, o sistema gera ambos os recursos automaticamente. A etapa JWT Config cria o RequestAuthentication, enquanto a etapa Matching Rules cria o AuthorizationPolicy.
O gateway ainda rejeita requisições para caminhos não correspondentes que contenham um JWT inválido. Apenas requisições sem nenhum JWT são permitidas em caminhos não correspondentes.
Informações básicas
Os JWTs são amplamente usados para autenticar usuários. Um JWT contém informações do usuário e um campo com dados criptografados. Durante a autenticação baseada em JWT, o sistema descriptografa essas informações e as compara com os dados fornecidos para verificar a identidade do usuário. Para mais detalhes, consulte JWT.
Pré-requisitos
Antes de começar, verifique se você tem:
Configurar a autenticação JWT
A configuração consiste em duas etapas: definir as regras de validação de JWT e estabelecer as regras de correspondência que determinam quais requisições exigem autenticação.
Etapa 1: Configurar as regras de validação de JWT
Faça login no console do ASM.
No painel de navegação à esquerda, escolha Service Mesh > Mesh Management.
Na página Mesh Management, clique em nome da instância do ASM desejada.
No painel de navegação à esquerda, escolha ASM Gateways > Ingress Gateway.
Na página Ingress Gateway, clique em nome do gateway de entrada que deseja configurar.
No painel de navegação de visão geral do gateway, escolha Gateway Security > JWT certification.
-
Na etapa JWT Config, ative Enable gateway JWT authentication e configure os seguintes parâmetros:
Parâmetro
Descrição
Issuer
Entidade que emitiu o JWT. Exemplo:
testing@secure.istio.io.JWKS Source
Origem do JSON Web Key Set (JWKS) usado para verificar as assinaturas do JWT. Selecione jwks para fornecer o conjunto de chaves diretamente.
Key
Conteúdo do JWKS. Cole um objeto JSON com as chaves públicas usadas para verificar as assinaturas do JWT. Exemplo:
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}AdvancedConfig
(Opcional) Clique em AdvancedConfig para abrir a caixa de diálogo JWT Rules Advanced Options. Defina as configurações descritas na tabela abaixo e clique em OK.
Opções avançadas:
Opção
Descrição
JWTToken Position
Local onde o gateway busca o JWT nas requisições recebidas.
JWT Passthrough
Define se o gateway deve encaminhar o JWT original ao serviço upstream após a validação.
Transmit Payload through Header
Nome do header usado para encaminhar o payload decodificado do JWT ao serviço upstream.
Clique em Next.
Etapa 2: Configurar as regras de correspondência
-
Na etapa Matching Rules, configure os seguintes parâmetros: Match Mode: determina como o gateway aplica a autenticação JWT às requisições correspondentes. Matching Rules: definem quais requisições exigem (ou estão isentas de) autenticação JWT. Selecione Custom Matching Rules, ative Path e insira o caminho alvo. Por exemplo, para exigir autenticação JWT apenas para o caminho
/productpage: Com essa configuração, as requisições para/productpagedevem conter um JWT válido. Requisições para outros caminhos passam sem necessidade de JWT.Defina Match Mode como Auth If Matched.
Selecione Custom Matching Rules, ative Path e defina o caminho como
/productpage.
NotaO gateway ainda rejeita requisições para caminhos não correspondentes que contenham um JWT inválido. Apenas requisições sem nenhum JWT são permitidas em caminhos não correspondentes.
Modo
Comportamento
Auth If Matched
Requisições correspondentes devem passar pela autenticação JWT. Requisições não correspondentes não precisam de JWT.
Bypass Auth If Matched
Requisições correspondentes ignoram a autenticação JWT. Todas as outras requisições devem passar pela autenticação JWT.
Clique em Submit.
Após clicar em Submit, uma mensagem de confirmação (JWT-based authentication is successfully configured) aparece e os recursos de segurança do Istio gerados são exibidos. Clique em YAML para visualizar as configurações dos recursos.
Verificar a configuração
Execute os testes a seguir para confirmar que a autenticação JWT funciona conforme o esperado.
Preparar o token de teste
Exporte um JWT de exemplo como variável de ambiente:
TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3Uc1MI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg
Substitua <IP address of the ASM gateway> nos comandos a seguir pelo endereço IP real do seu gateway de entrada.
JWT válido em um caminho protegido
Verifique se uma requisição com JWT válido para /productpage retorna 200 OK:
curl -I http://<IP address of the ASM gateway>/productpage -H "Authorization: Bearer $TOKEN"
Resposta esperada:
HTTP/1.1 200 OK
content-type: text/html; charset=utf-8
content-length: 4294
server: istio-envoy
date: Tue, 17 Jan 2023 08:47:34 GMT
x-envoy-upstream-service-time: 17
Ausência de JWT em um caminho protegido
Confirme se uma requisição sem JWT para /productpage retorna 403 Forbidden:
curl -I http://<IP address of the ASM gateway>/productpage
Resposta esperada:
HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 17 Jan 2023 08:50:31 GMT
server: istio-envoy
JWT inválido em um caminho protegido
Valide se uma requisição com JWT inválido para /productpage retorna 401 Unauthorized:
curl -I http://<IP address of the ASM gateway>/productpage -H "Authorization: Bearer invalid token"
Resposta esperada:
HTTP/1.1 401 Unauthorized
www-authenticate: Bearer realm="http://114.55.XXX.XXX/productpage", error="invalid_token"
content-length: 79
content-type: text/plain
date: Tue, 17 Jan 2023 08:51:47 GMT
server: istio-envoy
Ausência de JWT em um caminho não protegido
Certifique-se de que uma requisição sem JWT para um caminho fora das regras de correspondência retorna 200 OK:
curl -I http://<IP address of the ASM gateway>/api/v1/products/1
Resposta esperada:
HTTP/1.1 200 OK
content-type: application/json
content-length: 195
server: istio-envoy
date: Tue, 17 Jan 2023 08:55:10 GMT
x-envoy-upstream-service-time: 16
Resumo dos resultados esperados
|
Cenário |
Caminho |
JWT |
Resultado esperado |
|
JWT válido em um caminho protegido |
|
Válido |
|
|
Ausência de JWT em um caminho protegido |
|
Nenhum |
|
|
JWT inválido em um caminho protegido |
|
Inválido |
|
|
Ausência de JWT em um caminho não protegido |
|
Nenhum |
|
Tópicos relacionados
Configurar a coleta de logs de acesso para um gateway do ASM -- Monitore o tráfego do gateway e detecte possíveis problemas de segurança.
Usar o recurso de auditoria de operações KubeAPI no ASM -- Acompanhe as operações diárias e as alterações de recursos em todo o mesh.
Configurar alertas de auditoria para operações de recursos do ASM -- Defina alertas para alterações importantes em recursos.
Configurar autenticação JWT para um gateway de entrada (baseado em YAML) -- Configure a autenticação JWT usando YAML de CRD do Istio em vez do console.