Para realizar autenticação e autorização unificadas no nível do gateway, ative a autenticação JWT no gateway e garanta que apenas requisições autenticadas acessem os serviços de backend.
Background
JSON Web Token (JWT) é um mecanismo amplamente utilizado para autenticação e autorização. Um JWT contém informações do usuário e um campo que armazena dados criptografados. Descriptografe esse campo e compare-o com as informações originais do usuário para verificar a identidade. Para saber mais, consulte JWT.
Prerequisites
Procedure
Acesse o ASM console. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique no nome da instância ASM. No painel de navegação à esquerda, escolha .
Na página Ingress Gateway, clique no nome do gateway desejado.
No painel de navegação da página de visão geral do gateway, escolha Gateway Security > JWT Authentication.
-
No assistente JWT Authentication Configuration, ative o switch Enable Gateway JWT Authentication, configure os parâmetros e clique em Next.
Parameter
Description
Issuer
O emissor do JWT. Neste exemplo, o parâmetro é definido como testing@secure.istio.io.
JWKS Source
Selecione jwks.
Key
Exemplo:
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]}Advanced options
Clique em Advanced options. Na caixa de diálogo Advanced JWT Rule Options, personalize o local do token, especifique se deseja encaminhar o JWT e indique se o payload do JWT deve ser incluído no cabeçalho da requisição. Ao concluir, clique em OK.
-
No assistente Matching Rules, configure os parâmetros e envie clique em Submit.
Parameter
Description
Match Mode
Neste exemplo, a opção Selected requests must be authenticated está selecionada. Valores válidos:
-
Selected requests must be authenticated: as requisições selecionadas precisam passar pela autenticação JWT.
-
Selected requests can skip authentication: ignora a autenticação JWT para as requisições selecionadas.
Matching Rules
Selecione Custom Matching Rules, ative o switch HTTP Path e defina Path como /productpage. Essa configuração exige que as requisições para o caminho /productpage passem pela autenticação JWT. Requisições para outros caminhos podem ignorar essa autenticação.
NotaPara outras requisições, aquelas sem JWT são bem-sucedidas, mas as que apresentam um JWT inválido falham.
Após a criação da regra de autenticação, a etapa Finish do assistente exibe a mensagem Gateway JWT authentication is created e lista os recursos de segurança nativos do Service Mesh. Clique em View YAML para visualize a configuração detalhada dos recursos.
-
-
Verifique se a autenticação JWT está funcionando corretamente.
-
Defina a variável de ambiente executando o comando a seguir.
TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3UcMI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg -
Teste o acesso executando os comandos a seguir.
-
Teste 1: Acesse o caminho
/productpagecom um JWT válido.curl -I http://${ASM_GATEWAY_IP}/productpage -H "Authorization: Bearer $TOKEN"Exemplo de saída:
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 -
Teste 2: Acesse o caminho
/productpagesem um JWT.curl -I http://${ASM_GATEWAY_IP}/productpageExemplo de saída:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 17 Jan 2023 08:50:31 GMT server: istio-envoy -
Teste 3: Acesse o caminho
/productpagecom um JWT inválido.curl -I http://${ASM_GATEWAY_IP}/productpage -H "Authorization: Bearer invalid token"Exemplo de saída:
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 -
Teste 4: Acesse outro caminho sem um JWT.
curl -I http://${ASM_GATEWAY_IP}/api/v1/products/1HTTP/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
Os resultados confirmam que a autenticação JWT está funcionando conforme o esperado.
Tipo
Resultado
Acesso ao caminho
/productpagecom um JWT válidoSim
Acesso ao caminho
/productpagesem um JWTNão
Acesso ao caminho
/productpagecom um JWT inválidoNão
Acesso a outro caminho sem um JWT
Sim
-
-
Related topics
Personalize o conteúdo dos logs de acesso do ASM gateway para detectar rapidamente possíveis problemas de segurança. Para saber mais, consulte Generate and collect ASM gateway access logs.
Use o recurso de auditoria de malha para registrar e rastrear operações diárias dos usuários. Configure também alertas de auditoria para notificar contatos específicos quando recursos importantes forem modificados. Para saber mais, consulte Use KubeAPI operation audit e Configure audit alerts for mesh resource operations.
Configure a autorização de requisições JWT em um ingress gateway para exigir que as requisições carreguem um JWT ao acessar o service. Para saber mais, consulte Perform JWT request authorization for an ingress gateway in ASM.