рдиреЛрдЯред рдЕрдиреБрд╡рд╛рджред:
рд╣рд╛рдореАрд▓реЗ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗрдЯрдЕрдк рдЧрд░реНрдпреМрдВ рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ Istio рд░ рдЙрджрд╛рд╣рд░рдг рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧ, рд╕реЗрдиреНрдЯреАрдореЗрдиреНрдЯ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕, Istio рдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВред
Istio рдХреЛ рд╕рд╛рде, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рд╕реЗрд╡рд╛рд╣рд░реВрд▓рд╛рдИ рд╕рд╛рдиреЛ рд░рд╛рдЦреНрди рд╕рдХреНрд╖рдо рднрдпреМрдВ рдХрд┐рдирднрдиреЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкреБрди: рдкреНрд░рдпрд╛рд╕рд╣рд░реВ, рдЯрд╛рдЗрдордЖрдЙрдЯрд╣рд░реВ, рд╕рд░реНрдХрд┐рдЯ рдмреНрд░реЗрдХрд░рд╣рд░реВ, рдЯреНрд░реЗрд╕рд┐рдЩ, рдирд┐рдЧрд░рд╛рдиреА рдЬрд╕реНрддрд╛ рддрд╣рд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред рдердк рд░реВрдкрдорд╛, рд╣рд╛рдореАрд▓реЗ рдЙрдиреНрдирдд рдкрд░реАрдХреНрд╖рдг рд░ рддреИрдирд╛рддреА рдкреНрд░рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВ: A/B рдкрд░реАрдХреНрд╖рдг, рдорд┐рд░рд░рд┐рдЩ рд░ рдХреНрдпрд╛рдирд░реА рд░реЛрд▓рдЖрдЙрдЯрд╣рд░реВред
рдирдпрд╛рдБ рд╕рд╛рдордЧреНрд░реАрдорд╛, рд╣рд╛рдореА рд╡реНрдпрд╛рдкрд╛рд░ рдореВрд▓реНрдпрдХреЛ рдорд╛рд░реНрдЧрдорд╛ рдЕрдиреНрддрд┐рдо рддрд╣рд╣рд░реВрд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВ: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг - рд░ Istio рдорд╛ рдпреЛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрдирдиреНрдж рд╣реЛ!
Istio рдорд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдо рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд░рд┐рдд рд╣реБрдиреЗрдЫреБ рднрдиреЗрд░ рдореИрд▓реЗ рдХрд╣рд┐рд▓реНрдпреИ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрджрд┐рдиред Istio рд▓реЗ рдпреА рд╡рд┐рд╖рдпрд╣рд░реВрд▓рд╛рдИ рд░рдорд╛рдЗрд▓реЛ рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЯреЗрдХреНрдиреЛрд▓реЛрдЬреА рджреГрд╖реНрдЯрд┐рдХреЛрдгрдмрд╛рдЯ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░реНрди рд╕рдХреНрдЫ, рд░ рдЕрдЭ рдмрдвреА, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░реЗрд░рд┐рдд рдЧрд░реНрди?
рдЬрд╡рд╛рдл рд╕рд░рд▓ рдЫ: Istio рд▓реЗ рдпреА рдХреНрд╖рдорддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрдХреЛ рд╕реЗрд╡рд╛рд╣рд░реВрдмрд╛рдЯ рд░рд╛рдЬрджреВрдд рдкреНрд░реЛрдХреНрд╕реАрдорд╛ рдЬрд┐рдореНрдореЗрд╡рд╛рд░реА рд╕рд╛рд░реНрдЫред рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдкреБрдЧреНрджрд╛, рддрд┐рдиреАрд╣рд░реВ рдкрд╣рд┐рд▓реЗ рдиреИ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдЕрдзрд┐рдХреГрдд рднрдЗрд╕рдХреЗрдХрд╛ рдЫрдиреН, рддреНрдпрд╕реИрд▓реЗ рддрдкрд╛рдИрдВрд▓реЗ рдЧрд░реНрдиреБ рдкрд░реНрдиреЗ рднрдиреЗрдХреЛ рд╡реНрдпрд╡рд╕рд╛рдп-рдЙрдкрдпреЛрдЧреА рдХреЛрдб рд▓реЗрдЦреНрдиреБ рд╣реЛред
рд░рд╛рдореНрд░реЛ рд▓рд╛рдЧреНрдЫ? рднрд┐рддреНрд░ рд╣реЗрд░реМрдВ!
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
рдпрд╕реНрддреЛ рд╕реНрд░реЛрдд рд╕рдВрдЧ, рдкрд╛рдпрд▓рдЯ (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 рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдлрд╛рд░рдо рднрд░реНрдиреБрд╣реЛрд╕реН:
рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ рдЫ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛, рдЬреБрди рд╣рд╛рдореА рдкрдЫрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред рдпрд╕рд▓рд╛рдИ рдпрд╕рд░реА рд▓реЗрдЦреМрдВ:
- рджрд░реНрд╢рдХ: {YOUR_AUDIENCE}
рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рдмрд╛рдБрдХреА рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЦрдгреНрдбрдХреЛ Auth0 рдкреЛрд░реНрдЯрд▓рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫрдиреН рдЖрд╡реЗрджрди - рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди (рдПрдкреАрдЖрдИрдХреЛ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ)ред
рдпрд╣рд╛рдБ рд╣рд╛рдореА рд▓реЗрдЦреНрдиреЗрдЫреМрдВ:
- рдбреЛрдореЗрди: {YOUR_DOMAIN}
- рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА: {YOUR_CLIENT_ID}
рдорд╛ рд╕реНрдХреНрд░реЛрд▓ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди рдкрд╛рда рдХреНрд╖реЗрддреНрд░рдорд╛ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рдХрд▓рдмреНрдпрд╛рдХ URL рд╣рд░реВ (рдХрд▓рдмреНрдпрд╛рдХрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд╛рдзрд╛рди рдЧрд░рд┐рдПрдХреЛ URLs), рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░рд╛ рднрдПрдкрдЫрд┐ рдХрд▓ рдкрдард╛рдЗрдиреЗ URL рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛ рдорд╛ рдпреЛ рдЫ:
http://{EXTERNAL_IP}/callback
рд░ рдХреЛ рд▓рд╛рдЧреА рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ рд▓рдЧрдЖрдЙрдЯ URL рд╣рд░реВ (рд▓рдЧ рдЖрдЙрдЯрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдорддрд┐ рджрд┐рдЗрдПрдХреЛ URL рд╣рд░реВ) рдердкреНрдиреБрд╣реЛрд╕реН:
http://{EXTERNAL_IP}/logout
рдЕрдЧрд╛рдбрд┐ рдмрдвреМрдВред
рдлреНрд░рдиреНрдЯрдПрдиреНрдб рдЕрдкрдбреЗрдЯ
рд╢рд╛рдЦрд╛рдорд╛ рд╕реНрд╡рд┐рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН auth0
REPOSITORIA [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 рдХреЛ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдкреНрд░рдорд╛рдгреАрдХрд░рдгрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╣реЛ рднрдиреЗрд░ рдмреБрдЭреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рддрд░ рдЙрдиреАрд╣рд░реВрд╕рдБрдЧ рдХреЗ рдкрд╣реБрдБрдЪ рдЫ рднрдиреЗрд░ рдЬрд╛рдиреНрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫред Istio рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдХрд░рдг рдкрдирд┐ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛, рджреБрдИ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдореВрд╣рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ (рддрд▓рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН):
- рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ (рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ) тАФ SA-WebApp рд░ SA-Frontend рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рдкрд╣реБрдБрдЪрдХреЛ рд╕рд╛рде;
- рдордзреНрдпрд╕реНрдердХрд░реНрддрд╛рд╣рд░реВ (рдордзреНрдпрд╕реНрдерд╣рд░реВ) - рд╕рдмреИ рддреАрди рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪрдХреЛ рд╕рд╛рдеред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрд╡рдзрд╛рд░рдгрд╛
рдпреА рд╕рдореВрд╣рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, рд╣рд╛рдореА Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд╣реБрдБрдЪрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрди Istio рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВред
Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
Auth0 рдкреЛрд░реНрдЯрд▓рдорд╛, рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН (рдПрдХреНрд╕рдЯреЗрдиреНрд╕рди) рд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН Auth0 рдкреНрд░рд╛рдзрд┐рдХрд░рдгред рд╕реНрдерд╛рдкрдирд╛ рдкрдЫрд┐, рдЬрд╛рдиреБрд╣реЛрд╕реН рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рд╕реНрддрд╛рд░, рд░ рддреНрдпрд╣рд╛рдБ - рднрд╛рдБрдбрд╛рджрд╛рд░рдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ рд╢реАрд░реНрд╖ рджрд╛рдпрд╛рдБрдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реЗрд░ рд░ рдЙрдкрдпреБрдХреНрдд рдореЗрдиреБ рд╡рд┐рдХрд▓реНрдк рдЪрдпрди рдЧрд░реЗрд░ (рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди)ред рд╕рдореВрд╣рд╣рд░реВ рд╕рдХреНрд░рд┐рдп рдЧрд░реНрдиреБрд╣реЛрд╕реН (рд╕рдореВрд╣рд╣рд░реВ) рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдирд┐рдпрдо рдмрдЯрдирдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН (рдирд┐рдпрдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН).
рд╕рдореВрд╣рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╡рд┐рд╕реНрддрд╛рд░ рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН рд╕рдореВрд╣ рд░ рдПрдЙрдЯрд╛ рд╕рдореВрд╣ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдордзреНрдпрд╕реНрдеред рд╣рд╛рдореА рд╕рдмреИ рдкреНрд░рдорд╛рдгрд┐рдХрд░рдг рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдирд┐рдпрдорд┐рдд рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рдХреЛ рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрдиреЗ рднрдПрдХрд╛рд▓реЗ рдЙрдиреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдердк рд╕рдореВрд╣ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред
рдПрдЙрдЯрд╛ рд╕рдореВрд╣ рдЫрд╛рдиреНрдиреБрд╣реЛрд╕реН рдордзреНрдпрд╕реНрде, рдерд┐рдЪреНрдиреБрд╣реЛрд╕реН рд╕рджрд╕реНрдпрд╣рд░реВ рдердкреНрдиреБрд╣реЛрд╕реН, рдЖрдлреНрдиреЛ рдореБрдЦреНрдп рдЦрд╛рддрд╛ рдердкреНрдиреБрд╣реЛрд╕реНред рдХреЗрд╣реА рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рдкрд╣реБрдБрдЪ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдХреБрдиреИ рд╕рдореВрд╣ рдмрд┐рдирд╛ рдЫреЛрдбреНрдиреБрд╣реЛрд╕реНред (рдирдпрд╛рдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ Auth0 рдкреЛрд░реНрдЯрд▓ > рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ > рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН.)
рдкрд╣реБрдБрдЪ рдЯреЛрдХрдирдорд╛ рд╕рдореВрд╣ рджрд╛рд╡реА рдердкреНрдиреБрд╣реЛрд╕реН
рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд╕рдореВрд╣рд╣рд░реВрдорд╛ рдердкрд┐рдПрдХрд╛ рдЫрдиреН, рддрд░ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдкрд╣реБрдБрдЪ рдЯреЛрдХрдирд╣рд░реВрдорд╛ рдкрдирд┐ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рд╣реБрдиреБрдкрд░реНрдЫред OpenID Connect рдХреЛ рдкрд╛рд▓рдирд╛ рдЧрд░реНрди рд░ рдПрдХреИ рд╕рдордпрдорд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдЪрд╛рд╣рд┐рдиреЗ рд╕рдореВрд╣рд╣рд░реВ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрди, рдЯреЛрдХрдирд▓реЗ рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдердкреНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреЗрдЫред
рдирд┐рдпрдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, 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
) рдлрд░реНрдХрд╛рдЗрдПрдХреЛ рдкрд╣реБрдБрдЪ рдЯреЛрдХрдирдорд╛ред рдпреЛ рд▓реЗрдЦрдХреЛ рдЕрд░реНрдХреЛ рдЦрдгреНрдбрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╖рдп рд╣реЛред
Istio рдорд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди
рдХрд╛рдо рдЧрд░реНрди рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ 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
; - реи - рд╣рд╛рдореА рд╣рд╛рдореНрд░рд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕реВрдЪреАрдмрджреНрдз рдЧрд░реНрдЫреМрдВред
рдирд┐рдореНрди рдЖрджреЗрд╢рдХреЛ рд╕рд╛рде рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд▓рд╛рдЧреВ рдЧрд░реМрдВ:
$ 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 - рдпреЛ рд╕реЗрд╡рд╛рд░реЛрд▓ рдХрд╕рдХреЛ рд╣реЛ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджрдЫред
рд╕рд╛рдзрд╛рд░рдг рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ рдЕрдиреБрдорддрд┐ рджрд┐рдиреЗрдЫреМрдВ (
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
рджреВрддрд╣рд░реВрдорд╛ рдХреНрдпрд╛рд╕рд┐рдЩрдХреЛ рдХрд╛рд░рдгрд▓реЗ, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдирд┐рдпрдорд╣рд░реВ рд▓рд╛рдЧреВ рд╣реБрди рдХреЗрд╣реА рдорд┐рдиреЗрдЯ рд▓рд╛рдЧреНрди рд╕рдХреНрдЫред рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВ рд░ рдордзреНрдпрд╕реНрдердХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдкрд╣реБрдБрдЪрдХреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░рд╣рд░реВ рдЫрдиреН рднрдиреЗрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдпрд╕ рднрд╛рдЧрдорд╛ рдирд┐рд╖реНрдХрд░реНрд╖
рдЧрдореНрднреАрд░рддрд╛рдХрд╛ рд╕рд╛рде, рдХреЗ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓, рд╕рд╣рдЬ, рд╕реНрдХреЗрд▓реЗрдмрд▓ рд░ рд╕реБрд░рдХреНрд╖рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рджреЗрдЦреНрдиреБрднрдПрдХреЛ рдЫ?
рдХреЗрд╡рд▓ рддреАрди Istio рд╕реНрд░реЛрддрд╣рд░реВ (RbacConfig, ServiceRole, рд░ ServiceRoleBinding) рд▓рд╛рдИ рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдЕрдиреНрддрд┐рдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣реБрдБрдЪрдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдгрдорд╛ рд░рд╛рдореНрд░реЛ рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛред
рдпрд╕рдХрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рджреВрдд рд╕реЗрд╡рд╛рд╣рд░реВрдмрд╛рдЯ рдпреА рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдЦреНрдпрд╛рд▓ рд░рд╛рдЦреЗрдХрд╛ рдЫреМрдВ, рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди:
- рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛ рд░ рдмрдЧрд╣рд░реВ рд╣реБрди рд╕рдХреНрдиреЗ рдЬреЗрдиреЗрд░рд┐рдХ рдХреЛрдбрдХреЛ рдорд╛рддреНрд░рд╛ рдШрдЯрд╛рдЙрдиреЗ;
- рдмреЗрд╡рдХреВрдл рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдШрдЯрд╛рдЙрдБрджреИ рдЬрд╕рдорд╛ рдПрдЙрдЯрд╛ рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ рдмрд╛рд╣рд┐рд░рдмрд╛рдЯ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рднрдпреЛ рд░ рдпрд╕рд▓рд╛рдИ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрди рдмрд┐рд░реНрд╕рд┐рдпреЛ;
- рд╣рд░реЗрдХ рдкрдЯрдХ рдирдпрд╛рдБ рднреВрдорд┐рдХрд╛ рд╡рд╛ рдЕрдзрд┐рдХрд╛рд░ рдердкреНрджрд╛ рд╕рдмреИ рд╕реЗрд╡рд╛рд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛рд▓рд╛рдИ рд╣рдЯрд╛рдЙрдБрджреИ;
- рдирдпрд╛рдБ рд╕реЗрд╡рд╛рд╣рд░реВ рд╕рд░рд▓, рд╕реБрд░рдХреНрд╖рд┐рдд рд░ рдЫрд┐рдЯреЛ рд░рд╣рдиред
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
Istio рд▓реЗ рдЯреЛрд▓реАрд╣рд░реВрд▓рд╛рдИ рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ рдУрднрд░рд╣реЗрдб рдердкреЗ рдмрд┐рдирд╛, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдорд╛рдЗрдХреНрд░реЛ рд╕реНрдерд┐рддрд┐рдорд╛ рдлрд░реНрдХрд╛рдПрд░ рд╡реНрдпрд╛рдкрд╛рд░-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╣рд░реВрдорд╛ рдЖрдлреНрдирд╛ рд╕реНрд░реЛрддрд╣рд░реВ рдХреЗрдиреНрджреНрд░рд┐рдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рд▓реЗрдЦ (рддреАрди рднрд╛рдЧрд╣рд░реВрдорд╛) рд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ Istio рдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░реНрди рдЖрдзрд╛рд░рднреВрдд рдЬреНрдЮрд╛рди рд░ рддрдпрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реЗрдХреЛ рдЫред
рдЕрдиреБрд╡рд╛рджрдХрдмрд╛рдЯ PS
рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:
- "рдЗрд╕реНрдЯрд┐рдУрдХреЛ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВрдорд╛ рдлрд░реНрдХрдиреБрд╣реЛрд╕реН":
рднрд╛рдЧ рез (рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрдХреЛ рдкрд░рд┐рдЪрдп) ,рднрд╛рдЧ реи (рдорд╛рд░реНрдЧ, рдЯреНрд░рд╛рдлрд┐рдХ рдирд┐рдпрдиреНрддреНрд░рдг) ; - ┬л
рдХрдиреНрдбреНрдпреБрдЯ - Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ рд╣рд▓реНрдХрд╛ рд╕реЗрд╡рд╛ рдЬрд╛рд▓ ┬╗; - ┬л
рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХреЗ рд╣реЛ рд░ рдорд▓рд╛рдИ рдХрд┐рди рдЪрд╛рд╣рд┐рдиреНрдЫ [рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕рдХреЛ рд╕рд╛рде рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рд▓рд╛рдЧрд┐]? "ред
рд╕реНрд░реЛрдд: www.habr.com