рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рдЯрд┐рдкреНрдкрдгреАред рдЕрдиреБрд╡рд╛рджред: рдкрд╣рд▓реЗ рднрд╛рдЧ рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЗрд╕реНрддрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдХреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдереА, рджреВрд╕рд░рд╛ - рдмрд╛рд░реАрдХреА рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдЯрд┐рдВрдЧ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд┐рдХ рдкреНрд░рдмрдВрдзрдиред рдЕрдм рд╣рдо рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ: рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦрдХ Auth0 рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рдордиреЗ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдЗрд╕реНрддрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕реЗрдВрдЯреАрдореЗрдВрдЯ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЫреЛрдЯрд╛ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдЯреНрд░реАрдЬрд╝, рдЯрд╛рдЗрдордЖрдЙрдЯ, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░, рдЯреНрд░реЗрд╕рд┐рдВрдЧ, рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЬреИрд╕реА рдкрд░рддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЙрдиреНрдирдд рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдП/рдмреА рдкрд░реАрдХреНрд╖рдг, рдорд┐рд░рд░рд┐рдВрдЧ рдФрд░ рдХреИрдирд░реА рд░реЛрд▓рдЖрдЙрдЯред

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рдирдИ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ, рд╣рдо рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдореВрд▓реНрдп рдХреЗ рдкрде рдкрд░ рдЕрдВрддрд┐рдо рдкрд░рддреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг - рдФрд░ рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдирдВрдж рд╣реИ!

рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг

рдореБрдЭреЗ рдХрднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдКрдВрдЧрд╛ред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЗрд╕реНрддрд┐рдпреЛ рдЗрди рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдордЬрд╝реЗрджрд╛рд░ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛рджрд╛рдпрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдЗрд╕реНрддрд┐рдпреЛ рдЗрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рд╣рдЯрд╛рдХрд░ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╡реЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдорд╛рдгрд┐рдд рдФрд░ рдЕрдзрд┐рдХреГрдд рд╣реЛ рдЪреБрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рд╡реНрдпрд╡рд╕рд╛рдп-рдЙрдкрдпреЛрдЧреА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реИред

рд╕реБрдирдиреЗ рдореЗрдВ рддреЛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдЖрдЗрдП рдЕрдВрджрд░ рджреЗрдЦреЗрдВ!

Auth0 рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг

рдкрд╣рдЪрд╛рди рдФрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо Auth0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рд╣рдЬ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд┐рд╕реА рдЕрдиреНрдп рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдУрдкрдирдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди: KeyCloak, IdentityServer рдФрд░ рдХрдИ рдЕрдиреНрдпред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░ рдЬрд╛рдПрдБ Auth0 рдкреЛрд░реНрдЯрд▓ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рд╕реЗ, рдПрдХ рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ рдмрдирд╛рдПрдВ (рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ - "рдХрд┐рд░рд╛рдпреЗрджрд╛рд░", рдЕрд▓рдЧрд╛рд╡ рдХреА рддрд╛рд░реНрдХрд┐рдХ рдЗрдХрд╛рдИ, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ рдкреНрд░рд▓реЗрдЦрди - рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рджред) рдФрд░ рдЬрд╛рдПрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди > рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдРрдкрдЪреБрдирдиреЗ рдбреЛрдореЗрди, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рдбреЛрдореЗрди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ 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

рдРрд╕реЗ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд╕рд╛рде, рдкрд╛рдпрд▓рдЯ (рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рддреАрди рдмреБрдирд┐рдпрд╛рджреА рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдорд╛рди рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рд▓рдЧрднрдЧ рдЕрдиреБрд╡рд╛рджред) рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрдд рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ: 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 рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рдорд╛рдгрд┐рдд рд╕реЗрд╡рд╛рдУрдВ (рд╕рдореАрдХреНрд╖рд╛, рд╡рд┐рд╡рд░рдг рдФрд░ рд░реЗрдЯрд┐рдВрдЧ) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧреАред рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░ рдЬрд╛рдПрдБ Auth0 рдкреЛрд░реНрдЯрд▓ > рдПрдкреАрдЖрдИ > рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВ рдФрд░ рдлреЙрд░реНрдо рднрд░реЗрдВ:

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рдпрд╣рд╛рдБ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВ:

  • рджрд░реНрд╢рдХ: {рдЖрдкрдХреЗ_рджрд░реНрд╢рдХ}

рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд╢реЗрд╖ рд╡рд┐рд╡рд░рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ Auth0 рдкреЛрд░реНрдЯрд▓ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ - рдЪреБрдирддреЗ рд╣реИрдВ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди (рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛)ред

рдпрд╣рд╛рдВ рд╣рдо рд▓рд┐рдЦреЗрдВрдЧреЗ:

  • рдбреЛрдореЗрди: {рдЖрдкрдХрд╛ рдбреЛрдореЗрди}
  • рдЧреНрд░рд╛рд╣рдХ ID: {YOUR_CLIENT_ID}

рддрдХ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдкрд╛рда рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдХреЙрд▓рдмреИрдХ рдпреВрдЖрд░рдПрд▓ (рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХрд┐рдП рдЧрдП рдпреВрдЖрд░рдПрд▓), рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрд╕ рдпреВрдЖрд░рдПрд▓ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рд╣реИ:

http://{EXTERNAL_IP}/callback

рдФрд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рд▓реЙрдЧрдЖрдЙрдЯ рдпреВрдЖрд░рдПрд▓ (рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд URL) рдЬреЛрдбрд╝реЗрдВ:

http://{EXTERNAL_IP}/logout

рдЪрд▓рд┐рдП рдлреНрд░рдВрдЯрдПрдВрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред

рдлреНрд░рдВрдЯрдПрдВрдб рдЕрджреНрдпрддрди

рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ auth0 рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА [istio-mastery]. рдЗрд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ Auth0 рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ JWT рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯрдПрдВрдб рдХреЛрдб рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдРрдк.рдЬреЗрдПрд╕):

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 рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг

рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреМрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреА рдкрд╣реБрдВрдЪ рдХрд┐рд╕ рддрдХ рд╣реИред рдЗрд╕реНрддрд┐рдпреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░, рдЖрдЗрдП рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рдмрдирд╛рдПрдВ (рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВ):

  • рд╕рджрд╕реНрдп (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) - рдХреЗрд╡рд▓ SA-WebApp рдФрд░ SA-рдлреНрд░рдВрдЯреЗрдВрдб рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде;
  • рдордзреНрдпрд╕реНрде (рдореЙрдбрд░реЗрдЯрд░) - рддреАрдиреЛрдВ рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рдеред

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрд╡рдзрд╛рд░рдгрд╛

рдЗрди рд╕рдореВрд╣реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

Auth0 рдкреЛрд░реНрдЯрд▓ рдореЗрдВ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд░ рдЬрд╛рдПрдВ (рдПрдХреНрд╕рдЯреЗрдВрд╢рди) рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг. рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рдмрд╛рдж рдпрд╣рд╛рдВ рдЬрд╛рдПрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рд╕реНрддрд╛рд░, рдФрд░ рд╡рд╣рд╛рдВ - рдКрдкрд░ рджрд╛рдИрдВ рдУрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдФрд░ рдЙрдЪрд┐рдд рдореЗрдиреВ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЬрд╛рдПрдВ (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди). рд╕рдореВрд╣реЛрдВ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ (рд╕рдореВрд╣) рдФрд░ рдкрдмреНрд▓рд┐рд╢ рд░реВрд▓ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ (рдирд┐рдпрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ).

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рд╕рдореВрд╣ рдмрдирд╛рдПрдВ

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЬрд╛рдПрдВ рд╕рдореВрд╣ рдФрд░ рдПрдХ рдЧреНрд░реБрдк рдмрдирд╛рдПрдВ рдордзреНрдпрд╕реНрде. рдЪреВрдБрдХрд┐ рд╣рдо рд╕рднреА рдкреНрд░рдорд╛рдгрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд╛рдиреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдореВрд╣ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдПрдХ рд╕рдореВрд╣ рдЪреБрдиреЗрдВ рдордзреНрдпрд╕реНрде, рдкреНрд░реЗрд╕ рд╕рджрд╕реНрдп рдЬреЛрдбрд╝реЗрдВ, рдЕрдкрдирд╛ рдореБрдЦреНрдп рдЦрд╛рддрд╛ рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрд╣реБрдВрдЪ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдореВрд╣ рдХреЗ рдЫреЛрдбрд╝ рджреЗрдВред (рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ Auth0 рдкреЛрд░реНрдЯрд▓ > рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ > рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ.)

рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдореЗрдВ рд╕рдореВрд╣ рджрд╛рд╡рд╛ рдЬреЛрдбрд╝реЗрдВ

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдореЗрдВ рднреА рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдУрдкрдирдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд╛рде рд╣реА рд╣рдореЗрдВ рдЬрд┐рди рд╕рдореВрд╣реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЛрдХрди рдХреЛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдХрд╕реНрдЯрдо рджрд╛рд╡рд╛. Auth0 рдирд┐рдпрдореЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдирд┐рдпрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, Auth0 рдкреЛрд░реНрдЯрд▓ рдкрд░ рдЬрд╛рдПрдБ рдирд┐рдпрдо, рдкреНрд░реЗрд╕ рдирд┐рдпрдо рдмрдирд╛рдПрдВ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдпрдо рдЪреБрдиреЗрдВред

рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╛рдЧ ---- рдкрд╣рд▓рд╛

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдирдП рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рд╕рдореВрд╣ рджрд╛рд╡рд╛ рдЬреЛрдбрд╝реЗрдВ (рдиреЗрдорд╕реНрдкреЗрд╕реНрдбрдЧреНрд░реБрдк.рдЬреЗрдПрд╕):

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) рд▓реМрдЯрд╛рдП рдЧрдП рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдореЗрдВред рдпрд╣ рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред

рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рдиреНрдпрд╛рд╕

рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдЖрд░рдмреАрдПрд╕реА рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

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 рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕реНрддрд┐рдпреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛:

  • рд╕реЗрд╡рд╛ рднреВрдорд┐рдХрд╛ тАФ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ;
  • рд╕реЗрд╡рд╛ рднреВрдорд┐рдХрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ - рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ 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) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЕрдкрдиреА рджреВрдд рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдП рд╣реИрдВ:

  • рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдФрд░ рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ;
  • рдЙрди рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЬрд┐рдирдореЗрдВ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрд╛рд╣рд░ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд┐рдХрд▓рд╛ рдФрд░ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛;
  • рд╣рд░ рдмрд╛рд░ рдирдИ рднреВрдорд┐рдХрд╛ рдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛;
  • рдирдИ рд╕реЗрд╡рд╛рдПрдБ рд╕рд░рд▓, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рддреЗрдЬрд╝ рд░рд╣реЗрдВред

рдЙрддреНрдкрд╛рджрди

рдЗрд╕реНрддрд┐рдпреЛ рдЯреАрдореЛрдВ рдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛, рдЙрдиреНрд╣реЗрдВ рд╕реВрдХреНрд╖реНрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдП рдмрд┐рдирд╛, рд╡реНрдпрд╡рд╕рд╛рдп-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд▓реЗрдЦ (рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ) рдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рдФрд░ рддреИрдпрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд┐рдПред

рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕

рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ