Para controlar a autenticação e a autorização em uma malha de serviços, configure a autenticação JSON Web Token (JWT) em uma ASMSecurityPolicy. Isso garante que apenas requisições com um JWT válido acessem recursos protegidos, aumentando a segurança e a privacidade na comunicação entre serviços.
Informações básicas
Um JWT contém claims, como informações do usuário, assinados digitalmente. O sistema verifica a assinatura para confirmar a autenticidade e a integridade do token e validar a identidade do usuário.
Pré-requisitos
Uma aplicação implantada no cluster adicionado à instância ASM.
-
Crie um gateway e um serviço virtual para garantir que os seguintes caminhos estejam acessíveis. Para mais informações, consulte as etapas 1 a 3 em Usar recursos do Istio para rotear tráfego com base em versões.
http://${GATEWAY_ADDRESS}/productpage http://${GATEWAY_ADDRESS}/api/v1/products/1 http://${GATEWAY_ADDRESS}/static/jquery.min.js
Procedimento
Faça login no console ASM. No painel de navegação à esquerda, escolha .
Na página Mesh Management, clique em o nome da instância ASM. No painel de navegação à esquerda, escolha .
Na página ASMSecurityPolicy, clique em Create.
-
Na caixa de diálogo Create ASMSecurityPolicy, selecione JWT e clique em OK.
-
No assistente JWT Config, configure os parâmetros e clique em Next.
Parâmetro
Exemplo
ASMSecurityPolicyName
test-jwt
Certification Rules
Issuer
testing@secure.istio.io
JWKS Source
jwks
Key
{ "keys":[ {"e":"AQAB","kid":"DHFbpoIUqrY8t2zpA2qXfCmr5VO5ZEr4RzHU_-envvQ","kty":"RSA","n":"xAE7eB6qugXyCAG3yhh7pkDkT65pHymX-P7KfIupjf59vsdo91bSP9C8H07pSAGQO1MV_xFj9VswgsCg4R6otmg5PV2He95lZdHtOcU5DXIg_pbhLdKXbi66GlVeK6ABZOUW3WYtnNHD-91gVuoeJT_DwtGGcp4ignkgXfkiEm4sw-4sfb4qdt5oLbyVpmW6x9cfa7vs2WTfURiCrBoUqgBo_-4WTiULmmHSGZHOjzwa8WtrtOQGsAFjIbno85jp6MnGGGZPYZbDAa_b3y5u-YpW7ypZrvD8BgtKVjgtQgZhLAGezMt0ua3DRrWnKqTZ0BJ_EyxOGuHJrLsn00fnMQ"}]} -
Na página Workload and Match Rules, clique em Add Workload Group. Na caixa de diálogo New Workload Group, configure os parâmetros e clique em OK. Em seguida, clique em Submit.
A tabela a seguir descreve as configurações de exemplo.
Parâmetro
Descrição
Workload Group Name
Defina o valor como test-policy.
Workload List
-
Clique em Add Workload.
-
Na caixa de diálogo Add Workload, selecione Gateway Scope.
-
Na seção Select workloads, selecione a carga de trabalho desejada e clique em o ícone
para movê-la para a seção selected. Em seguida, clique em OK.
Match Rule List
As seguintes opções de Match Mode estão disponíveis:
-
Auth If Matched: requisições correspondentes às regras devem portar um JWT válido para serem bem-sucedidas.
-
Bypass Auth If Matched: requisições correspondentes às regras podem ser bem-sucedidas sem JWT ou com um JWT válido. Requisições com JWT inválido falharão.
Neste exemplo, defina Match Mode como Auth If Matched, defina Matching Rules como Custom Matching Rules e clique em Add Match Rule para configurar as seguintes regras.
-
Regra 1: ative a chave Path e defina seu valor como /static/*.
-
Regra 2: ative a chave Path e defina seu valor como /api/*.
Na página Complete, a mensagem de sucesso ASMSecurityPolicy created successfully é exibida. Clique em View YAML para revisar a configuração do recurso ou em Complete para retornar à página ASMSecurityPolicy.
-
-
-
Verifique se a configuração de autenticação JWT está em vigor.
-
Execute os comandos a seguir para testar o acesso.
curl -I http://${GATEWAY_ADDRESS}/productpage # Returns 200. curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 # Returns 403. curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js # Returns 403. # Set the JWT. TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8iLCJzdWIiOiJ0ZXN0aW5nQHNlYcyVyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3UcMI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # The following requests all return 200. curl -I http://${GATEWAY_ADDRESS}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"Conforme as regras de configuração, requisições para caminhos que começam com
/apiou/staticprecisam portar um JWT válido para serem bem-sucedidas. Já as requisições para o caminho/productpagenão exigem JWT. Os resultados coincidem com os comentários no código e confirmam que a configuração de autenticação JWT está em vigor. -
Modifique as regras de configuração da autenticação JWT.
Na página ASMSecurityPolicy, localize a política de segurança de autenticação JWT desejada e clique em edit na coluna Operator.
No assistente JWT Config, clique em Next.
Na página Workload and Match Rules, localize o grupo de carga de trabalho desejado e clique em edit na coluna Operator.
-
Na caixa de diálogo New Workload Group, modifique os parâmetros, clique em OK e, em seguida, clique em Submit.
A tabela a seguir descreve as configurações de exemplo.
Parâmetro
Descrição
Match Mode
Selecione Bypass Auth If Matched.
Matching Rules
Remova a regra de correspondência
/api/*e mantenha apenas a regra/static/*.
-
Execute os comandos a seguir para verificar se a configuração modificada de autenticação JWT está em vigor.
curl -I http://${GATEWAY_ADDRESS}/productpage # Returns 403. curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 # Returns 403. curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js # Returns 200. # Set the JWT. TOKEN=eyJhbGciOiJSUzI1NiIsImtpZCI6IkRIRmJwb0lVcXJZOHQyenBBMnFYZkNtcjVWTzVaRXI0UnpIVV8tZW52dlEiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjQ2ODU5ODk3MDAsImZvbyI6ImJhciIsImlhdCI6MTUzMjM4OTcwMCwiaXNzIjoidGVzdGluZ0BzZWN1cmUuaXN0aW8uaW8iLCJzdWIiOiJ0ZXN0aW5nQHNlY3VyZS5pc3Rpby5pbyJ9.CfNnxWP2tcnR9q0vxyxweaF3ovQYHYZl82hAUsn21bwQd9zP7c-LS9qd_vpdLG4Tn1A15NxfCjp5f7QNBUo-KC9PJqYpgGbaXhaGx7bEdFWjcwv3nZzvc7M__ZpaCERdwU7igUmJqYGBYQ51vr2njU9ZimyKkfDe3axcyiBZde7G6dabliUosJvvKOPcKIWPccCgefSj_GNfwIip3-SsFdlR7BtbVUcqR-yv-XOxJ3UcMI0tz3uMiiZcyPV7sNCU4KRnemRIMHVOfuvHsU60_GhGbiSFzgPTAa9WTltbnarTbxudb_YEOx12JiwYToeX0DCPb43W1tzIBxgm8NxUg # The following requests all return 200. curl -I http://${GATEWAY_ADDRESS}/productpage -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/api/v1/products/1 -H "Authorization: Bearer $TOKEN" curl -I http://${GATEWAY_ADDRESS}/static/jquery.min.js -H "Authorization: Bearer $TOKEN"De acordo com as regras de configuração modificadas, requisições para caminhos que começam com
/staticpodem ser bem-sucedidas sem JWT ou com um JWT válido. Todas as demais requisições precisam portar um JWT válido para terem sucesso. Os resultados coincidem com os comentários no código e confirmam que a configuração modificada de autenticação JWT está em vigor.
-
Documentos relacionados
Para mais informações sobre os conceitos e recursos da ASMSecurityPolicy, consulte Visão geral da ASMSecurityPolicy.
Ative o recurso de auditoria de malha para rastrear operações de usuários. Também é possível configurar alertas de auditoria para operações em recursos, notificando prontamente os contatos sobre alterações em recursos importantes. Para mais informações, consulte Usar auditoria de operações KubeAPI e Configurar alertas de auditoria para operações em recursos da malha.