Ar ais go microservices le Istio. Cuid 3

Ar ais go microservices le Istio. Cuid 3

Nóta. aistrigh.: An chéad chuid bhí an tsraith seo dírithe ar eolas a chur ar chumais Istio agus iad a léiriú i mbun aicsin, an dara — ródú mionchoigeartaithe agus bainistiú tráchta líonra. Anois déanfaimid labhairt faoi shlándáil: chun na feidhmeanna bunúsacha a bhaineann leis a léiriú, úsáideann an t-údar seirbhís aitheantais Auth0, ach is féidir soláthraithe eile a chumrú ar bhealach comhchosúil.

Chuireamar braisle Kubernetes ar bun ina ndearnamar Istio a imscaradh mar aon le feidhmchlár micreasheirbhíse mar shampla, Anailís Mothúchán, chun cumais Istio a léiriú.

Le Istio, bhíomar in ann ár seirbhísí a choinneáil beag mar ní gá dóibh sraitheanna a chur i bhfeidhm mar Retries, Timeouts, Circuit Breakers, Rianú, Monatóireacht. . Ina theannta sin, d'úsáideamar ardteicnící tástála agus imlonnaithe: tástáil A/B, scáthánú agus rolladh amach canáraí.

Ar ais go microservices le Istio. Cuid 3

San ábhar nua, déileálfaimid leis na sraitheanna deiridh ar an gcosán go luach gnó: fíordheimhniú agus údarú - agus in Istio is fíor-áthas é!

Fíordheimhniú agus údarú in Istio

Ní chreidfinn riamh go mbeinn spreagtha ag fíordheimhniú agus údarú. Cad is féidir le Istio a thairiscint ó thaobh na teicneolaíochta de chun na hábhair seo a dhéanamh spraíúil agus, níos mó fós, a spreagadh duit?

Is é an freagra simplí: aistríonn Istio freagracht as na cumais seo ó do chuid seirbhísí go seachfhreastalaí Toscaire. Faoin am a shroicheann na hiarratais na seirbhísí, tá siad fíordheimhnithe agus údaraithe cheana féin, mar sin níl le déanamh agat ach cód úsáideach gnó a scríobh.

Fuaimeanna maith? A ligean ar ghlacadh le breathnú taobh istigh!

Fíordheimhniú le hÚdar0

Mar fhreastalaí le haghaidh aitheantais agus bainistíocht rochtana, úsáidfimid Auth0, a bhfuil leagan trialach aige, atá iomasach le húsáid agus is maith liom go simplí é. Mar sin féin, is féidir na prionsabail chéanna a chur i bhfeidhm ar aon cheann eile Feidhmithe OpenID Connect: KeyCloak, IdentityServer agus go leor eile.

Chun tús a chur leis, téigh go Tairseach Údar0 le do chuntas, cruthaigh tionónta (tionónta - “tionónta”, aonad loighciúil aonrú, le haghaidh tuilleadh sonraí féach doiciméadú - thart. aistrigh.) agus téigh go dtí Feidhmchláir > Aip réamhshocraitheag roghnú Fearann, mar a thaispeántar sa scáileán thíos:

Ar ais go microservices le Istio. Cuid 3

Sonraigh an fearann ​​seo sa chomhad resource-manifests/istio/security/auth-policy.yaml (foinse):

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

Le acmhainn den sórt sin, Píolótach (ceann de na trí chomhpháirt bhunúsacha de Phlána Rialaithe in Istio - approx. transl.) socraíonn sé Toscaire chun iarratais a fhíordheimhniú sula gcuirtear ar aghaidh chuig seirbhísí iad: sa-web-app и sa-feedback. Ag an am céanna, ní chuirtear an chumraíocht i bhfeidhm ar Thoscairí seirbhíse sa-frontend, rud a ligeann dúinn an t-éadanas a fhágáil gan fhíordheimhniú. Chun an Polasaí a chur i bhfeidhm, rith an t-ordú:

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

Fill ar an leathanach agus déan iarratas - feicfidh tú go gcríochnaíonn sé leis an stádas 401 Neamhúdaraithe. Anois déanaimis úsáideoirí tosaigh a atreorú chun fíordheimhniú le Auth0.

Iarratais a fhíordheimhniú le hAuth0

Chun iarratais úsáideoirí deiridh a fhíordheimhniú, ní mór duit API a chruthú in Auth0 a léireoidh na seirbhísí fíordheimhnithe (léirmheasanna, sonraí, agus rátálacha). Chun API a chruthú, téigh go dtí Tairseach Auth0 > APIs > Cruthaigh API agus líon isteach an fhoirm:

Ar ais go microservices le Istio. Cuid 3

Tá an t-eolas tábhachtach anseo Aitheantóir, a úsáidfimid níos déanaí sa script. Scríobhaimis síos é mar seo:

  • Lucht Féachana: {YOUR_AUDIENCE}

Tá na sonraí atá fágtha a theastaíonn uainn suite ar Thairseach Auth0 sa rannán Iarratais - roghnaigh Iarratas Tástála (cruthaithe go huathoibríoch mar aon leis an API).

Anseo scríobhfaimid:

  • Fearann: {YOUR_DOMAIN}
  • Aitheantas an Chliaint: {YOUR_CLIENT_ID}

Scrollaigh go Iarratas Tástála chuig réimse téacs URLanna aisghlao ceadaithe (URLanna réitithe don aisghlao), ina sonraímid an URL inar cheart an glao a sheoladh tar éis don fhíordheimhniú a bheith críochnaithe. Is é ár gcás:

http://{EXTERNAL_IP}/callback

Agus le haghaidh URLanna Lógó Amach Ceadaithe (URL ceadaithe chun logáil amach) cuir leis:

http://{EXTERNAL_IP}/logout

A ligean ar bogadh ar aghaidh go dtí an tosaigh.

Nuashonrú frontend

Athraigh go brainse auth0 repositoria [istio-mastery]. Sa bhrainse seo, athraítear an cód tosaigh chun úsáideoirí a atreorú chuig Auth0 le haghaidh fíordheimhnithe agus chun an comhartha JWT a úsáid in iarratais ar sheirbhísí eile. Cuirtear an dara ceann i bhfeidhm mar seo a leanas (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));
}

Chun an t-éadanas a athrú chun sonraí tionóntaí a úsáid in Auth0, oscail sa-frontend/src/services/Auth.js agus cuir in ionad na luachanna a scríobhamar thuas (Údar.js):

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

Tá an t-iarratas réidh. Sonraigh do ID Docker sna horduithe thíos agus na hathruithe a rinneadh á dtógáil agus á n-imscaradh agat:

$ 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

Bain triail as an app! Déanfar tú a atreorú chuig Auth0, áit a mbeidh ort logáil isteach (nó clárú), agus ina dhiaidh sin seolfar ar ais chuig an leathanach óna ndéanfar iarratais atá fíordheimhnithe cheana tú. Má dhéanann tú iarracht na horduithe a luaitear sna chéad chodanna den alt le curl, gheobhaidh tú an cód 401 Cód Stádais, ag tabhairt le fios nach bhfuil an t-iarratas údaraithe.

Déanaimis an chéad chéim eile - iarratais a údarú.

Údarú le hÚdar0

Ligeann fíordheimhniú dúinn a thuiscint cé hé an t-úsáideoir, ach tá údarú ag teastáil chun a fháil amach cad a bhfuil rochtain acu air. Cuireann Istio uirlisí ar fáil chuige seo freisin.

Mar shampla, cruthaimis dhá ghrúpa úsáideoirí (féach an léaráid thíos):

  • Baill (úsáideoirí) — le rochtain ar sheirbhísí SA-WebApp agus SA-Frontend amháin;
  • Modhnóirí (modhnóirí) — le rochtain ar na trí sheirbhís.

Ar ais go microservices le Istio. Cuid 3
Coincheap údaraithe

Chun na grúpaí seo a chruthú, úsáidfimid síneadh Údaraithe Auth0 agus úsáidfimid Istio chun leibhéil éagsúla rochtana a sholáthar dóibh.

Suiteáil agus cumraíocht Údarú Auth0

I dtairseach Auth0, téigh chuig síntí (Eisínteachtaí) agus a shuiteáil Údar0Údarú. Tar éis a shuiteáil, téigh go dtí Síneadh Údaraithe, agus ansin - chuig cumraíocht an tionónta trí chliceáil ar an mbarr ar dheis agus roghnaigh an rogha roghchlár cuí (Cumraíocht). Grúpaí a ghníomhachtú (Grúpaí) agus cliceáil ar an gcnaipe Foilsigh an Riail (Foilsigh riail).

Ar ais go microservices le Istio. Cuid 3

Cruthaigh grúpaí

I Síneadh Údaraithe téigh go dtí grúpaí agus cruthaigh grúpa Modhnóirí. Ós rud é go gcaithfimid le gach úsáideoir fíordheimhnithe mar úsáideoirí rialta, ní gá grúpa breise a chruthú dóibh.

Roghnaigh grúpa Modhnóirí, Preas Cuir Baill leis, cuir do phríomhchuntas leis. Fág roinnt úsáideoirí gan aon ghrúpa lena chinntiú go ndiúltaítear rochtain dóibh. (Is féidir úsáideoirí nua a chruthú de láimh trí Tairseach Auth0 > Úsáideoirí > Cruthaigh Úsáideoir.)

Cuir Éileamh Grúpa leis an Chomhartha Rochtana

Cuireadh úsáideoirí le grúpaí, ach ní mór an fhaisnéis seo a léiriú sna comharthaí rochtana freisin. Chun cloí le OpenID Connect agus ag an am céanna na grúpaí a theastaíonn uainn a thabhairt ar ais, beidh ar an chomhartha a chuid féin a chur leis éileamh saincheaptha. Curtha i bhfeidhm trí rialacha an Údaráis0.

Chun riail a chruthú, téigh go dtí Auth0 Portal go Rialacha, Preas Cruthaigh Riail agus roghnaigh riail folamh ó na teimpléid.

Ar ais go microservices le Istio. Cuid 3

Cóipeáil an cód thíos agus sábháil é mar riail nua Cuir Éileamh Grúpa leis (ainmspásdGrúpa.js):

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

Tabhair faoi deara: Glacann an cód seo an chéad ghrúpa úsáideoirí atá sainmhínithe sa Síneadh Údaraithe agus cuireann sé leis an comhartha rochtana mar éileamh saincheaptha (faoina spás ainm, mar a éilíonn Auth0).

Fill ar an leathanach Rialacha agus seiceáil go bhfuil dhá riail scríofa agat san ord seo a leanas:

  • auth0-údarú-síneadh
  • Cuir Éileamh Grúpa leis

Tá an t-ordú tábhachtach toisc go bhfaigheann réimse an ghrúpa an riail go neamhshioncronach auth0-údarú-síneadh agus dá éis sin cuirtear é mar éileamh leis an dara riail. Is é an toradh comhartha rochtana mar seo:

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

Anois ní mór duit an seachfhreastalaí Toscaire a chumrú chun rochtain úsáideora a sheiceáil, as a mbainfear an grúpa as éileamh (https://sa.io/group) sa chomhartha rochtana a cuireadh ar ais. Seo é an topaic don chéad chuid eile den alt.

Cumraíocht údaraithe in Istio

Chun údarú a bheith ag obair, ní mór duit RBAC a chumasú do Istio. Chun seo a dhéanamh, úsáidfimid an chumraíocht seo a leanas:

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" 

Míniú:

  • 1 — cumasaigh RBAC amháin le haghaidh seirbhísí agus spásanna ainmneacha atá liostaithe sa réimse Inclusion;
  • 2 — cuirimid liosta dár seirbhísí ar fáil.

Cuirfimid an chumraíocht i bhfeidhm leis an ordú seo a leanas:

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

Tá Rialú Rochtana Ról-Bhunaithe ag teastáil ó gach seirbhís anois. I bhfocail eile, tá cosc ​​ar rochtain ar gach seirbhís agus beidh freagra mar thoradh air RBAC: access denied. Anois ceadaimis rochtain d’úsáideoirí údaraithe.

Cumraíocht rochtana d'úsáideoirí rialta

Ní mór go mbeadh rochtain ag gach úsáideoir ar na seirbhísí SA-Frontend agus SA-WebApp. Curtha i bhfeidhm ag baint úsáide as na hacmhainní Istio seo a leanas:

  • SeirbhísRól — a chinneann na cearta atá ag an úsáideoir;
  • SeirbhísRoleBinding — a chinneann cé leis a bhaineann an Ról Seirbhíse seo.

Ceadóimid rochtain ar sheirbhísí áirithe do ghnáthúsáideoirí (seirbhís.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: ["*"]

Agus tar éis regular-user-binding cuir ServiceRole i bhfeidhm ar gach cuairteoir leathanach (rialta-úsáideoir-seirbhíse-ról-ceangailteach.yaml):

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

An gciallaíonn "gach úsáideoir" go mbeidh rochtain ag úsáideoirí neamhdheimhnithe ar SA WebApp freisin? Ní féidir, seiceálfaidh an polasaí bailíocht an chomhartha JWT.

Cuirimis na cumraíochtaí i bhfeidhm:

$ 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

Cumraíocht rochtana do mhodhnóirí

Maidir le modhnóirí, ba mhaith linn rochtain ar gach seirbhís a chumasú (mod-seirbhís-ról.yaml):

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

Ach ní theastaíonn uainn na cearta sin ach amháin do na húsáideoirí sin a bhfuil éileamh ar a gcuid comhartha rochtana https://sa.io/group le brí Moderators (mod-seirbhíse-ról-ceangailteach.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" 

Cuirimis na cumraíochtaí i bhfeidhm:

$ 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

Mar gheall ar thaisceadh in toscairí, féadfaidh sé cúpla nóiméad a ghlacadh sula dtiocfaidh rialacha údaraithe i bhfeidhm. Féadfaidh tú a chinntiú ansin go bhfuil leibhéil éagsúla rochtana ag úsáideoirí agus ag modhnóirí.

Conclúid ar an gcuid seo

Dáiríre, áfach, an bhfaca tú riamh cur chuige níos simplí, gan stró, inscálaithe agus slán maidir le fíordheimhniú agus údarú?

Ní raibh ach trí acmhainn Istio (RbacConfig, ServiceRole, agus ServiceRoleBinding) ag teastáil chun rialú mín a bhaint amach ar fhíordheimhniú agus údarú rochtana úsáideoirí deiridh ar sheirbhísí.

Ina theannta sin, thugamar aird ar na saincheisteanna seo as ár seirbhísí toscaire, ag baint amach:

  • laghdú ar an méid cód cineálach a bhféadfadh fadhbanna slándála agus fabhtanna a bheith ann;
  • líon na gcásanna dúr a laghdú ina raibh críochphointe amháin inrochtana ón taobh amuigh agus dearmad déanta air a thuairisciú;
  • deireadh a chur leis an ngá le gach seirbhís a nuashonrú gach uair a chuirtear ról nó ceart nua leis;
  • go bhfanfaidh seirbhísí nua simplí, slán agus tapa.

Aschur

Ligeann Istio d’fhoirne a gcuid acmhainní a dhíriú ar thascanna atá ríthábhachtach don ghnó gan forchostais a chur le seirbhísí, agus iad a thabhairt ar ais chuig stádas micrea.

Chuir an t-alt (i dtrí chuid) eolas bunúsach ar fáil agus treoracha praiticiúla réidh le tosú le Istio i bhfíorthionscadail.

PS ó aistritheoir

Léigh freisin ar ár mblag:

Foinse: will.com

Add a comment