Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

āĻŦāĻŋāĻƒāĻĻā§āĻ°āĻƒ. āĻ…āĻ¨ā§āĻŦāĻžāĻĻ: āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļ āĻāĻ‡ āĻ¸āĻŋāĻ°āĻŋāĻœāĻŸāĻŋ Istio-āĻāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻœāĻžāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻ•āĻ°ā§āĻŽā§‡ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻŦā§‡āĻĻāĻŋāĻ¤ āĻ›āĻŋāĻ˛, āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ - āĻ¸ā§‚āĻ•ā§āĻˇā§āĻŽāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ° āĻ•āĻ°āĻž āĻ°āĻžāĻ‰āĻŸāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻŸā§āĻ°āĻžāĻĢāĻŋāĻ• āĻŦā§āĻ¯āĻŦāĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĨ¤ āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻĨāĻž āĻŦāĻ˛āĻŦ: āĻāĻŸāĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•āĻŋāĻ¤ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻ˛ā§‡āĻ–āĻ• Auth0 āĻĒāĻ°āĻŋāĻšāĻ¯āĻŧ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨, āĻ¤āĻŦā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€ āĻāĻ•āĻ‡āĻ­āĻžāĻŦā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ Kubernetes āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž Istio āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨, āĻ¸ā§‡āĻ¨ā§āĻŸāĻŋāĻŽā§‡āĻ¨ā§āĻŸ āĻ…ā§āĻ¯āĻžāĻ¨āĻžāĻ˛āĻžāĻ‡āĻ¸āĻŋāĻ¸, Istio āĻāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯āĨ¤

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡, āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ›ā§‹āĻŸ āĻ°āĻžāĻ–āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ•āĻžāĻ°āĻŖ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšā§‡āĻˇā§āĻŸāĻž, āĻŸāĻžāĻ‡āĻŽāĻ†āĻ‰āĻŸ, āĻ¸āĻžāĻ°ā§āĻ•āĻŋāĻŸ āĻŦā§āĻ°ā§‡āĻ•āĻžāĻ°, āĻŸā§āĻ°ā§‡āĻ¸āĻŋāĻ‚, āĻŽāĻ¨āĻŋāĻŸāĻ°āĻŋāĻ‚ āĻāĻ° āĻŽāĻ¤ā§‹ āĻ¸ā§āĻ¤āĻ°āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡ā§ˇ āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ†āĻŽāĻ°āĻž āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻžāĻ° āĻ•ā§ŒāĻļāĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›āĻŋ: A/B āĻŸā§‡āĻ¸ā§āĻŸāĻŋāĻ‚, āĻŽāĻŋāĻ°āĻ°āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ•ā§āĻ¯āĻžāĻ¨āĻžāĻ°āĻŋ āĻ°ā§‹āĻ˛āĻ†āĻ‰āĻŸāĨ¤

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

āĻ¨āĻ¤ā§āĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ā§‡, āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ• āĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° āĻĒāĻĨā§‡ āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻ¸ā§āĻ¤āĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽā§‹āĻ•āĻžāĻŦāĻŋāĻ˛āĻž āĻ•āĻ°āĻŦ: āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ - āĻāĻŦāĻ‚ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“āĻ¤ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ•āĻžāĻ°ā§‡āĻ° āĻ†āĻ¨āĻ¨ā§āĻĻ!

Istio āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨

āĻ†āĻŽāĻŋ āĻ•āĻ–āĻ¨āĻ‡ āĻŦāĻŋāĻļā§āĻŦāĻžāĻ¸ āĻ•āĻ°āĻ¤āĻžāĻŽ āĻ¨āĻž āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ…āĻ¨ā§āĻĒā§āĻ°āĻžāĻŖāĻŋāĻ¤ āĻšāĻŦāĨ¤ āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻŽāĻœāĻžāĻĻāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻŦā§‡āĻļāĻŋ āĻ•āĻ°ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻĒā§āĻ°ā§‡āĻ°āĻŖāĻžāĻŽā§‚āĻ˛āĻ• āĻ•āĻ°āĻ¤ā§‡ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ° āĻĻā§ƒāĻˇā§āĻŸāĻŋāĻ•ā§‹āĻŖ āĻĨā§‡āĻ•ā§‡ Istio āĻ•ā§€ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡?

āĻ‰āĻ¤ā§āĻ¤āĻ°āĻŸāĻŋ āĻ¸āĻšāĻœ: Istio āĻāĻ‡ āĻ•ā§āĻˇāĻŽāĻ¤āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻĨā§‡āĻ•ā§‡ āĻĻā§‚āĻ¤ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋāĻ° āĻ•āĻžāĻ›ā§‡ āĻĻāĻžāĻ¯āĻŧāĻŋāĻ¤ā§āĻŦ āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§‡ā§ˇ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒā§ŒāĻāĻ›āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•ā§ƒāĻ¤ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¯āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¤āĻž āĻšāĻ˛ āĻŦā§āĻ¯āĻŦāĻ¸āĻž-āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€ āĻ•ā§‹āĻĄ āĻ˛āĻŋāĻ–āĻ¤ā§‡ā§ˇ

āĻ­āĻžāĻ˛ āĻļā§‹āĻ¨āĻžāĻšā§āĻ›ā§‡? āĻāĻ° āĻ­āĻŋāĻ¤āĻ°ā§‡ āĻāĻ•āĻŦāĻžāĻ° āĻĻā§‡āĻ–ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ•!

Auth0 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ

āĻĒāĻ°āĻŋāĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž Auth0 āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ, āĻ¯āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻžāĻ¯āĻŧāĻžāĻ˛ āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡, āĻāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸ā§āĻŦāĻœā§āĻžāĻžāĻ¤ āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻāĻŸāĻŋ āĻĒāĻ›āĻ¨ā§āĻĻ āĻ•āĻ°āĻŋāĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻāĻ•āĻ‡ āĻ¨ā§€āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§āĻ¯ āĻ¯ā§‡ āĻ•ā§‹āĻ¨āĻ“ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ OpenID āĻ•āĻžāĻ¨ā§‡āĻ•ā§āĻŸ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨: āĻ•ā§€āĻ•ā§āĻ˛ā§‹āĻ•, āĻ†āĻ‡āĻĄā§‡āĻ¨ā§āĻŸāĻŋāĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§āĨ¤

āĻĒā§āĻ°āĻĨāĻŽ, āĻ¯āĻžāĻ¨ Auth0 āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻĻāĻŋāĻ¯āĻŧā§‡, āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻĄāĻŧāĻžāĻŸā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ (āĻ­āĻžāĻĄāĻŧāĻžāĻŸāĻŋāĻ¯āĻŧāĻž - "āĻ­āĻžāĻĄāĻŧāĻžāĻŸā§‡", āĻŦāĻŋāĻšā§āĻ›āĻŋāĻ¨ā§āĻ¨āĻ¤āĻžāĻ° āĻ¯ā§ŒāĻ•ā§āĻ¤āĻŋāĻ• āĻ‡āĻ‰āĻ¨āĻŋāĻŸ, āĻ†āĻ°āĻ“ āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§‡āĻ–ā§āĻ¨ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ - āĻĒā§āĻ°āĻžāĻ¯āĻŧ. āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĨ¤) āĻāĻŦāĻ‚ āĻ¯āĻžāĻ¨ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ > āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ…ā§āĻ¯āĻžāĻĒāĻĒāĻ›āĻ¨ā§āĻĻ āĻĄā§‹āĻŽā§‡āĻ‡āĻ¨, āĻ¨ā§€āĻšā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¨āĻļāĻŸā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻāĻ‡ āĻĄā§‹āĻŽā§‡āĻ¨āĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ– āĻ•āĻ°ā§āĻ¨ resource-manifests/istio/security/auth-policy.yaml (āĻ¸ā§‚āĻ¤ā§āĻ°):

apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: auth-policy
spec:
  targets:
  - name: sa-web-app
  - name: sa-feedback
  origins:
  - jwt:
      issuer: "https://{YOUR_DOMAIN}/"
      jwksUri: "https://{YOUR_DOMAIN}/.well-known/jwks.json"
  principalBinding: USE_ORIGIN

āĻ¯ā§‡āĻŽāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻĻ āĻ¸āĻ™ā§āĻ—ā§‡, āĻĒāĻžāĻ‡āĻ˛āĻŸ (Istio-āĻāĻ° āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻŽā§ŒāĻ˛āĻŋāĻ• āĻ•āĻ¨ā§āĻŸā§āĻ°ā§‹āĻ˛ āĻĒā§āĻ˛ā§‡āĻ¨ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ - āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĨ¤) āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĢāĻ°ā§‹āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§‚āĻ¤āĻ•ā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°ā§‡: sa-web-app и sa-feedback. āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻĻā§‚āĻ¤āĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž sa-frontend, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ…āĻĒā§āĻ°āĻŽāĻžāĻŖāĻŋāĻ¤ āĻĢā§āĻ°āĻ¨ā§āĻŸāĻāĻ¨ā§āĻĄ āĻ›ā§‡āĻĄāĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧ. āĻ¨ā§€āĻ¤āĻŋ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡, āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨:

$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io “auth-policy” created

āĻĒā§ƒāĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§āĻ¨ - āĻ†āĻĒāĻ¨āĻŋ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻāĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻžāĻ¸ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ 401 āĻ…āĻ¨āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤. āĻāĻ–āĻ¨ Auth0 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĢā§āĻ°āĻ¨ā§āĻŸāĻāĻ¨ā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻĒā§āĻ¨āĻ°ā§āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤

Auth0 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻļā§‡āĻˇ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ Auth0-āĻ āĻāĻ•āĻŸāĻŋ API āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯āĻž āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•ā§ƒāĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ (āĻ°āĻŋāĻ­āĻŋāĻ‰, āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻāĻŦāĻ‚ āĻ°ā§‡āĻŸāĻŋāĻ‚) āĻĒā§āĻ°āĻ¤āĻŋāĻ¨āĻŋāĻ§āĻŋāĻ¤ā§āĻŦ āĻ•āĻ°āĻŦā§‡ā§ˇ āĻāĻ•āĻŸāĻŋ API āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ¯āĻžāĻ¨ Auth0 āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛ > APIs > API āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻĢāĻ°ā§āĻŽāĻŸāĻŋ āĻĒā§‚āĻ°āĻŖ āĻ•āĻ°ā§āĻ¨:

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

āĻāĻ–āĻžāĻ¨ā§‡ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻž, āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻāĻŸāĻŋ āĻāĻ­āĻžāĻŦā§‡ āĻ˛āĻŋāĻ–āĻŋ:

  • āĻĒāĻžāĻ āĻ•āĻŦāĻ°ā§āĻ—: {Your_AUDIENCE}

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ…āĻŦāĻļāĻŋāĻˇā§āĻŸ āĻŦāĻŋāĻŦāĻ°āĻŖ āĻŦāĻŋāĻ­āĻžāĻ—āĻŸāĻŋāĻ° Auth0 āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛ā§‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻŋāĻ¤ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨ - āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°ā§āĻ¨ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ†āĻŦā§‡āĻĻāĻ¨ (āĻāĻĒāĻŋāĻ†āĻ‡ āĻ¸āĻš āĻ¸ā§āĻŦāĻ¯āĻŧāĻ‚āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻ¤ā§ˆāĻ°āĻŋ)āĨ¤

āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ˛āĻŋāĻ–āĻŦ:

  • āĻĄā§‹āĻŽā§‡āĻ‡āĻ¨: {YOUR_DOMAIN}
  • āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ†āĻ‡āĻĄāĻŋ: {YOUR_CLIENT_ID}

āĻ¸ā§āĻ•ā§āĻ°ā§‹āĻ˛ āĻ•āĻ°ā§āĻ¨ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ° āĻ†āĻŦā§‡āĻĻāĻ¨ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻĢāĻŋāĻ˛ā§āĻĄā§‡ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ• āĻ‡āĻ‰āĻ†āĻ°āĻāĻ˛ (āĻ•āĻ˛āĻŦā§āĻ¯āĻžāĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻž āĻ‡āĻ‰āĻ†āĻ°āĻāĻ˛), āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‡āĻ‰āĻ†āĻ°āĻāĻ˛ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻŋ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĒāĻ°ā§‡ āĻ•āĻ˛ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻŦā§‡āĨ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻŸāĻŋ āĻšāĻ˛:

http://{EXTERNAL_IP}/callback

āĻāĻŦāĻ‚ āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ āĻ˛āĻ—āĻ†āĻ‰āĻŸ URLs (āĻ˛āĻ— āĻ†āĻ‰āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ URL) āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨:

http://{EXTERNAL_IP}/logout

āĻāĻ° āĻĢā§āĻ°āĻ¨ā§āĻŸāĻāĻ¨ā§āĻĄ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻšāĻ˛ā§āĻ¨.

āĻĢā§āĻ°āĻ¨ā§āĻŸāĻāĻ¨ā§āĻĄ āĻ†āĻĒāĻĄā§‡āĻŸ

āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ•āĻ°ā§āĻ¨ auth0 āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ° [istio-mastery]. āĻāĻ‡ āĻļāĻžāĻ–āĻžāĻ¯āĻŧ, āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° Auth0 āĻ āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡ JWT āĻŸā§‹āĻ•ā§‡āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĢā§āĻ°āĻ¨ā§āĻŸāĻāĻ¨ā§āĻĄ āĻ•ā§‹āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻŸāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ°ā§‚āĻĒ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ (App.js):

analyzeSentence() {
    fetch('/sentiment', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': `Bearer ${auth.getAccessToken()}` // Access Token
        },
        body: JSON.stringify({ sentence: this.textField.getValue() })
    })
        .then(response => response.json())
        .then(data => this.setState(data));
}

Auth0 āĻ āĻŸā§‡āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻŸ āĻĄā§‡āĻŸāĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĢā§āĻ°āĻ¨ā§āĻŸāĻāĻ¨ā§āĻĄ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻ–ā§āĻ˛ā§āĻ¨ sa-frontend/src/services/Auth.js āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻ°ā§‡ āĻ¯ā§‡ āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ˛āĻŋāĻ–ā§‡āĻ›āĻŋ āĻ¤āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨ (Auth.js):

const Config = {
    clientID: '{YOUR_CLIENT_ID}',
    domain:'{YOUR_DOMAIN}',
    audience: '{YOUR_AUDIENCE}',
    ingressIP: '{EXTERNAL_IP}' // ИŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ Đ´ĐģŅ Ņ€ĐĩдиŅ€ĐĩĐēŅ‚Đ° ĐŋĐžŅĐģĐĩ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸
}

āĻ†āĻŦā§‡āĻĻāĻ¨ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤. āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§€āĻšā§‡āĻ° āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĄāĻ•āĻžāĻ° āĻ†āĻ‡āĻĄāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°ā§āĻ¨:

$ docker build -f sa-frontend/Dockerfile 
 -t $DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0 
 sa-frontend

$ docker push $DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0

$ kubectl set image deployment/sa-frontend 
 sa-frontend=$DOCKER_USER_ID/sentiment-analysis-frontend:istio-auth0

āĻ…ā§āĻ¯āĻžāĻĒāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĻā§‡āĻ–ā§āĻ¨! āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ Auth0 āĻ āĻĒā§āĻ¨āĻƒāĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ¤ āĻ•āĻ°āĻž āĻšāĻŦā§‡, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ˛āĻ— āĻ‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ (āĻŦāĻž āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡), āĻāĻ° āĻĒāĻ°ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¸ā§‡āĻ‡ āĻĒā§ƒāĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĢā§‡āĻ°āĻ¤ āĻĒāĻžāĻ āĻžāĻ¨ā§‹ āĻšāĻŦā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•ā§ƒāĻ¤ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻž āĻšāĻŦā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ•āĻžāĻ°ā§āĻ˛ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻ…āĻ‚āĻļā§‡ āĻ‰āĻ˛ā§āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāĻ—ā§āĻ˛āĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§‡āĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻĒāĻžāĻŦā§‡āĻ¨ 401 āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻžāĻ¸ āĻ•ā§‹āĻĄ, āĻ¸āĻ‚āĻ•ā§‡āĻ¤ āĻ¯ā§‡ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ āĻ¨āĻ¯āĻŧ.

āĻāĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ• - āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻ•āĻ°ā§āĻ¨ā§ˇ

Auth0 āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨

āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§āĻāĻ¤ā§‡ āĻĻā§‡āĻ¯āĻŧ āĻ¯ā§‡ āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ•ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻĻā§‡āĻ° āĻ•ā§€ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ†āĻ›ā§‡ āĻ¤āĻž āĻœāĻžāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ Istio āĻāĻ° āĻœāĻ¨ā§āĻ¯āĻ“ āĻŸā§āĻ˛ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻšāĻŋāĻ¸āĻžāĻŦā§‡, āĻ†āĻ¸ā§āĻ¨ āĻĻā§āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ—ā§āĻ°ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ (āĻ¨ā§€āĻšā§‡āĻ° āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻĻā§‡āĻ–ā§āĻ¨):

  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° (āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€) — āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° SA-WebApp āĻāĻŦāĻ‚ SA-Frontend āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¸āĻš;
  • āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ° (āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ°) - āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¸āĻšāĨ¤

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3
āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻ§āĻžāĻ°āĻŖāĻž

āĻāĻ‡ āĻ—ā§‹āĻˇā§āĻ ā§€āĻ—ā§āĻ˛āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž Auth0 āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ¤āĻžāĻĻā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸ā§āĻ¤āĻ°ā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ Istio āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤

Auth0 āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨

Auth0 āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛ā§‡, āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ā§‡ āĻ¯āĻžāĻ¨ (āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ) āĻāĻŦāĻ‚ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°ā§āĻ¨ Auth0 āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨. āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ā§‡āĻ° āĻĒāĻ°ā§‡, āĻ¯āĻžāĻ¨ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨, āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ - āĻ‰āĻĒāĻ°ā§‡āĻ° āĻĄāĻžāĻ¨āĻĻāĻŋāĻ•ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ‰āĻĒāĻ¯ā§āĻ•ā§āĻ¤ āĻŽā§‡āĻ¨ā§ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°ā§‡ āĻ­āĻžāĻĄāĻŧāĻžāĻŸā§‡āĻĻā§‡āĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡ (āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨). āĻ—ā§āĻ°ā§āĻĒ āĻ¸āĻ•ā§āĻ°āĻŋāĻ¯āĻŧ āĻ•āĻ°ā§āĻ¨ (āĻ—ā§‹āĻˇā§āĻ ā§€) āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻŦā§‹āĻ¤āĻžāĻŽā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨ (āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§āĻ¨).

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

āĻ—ā§āĻ°ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž

āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ā§‡ āĻ¯āĻžāĻ¨ āĻ—ā§āĻ°ā§āĻĒ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ°. āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•ā§ƒāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ•ā§‡ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻŦ, āĻ¤āĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤ āĻ—ā§āĻ°ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻĒ āĻšāĻ¯āĻŧāĻ¨ āĻ•āĻ°ā§āĻ¨ āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ°, āĻĒā§āĻ°ā§‡āĻ¸ āĻ¸āĻĻāĻ¸ā§āĻ¯āĻĻā§‡āĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨, āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ•āĻŋāĻ›ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ…āĻ¸ā§āĻŦā§€āĻ•āĻžāĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻ—ā§‹āĻˇā§āĻ ā§€ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻ›ā§‡āĻĄāĻŧā§‡ āĻĻāĻŋāĻ¨āĨ¤ (āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ Auth0 āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛ > āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ > āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨.)

āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡ āĻ—ā§āĻ°ā§āĻĒ āĻĻāĻžāĻŦāĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨

āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ—ā§āĻ°ā§āĻĒā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻāĻ‡ āĻ¤āĻĨā§āĻ¯āĻŸāĻŋ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻŸā§‹āĻ•ā§‡āĻ¨āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻšāĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ OpenID āĻ•āĻžāĻ¨ā§‡āĻ•ā§āĻŸ āĻŽā§‡āĻ¨ā§‡ āĻšāĻ˛āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻŦāĻ‚ āĻāĻ•āĻ‡ āĻ¸āĻžāĻĨā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ—ā§‹āĻˇā§āĻ ā§€āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĢā§‡āĻ°āĻ¤ āĻĻāĻŋāĻ¤ā§‡, āĻŸā§‹āĻ•ā§‡āĻ¨āĻŸāĻŋāĻ•ā§‡ āĻ¤āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻĻāĻžāĻŦāĻŋ. Auth0 āĻ¨āĻŋāĻ¯āĻŧāĻŽā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, Auth0 āĻĒā§‹āĻ°ā§āĻŸāĻžāĻ˛ā§‡ āĻ¯āĻžāĻ¨ āĻŦāĻŋāĻ§āĻŋ, āĻĒā§āĻ°ā§‡āĻ¸ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻŸā§‡āĻŽāĻĒā§āĻ˛ā§‡āĻŸ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ–āĻžāĻ˛āĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ¨ āĻ•āĻ°ā§āĻ¨āĨ¤

Istio āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨āĨ¤ āĻ…āĻ‚āĻļ 3

āĻ¨ā§€āĻšā§‡āĻ° āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ…āĻ¨ā§āĻ˛āĻŋāĻĒāĻŋ āĻ•āĻ°ā§āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§āĻ¨ āĻ—ā§āĻ°ā§āĻĒ āĻĻāĻžāĻŦāĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ (namespacedGroup.js):

function (user, context, callback) {
    context.accessToken['https://sa.io/group'] = user.groups[0];
    return callback(null, user, context);
}

āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯: āĻāĻ‡ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ā§‡ āĻ¸āĻ‚āĻœā§āĻžāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻĒā§āĻ°āĻĨāĻŽ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ—ā§‹āĻˇā§āĻ ā§€āĻŸāĻŋ āĻ¨ā§‡āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻžāĻ¸ā§āĻŸāĻŽ āĻĻāĻžāĻŦāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ (āĻāĻ° āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨ā§‡āĻ° āĻ…āĻ§ā§€āĻ¨ā§‡, Auth0 āĻĻā§āĻŦāĻžāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ)āĨ¤

āĻĒā§ƒāĻˇā§āĻ āĻžāĻ¯āĻŧ āĻĢāĻŋāĻ°ā§‡ āĻ¯āĻžāĻ¨ āĻŦāĻŋāĻ§āĻŋ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•ā§āĻ°āĻŽā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĻā§āĻŸāĻŋ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ˛ā§‡āĻ–āĻž āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ¨āĻž āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°ā§āĻ¨:

  • auth0-āĻ…āĻĨā§‹āĻ°āĻžāĻ‡āĻœā§‡āĻļāĻ¨-āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨
  • āĻ—ā§āĻ°ā§āĻĒ āĻĻāĻžāĻŦāĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨

āĻ…āĻ°ā§āĻĄāĻžāĻ°āĻŸāĻŋ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāĻ°āĻŖ āĻ—ā§āĻ°ā§āĻĒ āĻĢāĻŋāĻ˛ā§āĻĄ āĻ…ā§āĻ¯āĻžāĻ¸āĻŋāĻ™ā§āĻ•ā§āĻ°ā§‹āĻ¨āĻžāĻ¸āĻ­āĻžāĻŦā§‡ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡ auth0-āĻ…āĻĨā§‹āĻ°āĻžāĻ‡āĻœā§‡āĻļāĻ¨-āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ° āĻĒāĻ°ā§‡ āĻāĻŸāĻŋ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĻāĻžāĻŦāĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ‡ āĻŽāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻŸā§‹āĻ•ā§‡āĻ¨:

{
 "https://sa.io/group": "Moderators",
 "iss": "https://sentiment-analysis.eu.auth0.com/",
 "sub": "google-oauth2|196405271625531691872"
 // [ŅĐžĐēŅ€Đ°Ņ‰ĐĩĐŊĐž Đ´ĐģŅ ĐŊĐ°ĐŗĐģŅĐ´ĐŊĐžŅŅ‚и]
}

āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻšā§‡āĻ• āĻ•āĻ°āĻ¤ā§‡ āĻāĻ¨āĻ­āĻ¯āĻŧ āĻĒā§āĻ°āĻ•ā§āĻ¸āĻŋ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ¯āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—ā§āĻ°ā§āĻĒāĻŸāĻŋ āĻĻāĻžāĻŦāĻŋ āĻĨā§‡āĻ•ā§‡ āĻŸā§‡āĻ¨ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻŦā§‡ (https://sa.io/group) āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻž āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡āĨ¤ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡āĻ° āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€ āĻ…āĻ§ā§āĻ¯āĻžāĻ¯āĻŧ āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻˇāĻ¯āĻŧ.

āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“āĻ¤ā§‡ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨

āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ Istio-āĻāĻ° āĻœāĻ¨ā§āĻ¯ RBAC āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ:

apiVersion: "rbac.istio.io/v1alpha1"
kind: RbacConfig
metadata:
  name: default
spec:
  mode: 'ON_WITH_INCLUSION'                     # 1
  inclusion:
    services:                                   # 2
    - "sa-frontend.default.svc.cluster.local"
    - "sa-web-app.default.svc.cluster.local"
    - "sa-feedback.default.svc.cluster.local" 

āĻŦā§āĻ¯āĻžāĻ–ā§āĻ¯āĻž:

  • 1 — āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻāĻŦāĻ‚ āĻ¨āĻžāĻŽāĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° RBAC āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§āĻ¨ā§ˇ Inclusion;
  • 2 — āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻŋāĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻŋ:

$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ–āĻ¨ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§ˇ āĻ…āĻ¨ā§āĻ¯ āĻ•āĻĨāĻžāĻ¯āĻŧ, āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻāĻŦāĻ‚ āĻāĻ° āĻĢāĻ˛ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻŦā§‡ā§ˇ RBAC: access denied. āĻāĻ–āĻ¨ āĻ†āĻ¸ā§āĻ¨ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¨āĨ¤

āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨

āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ…āĻŦāĻļā§āĻ¯āĻ‡ SA-Frontend āĻāĻŦāĻ‚ SA-WebApp āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĨāĻžāĻ•āĻ¤ā§‡ āĻšāĻŦā§‡ā§ˇ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ Istio āĻ¸āĻŽā§āĻĒāĻĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤:

  • āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸ āĻ°ā§‹āĻ˛ - āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡;
  • ServiceRoleBinding — āĻāĻ‡ ServiceRole āĻ•āĻžāĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ—āĻ¤ āĻ¤āĻž āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻŖ āĻ•āĻ°ā§‡ā§ˇ

āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻŦ (servicerole.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: regular-user
  namespace: default
spec:
  rules:
  - services: 
    - "sa-frontend.default.svc.cluster.local" 
    - "sa-web-app.default.svc.cluster.local"
    paths: ["*"]
    methods: ["*"]

āĻāĻŦāĻ‚ āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ regular-user-binding āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒā§ƒāĻˇā§āĻ āĻž āĻĻāĻ°ā§āĻļāĻ•āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ ServiceRole āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°ā§āĻ¨ (āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤-āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€-āĻ¸āĻžāĻ°ā§āĻ­āĻŋāĻ¸-āĻ°ā§‹āĻ˛-āĻŦāĻžāĻ‡āĻ¨ā§āĻĄāĻŋāĻ‚.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: regular-user-binding
  namespace: default
spec:
  subjects:
  - user: "*"
  roleRef:
    kind: ServiceRole
    name: "regular-user"

"āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€" āĻŽāĻžāĻ¨ā§‡ āĻ•āĻŋ āĻ…āĻ¨āĻ¨ā§āĻŽā§‹āĻĻāĻŋāĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ°āĻ“ SA WebApp-āĻ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻĨāĻžāĻ•āĻŦā§‡? āĻ¨āĻž, āĻ¨ā§€āĻ¤āĻŋ JWT āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡āĻ° āĻŦā§ˆāĻ§āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦā§‡āĨ¤

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

$ kubectl apply -f resource-manifests/istio/security/user-role.yaml
servicerole.rbac.istio.io/regular-user created
servicerolebinding.rbac.istio.io/regular-user-binding created

āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨

āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ°āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ (mod-service-role.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: mod-user
  namespace: default
spec:
  rules:
  - services: ["*"]
    paths: ["*"]
    methods: ["*"]

āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻšāĻžāĻ‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸ā§‡āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¯āĻžāĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡ āĻĻāĻžāĻŦāĻŋ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ https://sa.io/group āĻ…āĻ°ā§āĻĨ āĻ¸āĻš Moderators (mod-service-role-binding.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: mod-user-binding
  namespace: default
spec:
  subjects:
  - properties:
      request.auth.claims[https://sa.io/group]: "Moderators"
  roleRef:
    kind: ServiceRole
name: "mod-user" 

āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•:

$ kubectl apply -f resource-manifests/istio/security/mod-role.yaml
servicerole.rbac.istio.io/mod-user created
servicerolebinding.rbac.istio.io/mod-user-binding created

āĻĻā§‚āĻ¤āĻĻā§‡āĻ° āĻ•ā§āĻ¯āĻžāĻļā§‡ āĻ•āĻ°āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡, āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻ¨āĻŋāĻ¯āĻŧāĻŽ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻšāĻ¤ā§‡ āĻ•āĻ¯āĻŧā§‡āĻ• āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻ¸āĻŽāĻ¯āĻŧ āĻ˛āĻžāĻ—āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻĒāĻ¨āĻŋ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ¯ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻŦāĻ‚ āĻŽāĻĄāĻžāĻ°ā§‡āĻŸāĻ°āĻĻā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ā§‡āĻ° āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ¸ā§āĻ¤āĻ° āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ

āĻāĻ‡ āĻ…āĻ‚āĻļā§‡ āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻ¸āĻŋāĻ°āĻŋāĻ¯āĻŧāĻžāĻ¸āĻ˛āĻŋ āĻ¯āĻĻāĻŋāĻ“, āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŋ āĻ•āĻ–āĻ¨āĻ“ āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻœ, āĻ…āĻ¨āĻžāĻ¯āĻŧāĻžāĻ¸, āĻŽāĻžāĻĒāĻ¯ā§‹āĻ—ā§āĻ¯ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻĻā§‡āĻ–ā§‡āĻ›ā§‡āĻ¨?

āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“ āĻ°āĻŋāĻ¸ā§‹āĻ°ā§āĻ¸ (RbacConfig, ServiceRole, āĻāĻŦāĻ‚ ServiceRoleBinding) āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻļā§‡āĻˇ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ā§‡āĻ° āĻĒā§āĻ°āĻŽāĻžāĻŖā§€āĻ•āĻ°āĻŖ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻŽā§‹āĻĻāĻ¨ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¸ā§‚āĻ•ā§āĻˇā§āĻŽ āĻ¨āĻŋāĻ¯āĻŧāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ…āĻ°ā§āĻœāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ›āĻŋāĻ˛āĨ¤

āĻ‰āĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĻā§‚āĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ‡ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ° āĻ¯āĻ¤ā§āĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ, āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ:

  • āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻŦāĻ‚ āĻŦāĻžāĻ— āĻĨāĻžāĻ•āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŽāĻ¨ āĻœā§‡āĻ¨ā§‡āĻ°āĻŋāĻ• āĻ•ā§‹āĻĄā§‡āĻ° āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž;
  • āĻŦā§‹āĻ•āĻž āĻĒāĻ°āĻŋāĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻšā§āĻ°āĻžāĻ¸ āĻ•āĻ°āĻž āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻļā§‡āĻˇ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦāĻžāĻ‡āĻ°ā§‡ āĻĨā§‡āĻ•ā§‡ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸āĻ¯ā§‹āĻ—ā§āĻ¯ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻ°āĻŋāĻĒā§‹āĻ°ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡;
  • āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āĻŦāĻž āĻ…āĻ§āĻŋāĻ•āĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž āĻĻā§‚āĻ° āĻ•āĻ°āĻž;
  • āĻ¯ā§‡ āĻ¨āĻ¤ā§āĻ¨ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋ āĻ¸āĻšāĻœ, āĻ¨āĻŋāĻ°āĻžāĻĒāĻĻ āĻāĻŦāĻ‚ āĻĻā§āĻ°ā§āĻ¤ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

Istio āĻŸāĻŋāĻŽāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ“āĻ­āĻžāĻ°āĻšā§‡āĻĄ āĻ¯ā§‹āĻ— āĻ¨āĻž āĻ•āĻ°ā§‡, āĻ¤āĻžāĻĻā§‡āĻ° āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻžāĻ¸ā§‡ āĻĢāĻŋāĻ°āĻŋāĻ¯āĻŧā§‡ āĻ¨āĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻŋāĻ•-āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻ‚āĻ¸ā§āĻĨāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻĢā§‹āĻ•āĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĨ¤

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ (āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ…āĻ‚āĻļā§‡) āĻŦāĻžāĻ¸ā§āĻ¤āĻŦ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ‡āĻ¸ā§āĻŸāĻŋāĻ“āĻ° āĻ¸āĻžāĻĨā§‡ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻœā§āĻžāĻžāĻ¨ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ• āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻžāĻŦāĻ˛ā§€ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤

āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻ• āĻĨā§‡āĻ•ā§‡ PS

āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŦā§āĻ˛āĻ—ā§‡āĻ“ āĻĒāĻĄāĻŧā§āĻ¨:

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨