рдЯрд┐рдкреНрдкрдгреАред рдЕрдиреБрд╡рд╛рджред:
рд╣рдордиреЗ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдордиреЗ рдЗрд╕реНрддрд┐рдпреЛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рд╕реЗрдВрдЯреАрдореЗрдВрдЯ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЫреЛрдЯрд╛ рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд░рд┐рдЯреНрд░реАрдЬрд╝, рдЯрд╛рдЗрдордЖрдЙрдЯ, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░, рдЯреНрд░реЗрд╕рд┐рдВрдЧ, рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЬреИрд╕реА рдкрд░рддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЙрдиреНрдирдд рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛: рдП/рдмреА рдкрд░реАрдХреНрд╖рдг, рдорд┐рд░рд░рд┐рдВрдЧ рдФрд░ рдХреИрдирд░реА рд░реЛрд▓рдЖрдЙрдЯред
рдирдИ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ, рд╣рдо рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдореВрд▓реНрдп рдХреЗ рдкрде рдкрд░ рдЕрдВрддрд┐рдо рдкрд░рддреЛрдВ рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг - рдФрд░ рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдирдВрдж рд╣реИ!
рдЗрд╕реНрддрд┐рдпреЛ рдореЗрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдореБрдЭреЗ рдХрднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдХрд┐ рдореИрдВ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдКрдВрдЧрд╛ред рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЗрд╕реНрддрд┐рдпреЛ рдЗрди рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рдордЬрд╝реЗрджрд╛рд░ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЖрдкрдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛рджрд╛рдпрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдкреЗрд╢рдХрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдЗрд╕реНрддрд┐рдпреЛ рдЗрди рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░реА рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рд╣рдЯрд╛рдХрд░ рджреВрдд рдкреНрд░реЙрдХреНрд╕реА рдкрд░ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЬрдм рддрдХ рдЕрдиреБрд░реЛрдз рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддрдм рддрдХ рд╡реЗ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░рдорд╛рдгрд┐рдд рдФрд░ рдЕрдзрд┐рдХреГрдд рд╣реЛ рдЪреБрдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╕ рд╡реНрдпрд╡рд╕рд╛рдп-рдЙрдкрдпреЛрдЧреА рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реИред
рд╕реБрдирдиреЗ рдореЗрдВ рддреЛ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ? рдЖрдЗрдП рдЕрдВрджрд░ рджреЗрдЦреЗрдВ!
Auth0 рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг
рдкрд╣рдЪрд╛рди рдФрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо 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
рдФрд░ рдЗрд╕рдореЗрдВ рд╡реЗ рдорд╛рди рдмрджрд▓реЗрдВ рдЬреЛ рд╣рдордиреЗ рдКрдкрд░ рд▓рд┐рдЦреЗ рд╣реИрдВ (
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 рдкреЛрд░реНрдЯрд▓ рдкрд░ рдЬрд╛рдПрдБ рдирд┐рдпрдо, рдкреНрд░реЗрд╕ рдирд┐рдпрдо рдмрдирд╛рдПрдВ рдФрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдПрдХ рдЦрд╛рд▓реА рдирд┐рдпрдо рдЪреБрдиреЗрдВред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдирдП рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ рд╕рдореВрд╣ рджрд╛рд╡рд╛ рдЬреЛрдбрд╝реЗрдВ (
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 рдХрд┐рд╕рдХреА рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреБрдЫ рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ (
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 рд▓рд╛рдЧреВ рдХрд░реЗрдВ (
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
рдореЙрдбрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдореЙрдбрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
name: mod-user
namespace: default
spec:
rules:
- services: ["*"]
paths: ["*"]
methods: ["*"]
рд▓реЗрдХрд┐рди рд╣рдо рдРрд╕реЗ рдЕрдзрд┐рдХрд╛рд░ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдореЗрдВ рджрд╛рд╡рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ https://sa.io/group
рдЕрд░реНрде рд╕рд╣рд┐рдд Moderators
(
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) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЕрдкрдиреА рджреВрдд рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдЗрди рдореБрджреНрджреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдП рд╣реИрдВ:
- рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХрдо рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдПрдБ рдФрд░ рдмрдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ;
- рдЙрди рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЬрд┐рдирдореЗрдВ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрд╛рд╣рд░ рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд┐рдХрд▓рд╛ рдФрд░ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛;
- рд╣рд░ рдмрд╛рд░ рдирдИ рднреВрдорд┐рдХрд╛ рдпрд╛ рдЕрдзрд┐рдХрд╛рд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛;
- рдирдИ рд╕реЗрд╡рд╛рдПрдБ рд╕рд░рд▓, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рддреЗрдЬрд╝ рд░рд╣реЗрдВред
рдЙрддреНрдкрд╛рджрди
рдЗрд╕реНрддрд┐рдпреЛ рдЯреАрдореЛрдВ рдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛, рдЙрдиреНрд╣реЗрдВ рд╕реВрдХреНрд╖реНрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд╛рдП рдмрд┐рдирд╛, рд╡реНрдпрд╡рд╕рд╛рдп-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓реЗрдЦ (рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ) рдиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЗрд╕реНрддрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рдФрд░ рддреИрдпрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд╛рди рдХрд┐рдПред
рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ рдкреА.рдПрд╕
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:
- "рдЗрд╕реНрдЯрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдкрд░ рд╡рд╛рдкрд╕":
рднрд╛рдЧ 1 (рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп) ,рднрд╛рдЧ 2 (рд░реВрдЯрд┐рдВрдЧ, рдпрд╛рддрд╛рдпрд╛рдд рдирд┐рдпрдВрддреНрд░рдг) ; - ┬л
рдХрдВрдбреНрдпреВрдЯ - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рд▓реНрдХрд╛ рд╕рд░реНрд╡рд┐рд╕ рдореЗрд╢ "; - ┬л
рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ [рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП]? '.
рд╕реНрд░реЛрдд: www.habr.com