Atgriezties uz mikropakalpojumiem ar Istio. 3. daļa
PiezÄ«me. tulk.: PirmÄ daļa Ŕī sÄrija bija veltÄ«ta Istio iespÄju iepazÄ«Å”anai un demonstrÄÅ”anai darbÄ«bÄ, otrais ā precÄ«zi noregulÄta marÅ”rutÄÅ”ana un tÄ«kla trafika pÄrvaldÄ«ba. Tagad parunÄsim par droŔību: lai demonstrÄtu ar to saistÄ«tÄs pamatfunkcijas, autors izmanto Auth0 identitÄtes servisu, taÄu lÄ«dzÄ«gi var konfigurÄt citus pakalpojumu sniedzÄjus.
MÄs izveidojÄm Kubernetes klasteru, kurÄ izvietojÄm Istio un mikropakalpojuma lietojumprogrammas piemÄru Sentiment Analysis, lai parÄdÄ«tu Istio iespÄjas.
Izmantojot Istio, mÄs varÄjÄm saglabÄt savus pakalpojumus mazos, jo tiem nav jÄievieÅ” tÄdi slÄÅi kÄ AtkÄrtoti mÄÄ£inÄjumi, Taimauts, StrÄvas slÄdži, IzsekoÅ”ana, UzraudzÄ«ba. TurklÄt mÄs izmantojÄm uzlabotas testÄÅ”anas un izvietoÅ”anas metodes: A/B testÄÅ”anu, spoguļoÅ”anu un kanÄriju izlaiÅ”anu.
JaunajÄ materiÄlÄ mÄs apskatÄ«sim pÄdÄjos slÄÅus ceÄ¼Ä uz biznesa vÄrtÄ«bu: autentifikÄciju un autorizÄciju ā un Istio tas ir patiess prieks!
AutentifikÄcija un autorizÄcija Istio
Es nekad nebÅ«tu ticÄjis, ka mani iedvesmos autentifikÄcija un autorizÄcija. Ko Istio var piedÄvÄt no tehnoloÄ£iju perspektÄ«vas, lai padarÄ«tu Ŕīs tÄmas jautras un, vÄl jo vairÄk, iedvesmojoÅ”as?
Atbilde ir vienkÄrÅ”a: Istio nodod atbildÄ«bu par Ŕīm iespÄjÄm no jÅ«su pakalpojumiem uz sÅ«tÅa starpniekserveri. KamÄr pieprasÄ«jumi sasniedz pakalpojumus, tie jau ir autentificÄti un autorizÄti, tÄpÄc atliek tikai uzrakstÄ«t biznesam noderÄ«gu kodu.
IzklausÄs labi? IelÅ«kosimies iekÅ”Ä!
AutentifikÄcija ar Auth0
KÄ serveri identitÄtes un piekļuves pÄrvaldÄ«bai mÄs izmantosim Auth0, kam ir izmÄÄ£inÄjuma versija, kas ir intuitÄ«vi lietojams, un man tas vienkÄrÅ”i patÄ«k. TomÄr tos paÅ”us principus var attiecinÄt uz jebkuru citu OpenID Connect ievieÅ”anas: KeyCloak, IdentityServer un daudzi citi.
Lai sÄktu, dodieties uz Auth0 portÄls ar savu kontu izveidojiet nomnieku (Ä«rnieks - āÄ«rnieksā, izolÄcijas loÄ£iskÄ vienÄ«ba, sÄ«kÄk sk dokumentÄcija ā apm. tulk.) un dodieties uz Programmas > NoklusÄjuma programmaizvÄloties DomÄns, kÄ parÄdÄ«ts zemÄk esoÅ”ajÄ ekrÄnuzÅÄmumÄ:
Izmantojot Å”Ädu resursu, Pilot (viena no trim galvenajÄm vadÄ«bas plaknes sastÄvdaļÄm Istio ā aptuveni tulk.) konfigurÄ Envoy, lai autentificÄtu pieprasÄ«jumus pirms to pÄrsÅ«tÄ«Å”anas pakalpojumiem: sa-web-app Šø sa-feedback. TajÄ paÅ”Ä laikÄ konfigurÄcija netiek piemÄrota pakalpojumu sÅ«tÅiem sa-frontend, ļaujot mums atstÄt priekÅ”galu neautentificÄtu. Lai piemÄrotu politiku, palaidiet komandu:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io āauth-policyā created
Atgriezieties lapÄ un veiciet pieprasÄ«jumu - jÅ«s redzÄsiet, ka tas beidzas ar statusu 401 nesankcionÄta. Tagad novirzÄ«sim priekÅ”gala lietotÄjus, lai tie autentificÄtos, izmantojot Auth0.
PieprasÄ«jumu autentifikÄcija, izmantojot Auth0
Lai autentificÄtu galalietotÄju pieprasÄ«jumus, pakalpojumÄ Auth0 ir jÄizveido API, kas pÄrstÄvÄs autentificÄtos pakalpojumus (atsauksmes, informÄciju un vÄrtÄjumus). Lai izveidotu API, dodieties uz Auth0 portÄls > API > Izveidot API un aizpildiet veidlapu:
Å eit ir svarÄ«ga informÄcija identifikators, ko izmantosim vÄlÄk skriptÄ. PierakstÄ«sim to Å”Ädi:
audience: {YOUR_AUDIENCE}
PÄrÄjÄ informÄcija, kas mums nepiecieÅ”ama, atrodas Auth0 portÄla sadaÄ¼Ä AplikÄcijas - atlasiet Testa lietojumprogramma (tiek izveidots automÄtiski kopÄ ar API).
Å eit mÄs rakstÄ«sim:
DomÄns: {YOUR_DOMAIN}
Klienta ID: {YOUR_CLIENT_ID}
Ritiniet lÄ«dz Testa lietojumprogramma uz teksta lauku Atļautie atzvanÄ«Å”anas URL (atrisinÄtie URL atzvanÄ«Å”anai), kurÄ mÄs norÄdÄm URL, uz kuru jÄnosÅ«ta zvans pÄc autentifikÄcijas pabeigÅ”anas. MÅ«su gadÄ«jumÄ tas ir:
http://{EXTERNAL_IP}/callback
Un par Atļautie atteikÅ”anÄs URL (atļauti URL, lai izietu) pievienojiet:
http://{EXTERNAL_IP}/logout
PÄrejam uz priekÅ”pusi.
Frontend atjauninÄjums
PÄrslÄgties uz filiÄli auth0 krÄtuve [istio-mastery]. Å ajÄ nozarÄ priekÅ”gala kods tiek mainÄ«ts, lai novirzÄ«tu lietotÄjus uz Auth0 autentifikÄcijai un izmantotu JWT marÄ·ieri citu pakalpojumu pieprasÄ«jumos. PÄdÄjais tiek Ä«stenots Å”Ädi (App.js):
Lai mainÄ«tu priekÅ”galu, lai Auth0 izmantotu nomnieka datus, atveriet sa-frontend/src/services/Auth.js un aizstÄjiet tajÄ vÄrtÄ«bas, kuras mÄs rakstÄ«jÄm iepriekÅ” (Auth.js):
IzmÄÄ£iniet lietotni! JÅ«s tiksiet novirzÄ«ts uz Auth0, kur jums ir jÄpiesakÄs (vai jÄreÄ£istrÄjas), pÄc tam tiksiet nosÅ«tÄ«ts atpakaļ uz lapu, no kuras tiks veikti jau autentificÄti pieprasÄ«jumi. Ja izmÄÄ£inÄsiet raksta pirmajÄs daļÄs minÄtÄs komandas ar curl, jÅ«s iegÅ«sit kodu 401 Statusa kods, norÄdot, ka pieprasÄ«jums nav autorizÄts.
AutentifikÄcija ļauj mums saprast, kas ir lietotÄjs, taÄu ir nepiecieÅ”ama autorizÄcija, lai zinÄtu, kam viÅam ir piekļuve. Istio piedÄvÄ rÄ«kus arÄ« Å”im nolÅ«kam.
PiemÄram, izveidosim divas lietotÄju grupas (skatiet diagrammu zemÄk):
Biedri(lietotÄji) ā ar piekļuvi tikai SA-WebApp un SA-Frontend pakalpojumiem;
Moderatori(moderatori) ā ar piekļuvi visiem trim pakalpojumiem.
AutorizÄcijas koncepcija
Lai izveidotu Ŕīs grupas, mÄs izmantosim paplaÅ”inÄjumu Auth0 Authorization un izmantosim Istio, lai nodroÅ”inÄtu tÄm dažÄdus piekļuves lÄ«meÅus.
Auth0 autorizÄcijas instalÄÅ”ana un konfigurÄÅ”ana
PortÄlÄ Auth0 dodieties uz paplaÅ”inÄjumiem (PaplaÅ”inÄjumi) un instalÄjiet Auth0 autorizÄcija. PÄc instalÄÅ”anas dodieties uz AutorizÄcijas paplaÅ”inÄjums, un tur - uz nomnieka konfigurÄciju, noklikŔķinot augÅ”ÄjÄ labajÄ stÅ«rÄ« un atlasot atbilstoÅ”o izvÄlnes opciju (KonfigurÄcija). AktivizÄt grupas (Grupas) un noklikŔķiniet uz kÄrtulas publicÄÅ”anas pogas (PublicÄt kÄrtulu).
Izveidojiet grupas
SadaÄ¼Ä AutorizÄcijas paplaÅ”inÄjums dodieties uz grupas un izveidot grupu Moderatori. TÄ kÄ mÄs visus autentificÄtos lietotÄjus uzskatÄ«sim par parastajiem lietotÄjiem, viÅiem nav jÄveido papildu grupa.
IzvÄlieties grupu Moderatori, Nospiediet Pievienot dalÄ«bniekus, pievienojiet savu galveno kontu. AtstÄjiet dažus lietotÄjus bez grupas, lai pÄrliecinÄtos, ka viÅiem tiek liegta piekļuve. (Jaunus lietotÄjus var izveidot manuÄli, izmantojot Auth0 portÄls > LietotÄji > Izveidot lietotÄju.)
Pievienojiet piekļuves pilnvarai grupas pretenziju
LietotÄji ir pievienoti grupÄm, taÄu Å”ai informÄcijai ir jÄatspoguļojas arÄ« piekļuves marÄ·ieros. Lai nodroÅ”inÄtu atbilstÄ«bu OpenID Connect un tajÄ paÅ”Ä laikÄ atgrieztu mums vajadzÄ«gÄs grupas, marÄ·ierim bÅ«s jÄpievieno savs pielÄgota prasÄ«ba. Ieviests, izmantojot Auth0 noteikumus.
Lai izveidotu kÄrtulu, dodieties uz Auth0 portÄlu uz Noteikumi, Nospiediet Izveidot kÄrtulu un veidnÄs atlasiet tukÅ”u noteikumu.
NokopÄjiet tÄlÄk norÄdÄ«to kodu un saglabÄjiet to kÄ jaunu noteikumu Pievienot grupas pretenziju (namespacedGroup.js):
PiezÄ«me: Å”is kods aizÅem pirmo autorizÄcijas paplaÅ”inÄjumÄ definÄto lietotÄju grupu un pievieno to piekļuves pilnvarai kÄ pielÄgotu pretenziju (saskaÅÄ ar tÄs nosaukumvietu, kÄ to pieprasa Auth0).
Atgriezties uz lapu Noteikumi un pÄrbaudiet, vai ir uzrakstÄ«ti divi noteikumi Å”ÄdÄ secÄ«bÄ:
auth0-authorization-extension
Pievienot grupas pretenziju
SecÄ«ba ir svarÄ«ga, jo grupas lauks kÄrtulu saÅem asinhroni auth0-authorization-extension un pÄc tam to pievieno kÄ pretenziju ar otro noteikumu. RezultÄts ir Å”Äds piekļuves marÄ·ieris:
Tagad jums ir jÄkonfigurÄ sÅ«tÅa starpniekserveris, lai pÄrbaudÄ«tu lietotÄja piekļuvi, kurai grupa tiks noÅemta no prasÄ«bas (https://sa.io/group) atgrieztajÄ piekļuves pilnvarÄ. Å Ä« ir nÄkamÄ raksta sadaļas tÄma.
AutorizÄcijas konfigurÄcija Istio
Lai autorizÄcija darbotos, jums ir jÄiespÄjo RBAC Istio. Lai to izdarÄ«tu, mÄs izmantosim Å”Ädu konfigurÄciju:
1 ā iespÄjojiet RBAC tikai laukÄ norÄdÄ«tajiem pakalpojumiem un nosaukumvietÄm Inclusion;
2 ā mÄs uzskaitÄm mÅ«su pakalpojumu sarakstu.
PiemÄrosim konfigurÄciju ar Å”Ädu komandu:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created
Tagad visiem pakalpojumiem ir nepiecieÅ”ama uz lomu balstÄ«ta piekļuves kontrole. Citiem vÄrdiem sakot, piekļuve visiem pakalpojumiem ir aizliegta, un tÄ rezultÄtÄ tiks sniegta atbilde RBAC: access denied. Tagad atļausim piekļuvi autorizÄtiem lietotÄjiem.
Vai āvisi lietotÄjiā nozÄ«mÄ, ka neautentificÄtiem lietotÄjiem bÅ«s piekļuve SA WebApp? NÄ, politika pÄrbaudÄ«s JWT marÄ·iera derÄ«gumu.
Izmantosim konfigurÄcijas:
$ 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
Piekļuves konfigurÄcija moderatoriem
Moderatoriem mÄs vÄlamies nodroÅ”inÄt piekļuvi visiem pakalpojumiem (mod-service-role.yaml):
TaÄu mÄs vÄlamies Å”Ädas tiesÄ«bas tikai tiem lietotÄjiem, kuru piekļuves pilnvarÄ ir ietverta prasÄ«ba https://sa.io/group ar nozÄ«mi Moderators (mod-service-role-binding.yaml):
$ 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
SÅ«tÅu keÅ”atmiÅas dÄļ var paiet dažas minÅ«tes, lÄ«dz pilnvaroÅ”anas noteikumi stÄsies spÄkÄ. PÄc tam varat nodroÅ”inÄt, ka lietotÄjiem un moderatoriem ir dažÄdi piekļuves lÄ«meÅi.
SecinÄjums par Å”o daļu
Ja nopietni, vai esat kÄdreiz redzÄjis vienkÄrÅ”Äku, bez piepÅ«les, mÄrogojamu un droÅ”u pieeju autentifikÄcijai un autorizÄcijai?
Tikai trÄ«s Istio resursi (RbacConfig, ServiceRole un ServiceRoleBinding) bija nepiecieÅ”ami, lai iegÅ«tu precÄ«zu autentifikÄcijas kontroli un galalietotÄja piekļuves pakalpojumiem autorizÄciju.
TurklÄt mÄs esam parÅ«pÄjuÅ”ies par Å”iem jautÄjumiem no saviem sÅ«tÅu pakalpojumiem, panÄkot:
samazinÄt vispÄrÄ«gÄ koda daudzumu, kas var saturÄt droŔības problÄmas un kļūdas;
samazinÄt stulbu situÄciju skaitu, kurÄs viens galapunkts izrÄdÄ«jÄs pieejams no Ärpuses un aizmirsa par to ziÅot;
novÄrÅ”ot nepiecieÅ”amÄ«bu atjauninÄt visus pakalpojumus katru reizi, kad tiek pievienota jauna loma vai tiesÄ«bas;
ka jaunie pakalpojumi joprojÄm ir vienkÄrÅ”i, droÅ”i un Ätri.
secinÄjums
Istio ļauj komandÄm koncentrÄt savus resursus uz uzÅÄmÄjdarbÄ«bai kritiskiem uzdevumiem, nepalielinot pakalpojumiem papildu izmaksas, atjaunojot tiem mikro statusu.
Raksts (trÄ«s daļÄs) sniedza pamatzinÄÅ”anas un gatavus praktiskus norÄdÄ«jumus, lai sÄktu darbu ar Istio reÄlos projektos.