Nodyn. traws.: Rhan gyntaf roedd y gyfres hon wedi'i neilltuo i ddod i adnabod galluoedd Istio a'u harddangos ar waith, ail — llwybro manwl gywir a rheoli traffig rhwydwaith. Nawr byddwn yn siarad am ddiogelwch: i ddangos y swyddogaethau sylfaenol sy'n gysylltiedig ag ef, mae'r awdur yn defnyddio gwasanaeth hunaniaeth Auth0, ond gellir ffurfweddu darparwyr eraill mewn ffordd debyg.
Fe wnaethom sefydlu clwstwr Kubernetes lle buom yn defnyddio Istio ac enghraifft o raglen microwasanaeth, Dadansoddiad Sentiment, i ddangos galluoedd Istio.
Gydag Istio, roeddem yn gallu cadw ein gwasanaethau'n fach oherwydd nid oes angen iddynt weithredu haenau fel Retries, Timeouts, Circuit Breakers, Olrhain, Monitro. Yn ogystal, gwnaethom ddefnyddio technegau profi a defnyddio uwch: profi A/B, adlewyrchu a chyflwyno caneri.
Yn y deunydd newydd, byddwn yn ymdrin â'r haenau olaf ar y llwybr i werth busnes: dilysu ac awdurdodi - ac yn Istio mae'n bleser pur!
Dilysu ac awdurdodi yn Istio
Ni fyddwn byth wedi credu y byddwn yn cael fy ysbrydoli gan ddilysu ac awdurdodi. Beth all Istio ei gynnig o safbwynt technoleg i wneud y pynciau hyn yn hwyl ac, hyd yn oed yn fwy felly, yn ysbrydoledig i chi?
Mae'r ateb yn syml: mae Istio yn symud cyfrifoldeb am y galluoedd hyn o'ch gwasanaethau i'r dirprwy Envoy. Erbyn i'r ceisiadau gyrraedd y gwasanaethau, maent eisoes wedi'u dilysu a'u hawdurdodi, felly'r cyfan sy'n rhaid i chi ei wneud yw ysgrifennu cod defnyddiol i fusnes.
Swnio'n dda? Gadewch i ni edrych y tu mewn!
Dilysu gydag Awd0
Fel gweinydd ar gyfer rheoli hunaniaeth a mynediad, byddwn yn defnyddio Auth0, sydd â fersiwn prawf, yn reddfol i'w ddefnyddio ac rwy'n ei hoffi. Fodd bynnag, gellir cymhwyso'r un egwyddorion i unrhyw un arall Gweithrediadau OpenID Connect: KeyCloak, IdentityServer a llawer o rai eraill.
Yn gyntaf, ewch i Porth Awd0 gyda'ch cyfrif, creu tenant (tenant - “tenant”, uned resymegol o arwahanrwydd, am ragor o fanylion gweler dogfennaeth - tua. cyfieithu.) a mynd i Ceisiadau > Ap Diofyndewis Parth, fel y dangosir yn y sgrinlun isod:
Nodwch y parth hwn yn y ffeil resource-manifests/istio/security/auth-policy.yaml (ffynhonnell):
Gydag adnodd o'r fath, Pilot (un o'r tair cydran Plane Rheoli sylfaenol yn Istio - tua. transl.) yn ffurfweddu Cennad i ddilysu ceisiadau cyn eu hanfon ymlaen at wasanaethau: sa-web-app и sa-feedback. Ar yr un pryd, nid yw'r ffurfweddiad yn cael ei gymhwyso i Genhadon gwasanaeth sa-frontend, gan ganiatáu inni adael y blaen heb ei ddilysu. I gymhwyso'r Polisi, rhedeg y gorchymyn:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io “auth-policy” created
Dychwelwch i'r dudalen a gwnewch gais - fe welwch ei fod yn gorffen gyda'r statws 401 heb awdurdod. Nawr, gadewch i ni ailgyfeirio defnyddwyr frontend i ddilysu gydag Auth0.
Dilysu ceisiadau gydag Auth0
I ddilysu ceisiadau defnyddiwr terfynol, mae angen i chi greu API yn Auth0 a fydd yn cynrychioli'r gwasanaethau dilys (adolygiadau, manylion, a graddfeydd). I greu API, ewch i Porth Auth0 > APIs > Creu API a llenwch y ffurflen:
Mae'r wybodaeth bwysig yma nodi, y byddwn yn ei ddefnyddio yn ddiweddarach yn y sgript. Gadewch i ni ei ysgrifennu i lawr fel hyn:
cynulleidfa: {YOUR_AUDIENCE}
Mae gweddill y manylion sydd eu hangen arnom wedi'u lleoli ar y Porth Auth0 yn yr adran ceisiadau - dewis Cais Prawf (wedi'i greu'n awtomatig ynghyd â'r API).
Yma byddwn yn ysgrifennu:
Parth: {YOUR_DOMAIN}
ID Cleient: {YOUR_CLIENT_ID}
Sgroliwch i Cais Prawf i faes testun URLau Galw'n Ôl a Ganiateir (URLau wedi'u datrys ar gyfer yr alwad yn ôl), lle rydym yn nodi'r URL lle dylid anfon yr alwad ar ôl cwblhau'r dilysu. Yn ein hachos ni, mae'n:
http://{EXTERNAL_IP}/callback
Ac ar gyfer URLau Allgofnodi a Ganiateir (URLs a ganiateir ar gyfer allgofnodi) ychwanegwch:
http://{EXTERNAL_IP}/logout
Gadewch i ni symud ymlaen i'r blaen.
Diweddariad Frontend
Newid i gangen auth0 ystorfa [istio-mastery]. Yn y gangen hon, mae'r cod blaen yn cael ei newid i ailgyfeirio defnyddwyr i Auth0 i'w dilysu a defnyddio tocyn JWT mewn ceisiadau i wasanaethau eraill. Gweithredir yr olaf fel a ganlyn (Ap.js):
I newid y blaen i ddefnyddio data tenantiaid yn Auth0, agorwch sa-frontend/src/services/Auth.js a disodli ynddo y gwerthoedd a ysgrifenasom uchod (Awd.js):
const Config = {
clientID: '{YOUR_CLIENT_ID}',
domain:'{YOUR_DOMAIN}',
audience: '{YOUR_AUDIENCE}',
ingressIP: '{EXTERNAL_IP}' // Используется для редиректа после аутентификации
}
Mae'r cais yn barod. Nodwch eich ID Docker yn y gorchmynion isod wrth adeiladu a defnyddio'r newidiadau a wnaed:
Rhowch gynnig ar yr app! Byddwch yn cael eich ailgyfeirio i Auth0, lle mae angen i chi fewngofnodi (neu gofrestru), ac ar ôl hynny byddwch yn cael eich anfon yn ôl i'r dudalen y bydd ceisiadau sydd eisoes wedi'u dilysu yn cael eu gwneud ohoni. Os ceisiwch y gorchmynion a grybwyllir yn rhannau cyntaf yr erthygl gyda curl, fe gewch y cod 401 Cod Statws, gan nodi nad yw'r cais wedi'i awdurdodi.
Gadewch i ni gymryd y cam nesaf - awdurdodi ceisiadau.
Awdurdodiad gydag Awd0
Mae dilysu yn ein galluogi i ddeall pwy yw defnyddiwr, ond mae angen awdurdodiad i wybod beth sydd ganddynt fynediad iddo. Mae Istio yn cynnig offer ar gyfer hyn hefyd.
Er enghraifft, gadewch i ni greu dau grŵp defnyddwyr (gweler y diagram isod):
Defnyddwyr(defnyddwyr) — gyda mynediad yn unig i wasanaethau SA-WebApp a SA-Frontend;
Cymedrolwyr(cymedrolwyr) — gyda mynediad at y tri gwasanaeth.
Cysyniad awdurdodi
I greu'r grwpiau hyn, byddwn yn defnyddio'r estyniad Awdurdodi Auth0 ac yn defnyddio Istio i ddarparu gwahanol lefelau o fynediad iddynt.
Gosod a chyfluniad Awdurdodi Auth0
Ym mhorth Auth0, ewch i estyniadau (Estyniadau) a gosod Awd0 Awdurdodiad. Ar ôl gosod, ewch i Estyniad Awdurdodiad, ac yno - i gyfluniad y tenant trwy glicio ar y dde uchaf a dewis yr opsiwn dewislen priodol (Ffurfweddiad). Ysgogi grwpiau (Grwpiau) a chliciwch ar y botwm cyhoeddi rheol (Cyhoeddi rheol).
Creu grwpiau
Yn Estyniad Awdurdodi ewch i grwpiau a chreu grŵp Safonwyr. Gan y byddwn yn trin pob defnyddiwr dilys fel defnyddwyr rheolaidd, nid oes angen creu grŵp ychwanegol ar eu cyfer.
Dewiswch grŵp Safonwyr, Gwasg Ychwanegu Aelodau, ychwanegwch eich prif gyfrif. Gadael rhai defnyddwyr heb unrhyw grŵp i wneud yn siŵr eu bod yn cael eu gwrthod mynediad. (Gellir creu defnyddwyr newydd â llaw trwy Porth Auth0 > Defnyddwyr > Creu Defnyddiwr.)
Ychwanegu Hawliad Grŵp i'r Tocyn Mynediad
Mae defnyddwyr wedi'u hychwanegu at grwpiau, ond mae'n rhaid i'r wybodaeth hon hefyd gael ei hadlewyrchu mewn tocynnau mynediad. Er mwyn cydymffurfio ag OpenID Connect ac ar yr un pryd dychwelyd y grwpiau sydd eu hangen arnom, bydd angen i'r tocyn ychwanegu ei un ei hun hawliad arferiad. Wedi'i weithredu trwy reolau Auth0.
I greu rheol, ewch i Auth0 Portal i Rheolau, Gwasg Creu Rheol a dewiswch reol wag o'r templedi.
Copïwch y cod isod a'i gadw fel rheol newydd Ychwanegu Hawliad Grŵp (namespacedGroup.js):
Nodyn: Mae'r cod hwn yn cymryd y grŵp defnyddwyr cyntaf a ddiffinnir yn yr Estyniad Awdurdodi ac yn ei ychwanegu at y tocyn mynediad fel hawliad arferol (o dan ei ofod enw, fel sy'n ofynnol gan Auth0).
Dychwelyd i'r dudalen Rheolau a gwiriwch fod gennych ddwy reol wedi'u hysgrifennu yn y drefn ganlynol:
auth0-awdurdodiad-estyniad
Ychwanegu Hawliad Grŵp
Mae'r drefn yn bwysig oherwydd bod maes y grŵp yn derbyn y rheol yn anghydamserol auth0-awdurdodiad-estyniad ac wedi hyny ychwanegir ef fel honiad gan yr ail reol. Y canlyniad yw tocyn mynediad fel hyn:
Nawr mae angen i chi ffurfweddu'r dirprwy Envoy i wirio mynediad defnyddwyr, a bydd y grŵp yn cael ei dynnu o'r hawliad ar ei gyfer (https://sa.io/group) yn y tocyn mynediad a ddychwelwyd. Dyma'r pwnc ar gyfer adran nesaf yr erthygl.
Cyfluniad awdurdodi yn Istio
Er mwyn cael awdurdodiad i weithio, rhaid i chi alluogi RBAC ar gyfer Istio. I wneud hyn, byddwn yn defnyddio'r ffurfweddiad canlynol:
1 — galluogi RBAC yn unig ar gyfer gwasanaethau a gofodau enwau a restrir yn y maes Inclusion;
2 — rydym yn rhestru rhestr o'n gwasanaethau.
Gadewch i ni gymhwyso'r ffurfweddiad gyda'r gorchymyn canlynol:
$ kubectl apply -f resource-manifests/istio/security/enable-rbac.yaml
rbacconfig.rbac.istio.io/default created
Bellach mae angen Rheoli Mynediad Seiliedig ar Rôl ar bob gwasanaeth. Mewn geiriau eraill, gwaherddir mynediad i bob gwasanaeth a bydd yn arwain at ymateb RBAC: access denied. Nawr gadewch i ni ganiatáu mynediad i ddefnyddwyr awdurdodedig.
Cyfluniad mynediad ar gyfer defnyddwyr rheolaidd
Rhaid i bob defnyddiwr gael mynediad at wasanaethau SA-Frontend a SA-WebApp. Wedi'i weithredu gan ddefnyddio'r adnoddau Istio canlynol:
GwasanaethRôl — yn pennu'r hawliau sydd gan y defnyddiwr;
GwasanaethRoleBinding — sy'n pennu i bwy y mae'r Rôl Gwasanaeth hon yn perthyn.
Ar gyfer defnyddwyr cyffredin byddwn yn caniatáu mynediad i rai gwasanaethau (gwasanaeth.yaml):
A yw "pob defnyddiwr" yn golygu y bydd defnyddwyr heb eu dilysu hefyd yn cael mynediad i SA WebApp? Na, bydd y polisi yn gwirio dilysrwydd tocyn JWT.
Gadewch i ni gymhwyso'r ffurfweddiadau:
$ 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
Ond rydym eisiau hawliau o'r fath yn unig ar gyfer y defnyddwyr hynny y mae eu tocyn mynediad yn cynnwys hawliad https://sa.io/group gydag ystyr Moderators (mod-gwasanaeth-rôl-rhwymo.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
Oherwydd cadw cenhadon, gall gymryd ychydig funudau i reolau awdurdodi ddod i rym. Yna gallwch sicrhau bod gan ddefnyddwyr a chymedrolwyr lefelau mynediad gwahanol.
Casgliad ar y rhan hon
Ond o ddifrif, a ydych chi erioed wedi gweld dull symlach, diymdrech, graddadwy a diogel o ddilysu ac awdurdodi?
Dim ond tri adnodd Istio (RbacConfig, ServiceRole, a ServiceRoleBinding) oedd eu hangen i gyflawni rheolaeth fanwl dros ddilysu ac awdurdodi mynediad defnyddwyr terfynol at wasanaethau.
Yn ogystal, rydym wedi cymryd gofal o’r materion hyn allan o’n gwasanaethau llysgennad, gan gyflawni:
lleihau faint o god generig a allai gynnwys problemau diogelwch a bygiau;
lleihau nifer y sefyllfaoedd gwirion lle daeth un pwynt terfyn i fod yn hygyrch o'r tu allan ac wedi anghofio rhoi gwybod amdano;
dileu'r angen i ddiweddaru pob gwasanaeth bob tro yr ychwanegir rôl neu hawl newydd;
bod gwasanaethau newydd yn parhau i fod yn syml, yn ddiogel ac yn gyflym.
Allbwn
Mae Istio yn caniatáu i dimau ganolbwyntio eu hadnoddau ar dasgau busnes-gritigol heb ychwanegu gorbenion at wasanaethau, gan eu dychwelyd i statws micro.
Roedd yr erthygl (mewn tair rhan) yn darparu gwybodaeth sylfaenol a chyfarwyddiadau ymarferol parod ar gyfer dechrau gydag Istio mewn prosiectau go iawn.