рдиреЛрдВрдж. рдЕрдиреБрд╡рд╛рдж:
рдЖрдореНрд╣реА 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 рдкреЛрд░реНрдЯрд▓ > API > API рддрдпрд╛рд░ рдХрд░рд╛ рдЖрдгрд┐ рдлреЙрд░реНрдо рднрд░рд╛:
рдпреЗрдереЗ рдорд╣рддреНрд╡рд╛рдЪреА рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдЖрдкрдг рдирдВрддрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдордзреНрдпреЗ рдХрд░реВ. рдЪрд▓рд╛ рддреЗ рдЕрд╕реЗ рд▓рд┐рд╣реВрдпрд╛:
- рдкреНрд░реЗрдХреНрд╖рдХ: {YOUR_AUDIENCE}
рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рдЙрд░реНрд╡рд░рд┐рдд рддрдкрд╢реАрд▓ рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ Auth0 рдкреЛрд░реНрдЯрд▓рд╡рд░ рдЖрд╣реЗрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ - рдирд┐рд╡рдбрд╛ рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ (API рд╕рд╣ рдЖрдкреЛрдЖрдк рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ).
рдпреЗрдереЗ рдЖрдореНрд╣реА рд▓рд┐рд╣реВ:
- рдбреЛрдореЗрди: {YOUR_DOMAIN}
- рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдпрдбреА: {YOUR_CLIENT_ID}
рдкрд░реНрдпрдВрдд рд╕реНрдХреНрд░реЛрд▓ рдХрд░рд╛ рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ рдордЬрдХреВрд░ рдлреАрд▓реНрдбрд╡рд░ рдЕрдиреБрдордд рдХреЙрд▓рдмреЕрдХ URL (рдХреЙрд▓рдмреЕрдХрд╕рд╛рдареА рд╕реЛрдбрд╡рд▓реЗрд▓реЗ URL), рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рдХреЙрд▓ рдХреЛрдареЗ рдкрд╛рдард╡рд▓рд╛ рдЬрд╛рд╡рд╛ рддреЗ рдЖрдореНрд╣реА URL рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рддреЗ рдЖрд╣реЗ:
http://{EXTERNAL_IP}/callback
рдЖрдгрд┐ рд╕рд╛рдареА рдЕрдиреБрдордд рд▓реЙрдЧрдЖрдЙрдЯ URL (рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реЗрд▓реНрдпрд╛ URL) рдЬреЛрдбрд╛:
http://{EXTERNAL_IP}/logout
рдЪрд▓рд╛ рдлреНрд░рдВрдЯрдПрдВрдб рд╡рд░ рдЬрд╛рдКрдпрд╛.
рдлреНрд░рдВрдЯрдПрдВрдб рдЕрдкрдбреЗрдЯ
рд╢рд╛рдЦреЗрдд рдЬрд╛ auth0
REPOZITORIA [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
; - 2 тАФ рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╕реЗрд╡рд╛рдВрдЪреА рдпрд╛рджреА рдХрд░рддреЛ.
рдЦрд╛рд▓реАрд▓ рдХрдорд╛рдВрдбрд╕рд╣ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░реВрдпрд╛:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created
рд╕рд░реНрд╡ рд╕реЗрд╡рд╛рдВрдирд╛ рдЖрддрд╛ рднреВрдорд┐рдХрд╛-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рд╕рд░реНрд╡ рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдореА рдкреНрд░рддрд┐рд╕рд╛рдж рдорд┐рд│реЗрд▓ RBAC: access denied
. рдЖрддрд╛ рдЕрдзрд┐рдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рджреНрдпрд╛.
рдирд┐рдпрдорд┐рдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рд╡реЗрд╢ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди
рд╕рд░реНрд╡ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ SA-Frontend рдЖрдгрд┐ SA-WebApp рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реАрд▓ Istio рд╕рдВрд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░реВрди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА:
- рд╕реЗрд╡рд╛рднреВрдорд┐рдХрд╛ тАФ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреЗ рдЕрдзрд┐рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ;
- рд╕рд░реНрд╡реНрд╣рд┐рд╕рд░реЛрд▓рдмрд╛рдЗрдВрдбрд┐рдВрдЧ тАФ рд╣реА рд╕рд░реНрд╡реНрд╣рд┐рд╕рд░реЛрд▓ рдХреЛрдгрд╛рдЪреА рдЖрд╣реЗ рд╣реЗ рдард░рд╡рддреЗ.
рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА рдЖрдореНрд╣реА рдХрд╛рд╣реА рд╕реЗрд╡рд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрдК (
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
рд╕рд░реНрд╡ рдкреГрд╖реНрда рдЕрднреНрдпрд╛рдЧрддрд╛рдВрдирд╛ рд╕рд░реНрд╡реНрд╣рд┐рд╕рд░реЛрд▓ рд▓рд╛рдЧреВ рдХрд░рд╛ (
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 рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореВрд▓рднреВрдд рдЬреНрдЮрд╛рди рдЖрдгрд┐ рддрдпрд╛рд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕реВрдЪрдирд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ.
рдЕрдиреБрд╡рд╛рджрдХрд╛рдХрдбреВрди рдкреБрдирд╢реНрдЪ
рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:
- "рдЗрд╕реНрдЯрд┐рдУрд╕рд╣ рдорд╛рдпрдХреНрд░реЛ рд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рдХрдбреЗ рдкрд░рдд рдЬрд╛":
рднрд╛рдЧ рез (рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪрд╛ рдкрд░рд┐рдЪрдп) ,рднрд╛рдЧ реи (рдорд╛рд░реНрдЧ, рд╡рд╛рд╣рддреВрдХ рдирд┐рдпрдВрддреНрд░рдг) ; - ┬л
рдХрдВрдбреНрдпреБрдЯ - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╕рд╛рдареА рд╣рд▓рдХреА рд╕реЗрд╡рд╛ рдЬрд╛рд│реА "; - ┬л
рд╕рд░реНрд╡реНрд╣рд┐рд╕ рдореЗрд╢ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп рдЖрдгрд┐ рдорд▓рд╛ [рдорд╛рдпрдХреНрд░реЛрд╕рд░реНрд╡реНрд╣рд┐рд╕реЗрд╕рд╕рд╣ рдХреНрд▓рд╛рдЙрдб рдНрдкреНрд▓рд┐рдХреЗрд╢рдирд╕рд╛рдареА] рдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЖрд╣реЗ? ┬╗.
рд╕реНрддреНрд░реЛрдд: www.habr.com