Lura għall-mikroservizzi b'Istio. Parti 3

Lura għall-mikroservizzi b'Istio. Parti 3

Nota. transl.: L-ewwel parti din is-serje kienet iddedikata biex issir taf il-kapaċitajiet ta 'Istio u turihom fl-azzjoni, tieni — ir-rotot irfinat u l-ġestjoni tat-traffiku tan-netwerk. Issa se nitkellmu dwar is-sigurtà: biex nuru l-funzjonijiet bażiċi relatati magħha, l-awtur juża s-servizz tal-identità Auth0, iżda fornituri oħra jistgħu jiġu kkonfigurati b'mod simili.

Waqqafna raggruppament Kubernetes li fih skjerajna Istio u applikazzjoni ta’ mikroservizz eżempju, Sentiment Analysis, biex nuru l-kapaċitajiet ta’ Istio.

B'Istio, stajna nżommu s-servizzi tagħna żgħar għax m'għandhomx bżonn jimplimentaw saffi bħal Retries, Timeouts, Circuit Breakers, Tracing, Monitoring. . Barra minn hekk, użajna tekniki ta' ttestjar u skjerament avvanzati: ittestjar A/B, mirroring u rollouts canary.

Lura għall-mikroservizzi b'Istio. Parti 3

Fil-materjal il-ġdid, se nittrattaw is-saffi finali fit-triq lejn il-valur tan-negozju: awtentikazzjoni u awtorizzazzjoni - u f'Istio huwa pjaċir reali!

Awtentikazzjoni u awtorizzazzjoni f'Istio

Qatt ma kont nemmen li se nkun ispirat mill-awtentikazzjoni u l-awtorizzazzjoni. X'jista' joffri Istio minn perspettiva teknoloġika biex dawn is-suġġetti jkunu divertenti u, aktar u aktar, ta' ispirazzjoni għalik?

It-tweġiba hija sempliċi: Istio tbiddel ir-responsabbiltà għal dawn il-kapaċitajiet mis-servizzi tiegħek għall-proxy tal-Mibgħut. Sakemm it-talbiet jaslu s-servizzi, huma diġà ġew awtentikati u awtorizzati, għalhekk kull ma trid tagħmel hu li tikteb kodiċi utli għan-negozju.

Ħsejjes tajba? Ejja nagħtu ħarsa ġewwa!

Awtentikazzjoni b'Auth0

Bħala server għall-ġestjoni tal-identità u l-aċċess, se nużaw Auth0, li għandha verżjoni ta 'prova, hija intuwittiva biex tużaha u sempliċement togħġobni. Madankollu, l-istess prinċipji jistgħu jiġu applikati għal kwalunkwe ieħor Implimentazzjonijiet OpenID Connect: KeyCloak, IdentityServer u ħafna oħrajn.

Biex tibda, mur fuq Awth0 Portal bil-kont tiegħek, oħloq kerrej (inkwilin - "kerrej", unità loġika ta 'iżolament, għal aktar dettalji ara dokumentazzjoni - madwar. trad.) u mur Applikazzjonijiet > App Defaultbilli tagħżel dominju, kif muri fil-screenshot hawn taħt:

Lura għall-mikroservizzi b'Istio. Parti 3

Speċifika dan id-dominju fil-fajl resource-manifests/istio/security/auth-policy.yaml (sors):

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

B'tali riżorsa, Pilot (wieħed mit-tliet komponenti bażiċi tal-Pjan ta' Kontroll f'Istio - madwar trad.) jikkonfigura Envoy biex jawtentika t-talbiet qabel jgħaddihom lis-servizzi: sa-web-app и sa-feedback. Fl-istess ħin, il-konfigurazzjoni mhix applikata għall-Mibgħuta tas-servizz sa-frontend, li jippermettilna nħallu l-frontend mhux awtentikata. Biex tapplika l-Politika, mexxi l-kmand:

$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io “auth-policy” created

Irritorna għall-paġna u agħmel talba - tara li tispiċċa bl-istatus 401 mhux awtorizzat. Issa ejja nidderieġu mill-ġdid lill-utenti ta 'frontend biex jawtentikaw b'Auth0.

Awtentikazzjoni tat-talbiet b'Auth0

Biex tawtentika t-talbiet tal-utenti finali, trid toħloq API f'Auth0 li tirrappreżenta s-servizzi awtentikati (reviżjonijiet, dettalji u klassifikazzjonijiet). Biex toħloq API, mur fuq Awth0 Portal > APIs > Oħloq API u imla l-formola:

Lura għall-mikroservizzi b'Istio. Parti 3

L-informazzjoni importanti hawnhekk hija identifikatur, li se nużaw aktar tard fl-iskrittura. Ejja niktbuha hekk:

  • Udjenza: {YOUR_UDENCE}

Il-bqija tad-dettalji li għandna bżonn jinsabu fuq il-Portal Auth0 fit-taqsima applikazzjonijiet — agħżel Applikazzjoni tat-Test (maħluq awtomatikament flimkien mal-API).

Hawnhekk se niktbu:

  • dominju: {YOUR_DOMAIN}
  • Id-Klijent: {YOUR_CLIENT_ID}

Skrollja għal Applikazzjoni tat-Test għall-qasam tat-test URLs ta' Callback Permessi (URLs solvuti għas-callback), li fihom nispeċifikaw il-URL fejn għandha tintbagħat is-sejħa wara li titlesta l-awtentikazzjoni. Fil-każ tagħna huwa:

http://{EXTERNAL_IP}/callback

U għal URLs tal-Loghut Permessi (URLs permessi biex tilloggja) żid:

http://{EXTERNAL_IP}/logout

Ejja nimxu fuq il-frontend.

Aġġornament tal-frontend

Aqleb għall-fergħa auth0 repożitorju [istio-mastery]. F'din il-fergħa, il-kodiċi tal-frontend jinbidel biex jerġa' jidderieġi l-utenti lejn Auth0 għall-awtentikazzjoni u juża t-token JWT f'talbiet lil servizzi oħra. Din tal-aħħar hija implimentata kif ġej (App.js):

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));
}

Biex tibdel il-frontend biex tuża d-dejta tal-kerrej f'Auth0, iftaħ sa-frontend/src/services/Auth.js u ibdel fih il-valuri li ktibna hawn fuq (Auth.js):

const Config = {
    clientID: '{YOUR_CLIENT_ID}',
    domain:'{YOUR_DOMAIN}',
    audience: '{YOUR_AUDIENCE}',
    ingressIP: '{EXTERNAL_IP}' // Используется для редиректа после аутентификации
}

L-applikazzjoni hija lesta. Speċifika l-ID Docker tiegħek fil-kmandi hawn taħt meta tibni u tuża l-bidliet li saru:

$ 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

Ipprova l-app! Inti ser tiġi ridirett lejn Auth0, fejn għandek bżonn tidħol (jew tirreġistra), u wara tintbagħat lura lejn il-paġna li minnha se jsiru talbiet diġà awtentikati. Jekk tipprova l-kmandi msemmija fl-ewwel partijiet tal-artiklu b'curl, ikollok il-kodiċi Kodiċi tal-Istat 401, li jindika li t-talba mhix awtorizzata.

Ejja nieħdu l-pass li jmiss - jawtorizzaw it-talbiet.

Awtorizzazzjoni b'Auth0

L-awtentikazzjoni tippermettilna nifhmu min hu utent, iżda hija meħtieġa awtorizzazzjoni biex inkunu nafu għal xiex għandhom aċċess. Istio joffri għodda għal dan ukoll.

Bħala eżempju, ejja noħolqu żewġ gruppi ta 'utenti (ara d-dijagramma hawn taħt):

  • Membri (utenti) — b'aċċess biss għas-servizzi SA-WebApp u SA-Frontend;
  • Moderaturi (moderaturi) — b'aċċess għat-tliet servizzi kollha.

Lura għall-mikroservizzi b'Istio. Parti 3
Kunċett ta' awtorizzazzjoni

Biex noħolqu dawn il-gruppi, se nużaw l-estensjoni Awtorizzazzjoni Auth0 u nużaw Istio biex nipprovdulhom livelli differenti ta 'aċċess.

Installazzjoni u konfigurazzjoni tal-Awtorizzazzjoni tal-Awtorizzazzjoni

Fil-portal Auth0, mur l-estensjonijiet (estensjonijiet) u installa Awtorizzazzjoni0. Wara l-installazzjoni, mur Estensjoni ta' Awtorizzazzjoni, u hemm - għall-konfigurazzjoni tal-kerrej billi tikklikkja fuq il-lemin ta 'fuq u tagħżel l-għażla tal-menu xierqa (Konfigurazzjoni). Attiva gruppi (Gruppi) u kklikkja fuq il-buttuna tal-pubblikazzjoni tar-regola (Ippubblika r-regola).

Lura għall-mikroservizzi b'Istio. Parti 3

Oħloq gruppi

Fl-Estensjoni tal-Awtorizzazzjoni mur gruppi u toħloq grupp Moderaturi. Peress li se nittrattaw lill-utenti awtentikati kollha bħala utenti regolari, m'hemmx għalfejn noħolqu grupp addizzjonali għalihom.

Agħżel grupp Moderaturi, Agħfas Żid Membri, żid il-kont prinċipali tiegħek. Ħalli xi utenti mingħajr ebda grupp biex tiżgura li huma mċaħħda mill-aċċess. (Utenti ġodda jistgħu jinħolqu manwalment permezz Awth0 Portal > Utenti > Oħloq Utent.)

Żid Talba tal-Grupp ma' Access Token

L-utenti ġew miżjuda mal-gruppi, iżda din l-informazzjoni trid tiġi riflessa wkoll fit-tokens tal-aċċess. Biex tikkonforma ma 'OpenID Connect u fl-istess ħin tirritorna l-gruppi li għandna bżonn, it-token jeħtieġ li jżid tiegħu stess talba tad-dwana. Implimentati permezz tar-regoli Auth0.

Biex toħloq regola, mur Awth0 Portal biex Regoli, Agħfas Oħloq Regola u agħżel regola vojta mill-mudelli.

Lura għall-mikroservizzi b'Istio. Parti 3

Ikkopja l-kodiċi hawn taħt u ssejvjah bħala regola ġdida Żid Talba tal-Grupp (namespacedGroup.js):

function (user, context, callback) {
    context.accessToken['https://sa.io/group'] = user.groups[0];
    return callback(null, user, context);
}

Innota: Dan il-kodiċi jieħu l-ewwel grupp ta 'utenti definit fl-Estensjoni ta' Awtorizzazzjoni u jżidu mat-token ta 'aċċess bħala talba tad-dwana (taħt l-ispazju tal-isem tiegħu, kif meħtieġ minn Auth0).

Irritorna għall-paġna Regoli u ċċekkja li għandek żewġ regoli miktuba fl-ordni li ġejja:

  • awth0-estensjoni-awtorizzazzjoni
  • Żid Talba tal-Grupp

L-ordni hija importanti għaliex il-qasam tal-grupp jirċievi r-regola b'mod asinkroniku awth0-estensjoni-awtorizzazzjoni u wara tiġi miżjuda bħala talba bit-tieni regola. Ir-riżultat huwa token ta' aċċess bħal dan:

{
 "https://sa.io/group": "Moderators",
 "iss": "https://sentiment-analysis.eu.auth0.com/",
 "sub": "google-oauth2|196405271625531691872"
 // [сокращено для наглядности]
}

Issa trid tikkonfigura l-prokura tal-Envoy biex tiċċekkja l-aċċess tal-utent, li għalih il-grupp jinġibed mit-talba (https://sa.io/group) fit-token ta' aċċess ritornat. Dan huwa s-suġġett għat-taqsima li jmiss tal-artiklu.

Konfigurazzjoni ta' awtorizzazzjoni f'Istio

Biex taħdem l-awtorizzazzjoni, trid tattiva RBAC għal Istio. Biex tagħmel dan, se nużaw il-konfigurazzjoni li ġejja:

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" 

Spjegazzjoni:

  • 1 — Attiva RBAC biss għas-servizzi u l-ispazji tal-isem elenkati fil-qasam Inclusion;
  • 2 — aħna telenkaw lista tas-servizzi tagħna.

Ejja napplikaw il-konfigurazzjoni bil-kmand li ġej:

$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created

Is-servizzi kollha issa jeħtieġu Kontroll tal-Aċċess Ibbażat fuq Rwol. Fi kliem ieħor, l-aċċess għas-servizzi kollha huwa pprojbit u jirriżulta f'rispons RBAC: access denied. Issa ejja nħallu aċċess għal utenti awtorizzati.

Konfigurazzjoni ta 'aċċess għal utenti regolari

L-utenti kollha għandu jkollhom aċċess għas-servizzi SA-Frontend u SA-WebApp. Implimentat bl-użu tar-riżorsi Istio li ġejjin:

  • ServiceRole — jiddetermina d-drittijiet li għandu l-utent;
  • ServiceRoleBinding — jiddetermina lil min jappartjeni dan is-ServiceRole.

Għall-utenti ordinarji se nħallu aċċess għal ċerti servizzi (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: ["*"]

U permezz regular-user-binding applika ServiceRole għall-viżitaturi kollha tal-paġna (regolari-user-service-role-binding.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: regular-user-binding
  namespace: default
spec:
  subjects:
  - user: "*"
  roleRef:
    kind: ServiceRole
    name: "regular-user"

"L-utenti kollha" tfisser li utenti mhux awtentikati se jkollhom ukoll aċċess għall-SA WebApp? Le, il-politika se tiċċekkja l-validità tat-token JWT.

Ejja napplikaw il-konfigurazzjonijiet:

$ 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

Konfigurazzjoni ta' aċċess għall-moderaturi

Għall-moderaturi, irridu nippermettu aċċess għas-servizzi kollha (mod-service-role.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: mod-user
  namespace: default
spec:
  rules:
  - services: ["*"]
    paths: ["*"]
    methods: ["*"]

Iżda rridu tali drittijiet biss għal dawk l-utenti li t-token ta 'aċċess tagħhom fih it-talba https://sa.io/group b'tifsira Moderators (mod-service-role-binding.yaml):

apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: mod-user-binding
  namespace: default
spec:
  subjects:
  - properties:
      request.auth.claims[https://sa.io/group]: "Moderators"
  roleRef:
    kind: ServiceRole
name: "mod-user" 

Ejja napplikaw il-konfigurazzjonijiet:

$ 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

Minħabba l-caching fil-mibgħuta, jista' jieħu ftit minuti biex ir-regoli ta' awtorizzazzjoni jidħlu fis-seħħ. Imbagħad tista' tiżgura li l-utenti u l-moderaturi jkollhom livelli differenti ta' aċċess.

Konklużjoni fuq din il-parti

Bis-serjetà għalkemm, qatt rajt approċċ aktar sempliċi, mingħajr sforz, skalabbli u sigur għall-awtentikazzjoni u l-awtorizzazzjoni?

Tliet riżorsi Istio biss (RbacConfig, ServiceRole, u ServiceRoleBinding) kienu meħtieġa biex jinkiseb kontroll dettaljat fuq l-awtentikazzjoni u l-awtorizzazzjoni tal-aċċess tal-utent finali għas-servizzi.

Barra minn hekk, ħadna ħsieb dawn il-kwistjonijiet mis-servizzi tal-mibgħuta tagħna, u ksibna:

  • it-tnaqqis tal-ammont ta' kodiċi ġeneriku li jista' jkun fih problemi ta' sigurtà u bugs;
  • it-tnaqqis tan-numru ta' sitwazzjonijiet stupidi li fihom endpoint wieħed irriżulta li kien aċċessibbli minn barra u nesa jirrapportah;
  • telimina l-ħtieġa li jiġu aġġornati s-servizzi kollha kull darba li jiżdied rwol jew dritt ġdid;
  • li servizzi ġodda jibqgħu sempliċi, siguri u veloċi.

Output

Istio jippermetti lit-timijiet jiffokaw ir-riżorsi tagħhom fuq ħidmiet kritiċi għan-negozju mingħajr ma jżidu l-overhead għas-servizzi, u jreġġgħuhom lura għal mikro status.

L-artikolu (fi tliet partijiet) ipprovda għarfien bażiku u istruzzjonijiet prattiċi lesti biex tibda b'Istio fi proġetti reali.

PS minn traduttur

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment