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

рдирдИ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ, рд╣рдо рд╡реНрдпрд╛рдкрд╛рд░ рдореВрд▓реНрдп рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЕрдВрддрд┐рдо рдкрд░рддреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг - рдФрд░ рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдирдВрдж рд╣реИ!
рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдореБрдЭреЗ рдХрднреА рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реЛрддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдЧрд╛ред рдЗрди рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд░реЛрдорд╛рдВрдЪрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЬреНрдпрд╛рджрд╛ рдкреНрд░реЗрд░рдгрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдХреНрдпрд╛ рддрдХрдиреАрдХреА рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдЗрдирд╡реЙрдпрд╕ рдкреНрд░реЙрдХреНрд╕рд┐рд╕ рдХреЗ рд▓рд┐рдП рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрдЯрд┐рдпреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдорд╛рдгрд┐рдд рдФрд░ рдЕрдзрд┐рдХреГрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдЪрд▓реЛ рдЕрдВрджрд░ рджреЗрдЦреЛ!
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг
рд╣рдо Auth0 рдХреЛ рдкрд╣рдЪрд╛рди рдФрд░ рдЕрднрд┐рдЧрдо рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдЬ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рдорд╛рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд┐рд╕реА рднреА рдЕрдиреНрдп
OpenID рдХрдиреЗрдХреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: 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
рдХреЗ Envoys рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдлреНрд░рдВрдЯрдПрдВрдб рдХреЛ рдЕрдирдзрд┐рдХреГрдд рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml policy.authentication.istio.io тАЬauth-policyтАЭ created
рдкреГрд╖реНрда рдкрд░ рд▓реМрдЯреЗрдВ рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ - рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣
401 рдЕрдирдзрд┐рдХреГрдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЕрдм рд╣рдо Auth0 рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
рдЕрдВрддрд┐рдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ 0 рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╕реЗрд╡рд╛рдУрдВ (рд╕рдореАрдХреНрд╖рд╛, рд╡рд┐рд╡рд░рдг рдФрд░ рд░реЗрдЯрд┐рдВрдЧ) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛ред рдПрдХ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдкреЛрд░реНрдЯрд▓> рдПрдкреАрдЖрдИ> рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВ рдФрд░ рдлреЙрд░реНрдо рднрд░реЗрдВ:

рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИ , рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВ:
- рд╢реНрд░реЛрддрд╛ : {Your_AUDIENCE}
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╢реЗрд╖ рд╡рд┐рд╡рд░рдг,
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ Auth0 рдкреЛрд░реНрдЯрд▓ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ -
рдЯреЗрд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪреБрдиреЗрдВ (рдпрд╣ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред
рдпрд╣рд╛рдБ рд╣рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
- рдбреЛрдореЗрди : {your_DOMAIN}
- рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА : {Your_CLIENT_ID}
рдСрд▓реНрдЯреЗрдб рдХреЙрд▓рдмреИрдХ URLs рдЯреЗрдХреНрд╕реНрдЯ рдмреЙрдХреНрд╕ (
рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП
рдЕрдиреБрдордд URL) рдХреЗ рд▓рд┐рдП
рдЯреЗрд╕реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрд╕ URL рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдХреЙрд▓ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╣реИ:
http://{EXTERNAL_IP}/callback
рдФрд░
рдЕрдиреБрдорддрд┐ рд▓реЙрдЧрдЖрдЙрдЯ URL рдХреЗ рд▓рд┐рдП (рд▓реЙрдЧ рдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд URL), рдЬреЛрдбрд╝реЗрдВ:
http://{EXTERNAL_IP}/logout
рдЪрд▓реЛ рдЖрдЧреЗ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред
рд╕реАрдорд╛рдВрдд рдЕрджреНрдпрддрди
[istio-mastery]
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА
auth0
рдмреНрд░рд╛рдВрдЪ рдкрд░
[istio-mastery]
ред рдЗрд╕ рдереНрд░реЗрдб рдореЗрдВ, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рдХреЛрдб рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдореЗрдВ JWT рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (
App.js ):
analyzeSentence() { fetch('/sentiment', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${auth.getAccessToken()}`
sa-frontend/src/services/Auth.js
рдореЗрдВ рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдпрдкрдЯрд▓ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
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 рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред
рдЪрд▓реЛ рдЕрдЧрд▓рд╛ рдХрджрдо рдЙрдард╛рддреЗ рд╣реИрдВ - рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рдорд╛рдг рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг реж
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреМрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Istio рдЗрд╕рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рдмрдирд╛рдПрдВрдЧреЗ (рдиреАрдЪреЗ рдЪрд┐рддреНрд░ рджреЗрдЦреЗрдВ):
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) - рдХреЗрд╡рд▓ SA-WebApp рдФрд░ SA-Frontend рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде;
- рдореЙрдбрд░реЗрдЯрд░ - рддреАрдиреЛрдВ рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рдеред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛рдЗрди рд╕рдореВрд╣реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рднрд┐рдиреНрди рдПрдХреНрд╕реЗрд╕ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП Istio рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╡рд┐рдиреНрдпрд╛рд╕
Auth0 рдкреЛрд░реНрдЯрд▓ рдкрд░,
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд░ рдЬрд╛рдПрдВ рдФрд░
Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж,
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкрд░ рдЬрд╛рдПрдВ , рдФрд░ рд╡рд╣рд╛рдВ - рдКрдкрд░ рджрд╛рдИрдВ рдУрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдФрд░ рдЙрдЪрд┐рдд рдореЗрдиреВ рд╡рд┐рдХрд▓реНрдк
(рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди) рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдХрд┐рд░рд╛рдпреЗрджрд╛рд░ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЬрд╛рдПрдВред
рд╕рдореВрд╣ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВ рдФрд░
рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд┐рдпрдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

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

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдирдП
рдРрдб рдЧреНрд░реБрдк рдХреНрд▓реЗрдо рдирд┐рдпрдо (
namespacedGroup.js ) рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
function (user, context, callback) { context.accessToken['https://sa.io/group'] = user.groups[0]; return callback(null, user, context); }
рдиреЛрдЯ : рдпрд╣ рдХреЛрдб рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХрд╕реНрдЯрдо рджрд╛рд╡реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рддрд╣рдд, рдЬреИрд╕рд╛ рдХрд┐ Auth0 рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред
рдирд┐рдпрдо рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрди рдХреНрд░рдо рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рджреЛ рдирд┐рдпрдо рд╣реИрдВ:
- auth0-рдкреНрд░рд╛рдзрд┐рдХрд░рдг-рд╡рд┐рд╕реНрддрд╛рд░
- рд╕рдореВрд╣ рджрд╛рд╡рд╛ рдЬреЛрдбрд╝реЗрдВ
рдпрд╣ рдЖрджреЗрд╢ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдореВрд╣ рдлрд╝реАрд▓реНрдб рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ
рдСрд░рд▓-рдСрдереЛрд░рд╛рдЗрдЬрд╝реЗрд╢рди-рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдирд┐рдпрдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рдирд┐рдпрдо рджреНрд╡рд╛рд░рд╛ рджрд╛рд╡реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдкрд╣реБрдВрдЪ рдЯреЛрдХрди рд╣реИ:
{ "https://sa.io/group": "Moderators", "iss": "https://sentiment-analysis.eu.auth0.com/", "sub": "google-oauth2|196405271625531691872" // [ ] }
рдЕрдм рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Envoy рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣ рдХреЛ рджрд┐рдП рдЧрдП рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдореЗрдВ рджрд╛рд╡реЗ (
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 -
Inclusion
рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЖрд░рдмреАрдПрд╕реА рд╕рдХреНрд╖рдо рдХрд░реЗрдВ; - 2 - рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВред
рд╣рдо рдЗрд╕ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml rbacconfig.rbac.istio.io/default created
рдЕрдм рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд░реЛрд▓-рдмреЗрд╕реНрдб рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдБрдЪ рд╕реЗ рд╡рдВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк
RBAC: access denied
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреА
RBAC: access denied
ред рдЕрдм рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред
рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ SA-Frontend рдФрд░ SA-WebApp рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕реНрддрд┐рдпреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛:
- ServiceRole - рдЙрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд╣реИ;
- 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
рдорд╛рдзреНрдпрдо
regular-user-binding
рдкреГрд╖реНрда рдкрд░ рд╕рднреА рдЖрдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ ServiceRole рд▓рд╛рдЧреВ рдХрд░реЗрдВ (
рдирд┐рдпрдорд┐рдд-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реЗрд╡рд╛-рднреВрдорд┐рдХрд╛-рдмрд╛рдзреНрдпрдХрд╛рд░реА-рд╕рддреНрдпрдо ):
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
рдЬрд┐рд╕рдХрд╛ рдорд╛рди
рдореЙрдбрд░реЗрдЯрд░реНрд╕ (
mod- рд╕реЗрд╡рд╛-рднреВрдорд┐рдХрд╛-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ .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
рджреВрддреЛрдВ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдиреЗ рдореЗрдВ рдХреБрдЫ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рдордзреНрдпрд╕реНрдереЛрдВ рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд╣реБрдВрдЪ рд╕реНрддрд░ рд╣реИрдВред
рдЗрд╕ рднрд╛рдЧ рдкрд░ рдирд┐рд╖реНрдХрд░реНрд╖
рдЦреИрд░, рдЧрдВрднреАрд░рддрд╛ рд╕реЗ: рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓, рд╕рд░рд▓, рдорд╛рдкрдиреАрдп рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦрд╛ рд╣реИ?
рдХреЗрд╡рд▓ рддреАрди Istio рд╕рдВрд╕рд╛рдзрди (RbacConfig, ServiceRole, рдФрд░ ServiceRoleBinding) рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдВрдЪ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкрд░ рдмреЗрд╣рддрд░ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдереЗред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЗрди рдореБрджреНрджреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛:
- рдирдореВрдирд╛ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдФрд░ рдХреАрдбрд╝реЗ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ;
- рдмреЗрд╡рдХреВрдл рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрд╛рд╣рд░ рд╕реЗ рд╕реБрд▓рдн рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛;
- рд╣рд░ рдмрд╛рд░ рдирдИ рднреВрдорд┐рдХрд╛ рдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛;
- рдХрд┐ рдирдИ рд╕реЗрд╡рд╛рдПрдВ рд╕рд░рд▓, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рддреЗрдЬ рд░рд╣реЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕реНрддрд┐рдпреЛ рдЯреАрдореЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╡реНрдпрд╛рдкрд╛рд░-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдмрд┐рдирд╛ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝рдХрд░, рдЙрдиреНрд╣реЗрдВ рд╕реВрдХреНрд╖реНрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЖрд▓реЗрдЦ (рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ) рдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреНрдЮрд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢ рджрд┐рдПред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕.
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ: