Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

เชจเซ‰เซ…เชง. เช…เชจเซเชตเชพเชฆ: เชชเซเชฐเชฅเชฎ เชญเชพเช— เช† เชถเซเชฐเซ‡เชฃเซ€ Istio เชจเซ€ เช•เซเชทเชฎเชคเชพเช“ เชœเชพเชฃเชตเชพ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฎเชฐเซเชชเชฟเชค เชนเชคเซ€, เชฌเซ€เชœเซเช‚ - เชฌเชพเชฐเซ€เช• เชŸเซเชฏเซเชจ เช•เชฐเซ‡เชฒ เชฐเซ‚เชŸเซ€เช‚เช— เช…เชจเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชŸเซเชฐเชพเชซเชฟเช• เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ. เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชธเซเชฐเช•เซเชทเชพ เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเซ€เชถเซเช‚: เชคเซ‡เชจเชพเชฅเซ€ เชธเช‚เชฌเช‚เชงเชฟเชค เชฎเซ‚เชณเชญเซ‚เชค เช•เชพเชฐเซเชฏเซ‹เชจเซ‡ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชฒเซ‡เช–เช• Auth0 เช“เชณเช– เชธเซ‡เชตเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชจเซเชฏ เชชเซเชฐเชฆเชพเชคเชพเช“ เชธเชฎเชพเชจ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เช…เชฎเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐ เชธเซ‡เชŸ เช•เชฐเซเชฏเซเช‚ เชœเซ‡เชฎเชพเช‚ เช…เชฎเซ‡ Istio เช…เชจเซ‡ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ, เชธเซ‡เชจเซเชŸเชฟเชฎเซ‡เชจเซเชŸ เชเชจเชพเชฒเชฟเชธเชฟเชธ, Istio เชจเซ€ เช•เซเชทเชฎเชคเชพเช“ เชฆเชฐเซเชถเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฎเชพเชตเซเชฏเซเช‚.

Istio เชธเชพเชฅเซ‡, เช…เชฎเซ‡ เช…เชฎเชพเชฐเซ€ เชธเซ‡เชตเชพเช“ เชจเชพเชจเซ€ เชฐเชพเช–เชตเชพ เชธเช•เซเชทเชฎ เชนเชคเชพ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡เชฎเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชชเซเชฐเชฏเชพเชธเซ‹, เชธเชฎเชฏ เชธเชฎเชพเชชเซเชคเชฟ, เชธเชฐเซเช•เชฟเชŸ เชฌเซเชฐเซ‡เช•เชฐเซเชธ, เชŸเซเชฐเซ‡เชธเชฟเช‚เช—, เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชœเซ‡เชตเชพ เชธเซเชคเชฐเซ‹ เชฒเชพเช—เซ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€. เชตเชงเซเชฎเชพเช‚, เช…เชฎเซ‡ เช…เชฆเซเชฏเชคเชจ เชชเชฐเซ€เช•เซเชทเชฃ เช…เชจเซ‡ เชœเชฎเชพเชตเชŸ เชคเช•เชจเซ€เช•เซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹: A/B เชชเชฐเซ€เช•เซเชทเชฃ, เชฎเชฟเชฐเชฐเชฟเช‚เช— เช…เชจเซ‡ เช•เซ‡เชจเซ‡เชฐเซ€ เชฐเซ‹เชฒเช†เช‰เชŸเซเชธ.

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

เชจเชตเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชฎเชพเช‚, เช…เชฎเซ‡ เชตเซเชฏเชตเชธเชพเชฏเชฟเช• เชฎเซ‚เชฒเซเชฏเชจเชพ เชฎเชพเชฐเซเช— เชชเชฐเชจเชพ เช…เช‚เชคเชฟเชฎ เชธเซเชคเชฐเซ‹ เชธเชพเชฅเซ‡ เชตเซเชฏเชตเชนเชพเชฐ เช•เชฐเซ€เชถเซเช‚: เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพ - เช…เชจเซ‡ เช‡เชธเซเชŸเชฟเช“เชฎเชพเช‚ เชคเซ‡ เช–เชฐเซ‡เช–เชฐ เช†เชจเช‚เชฆเชจเซ€ เชตเชพเชค เช›เซ‡!

Istio เชฎเชพเช‚ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพ

เชนเซเช‚ เช•เซเชฏเชพเชฐเซ‡เชฏ เชฎเชพเชจเชคเซ‹ เชจ เชนเซ‹เชค เช•เซ‡ เชนเซเช‚ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเซ‡เชฐเชฟเชค เชฅเชˆเชถ. เช† เชตเชฟเชทเชฏเซ‹เชจเซ‡ เชฎเชจเซ‹เชฐเช‚เชœเช• เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชคเซ‡เชจเชพเชฅเซ€ เชชเชฃ เชตเชงเซ, เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‡เชฐเชฃเชพเชฆเชพเชฏเซ€ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ Istio เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€เชจเชพ เชชเชฐเชฟเชชเซเชฐเซ‡เช•เซเชทเซเชฏเชฎเชพเช‚ เชถเซเช‚ เช“เชซเชฐ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡?

เชœเชตเชพเชฌ เชธเชฐเชณ เช›เซ‡: Istio เช† เช•เซเชทเชฎเชคเชพเช“ เชฎเชพเชŸเซ‡เชจเซ€ เชœเชตเชพเชฌเชฆเชพเชฐเซ€ เชคเชฎเชพเชฐเซ€ เชธเซ‡เชตเชพเช“เชฎเชพเช‚เชฅเซ€ เชฆเซ‚เชค เชชเซเชฐเซ‹เช•เซเชธเซ€เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชตเชฟเชจเช‚เชคเซ€เช“ เชธเซ‡เชตเชพเช“ เชธเซเชงเซ€ เชชเชนเซ‹เช‚เชšเซ‡ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€เชฎเชพเช‚, เชคเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชชเซเชฐเชฎเชพเชฃเชฟเชค เช…เชจเซ‡ เช…เชงเชฟเช•เซƒเชค เชฅเชˆ เชšเซ‚เช•เซ€ เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชตเซเชฏเชตเชธเชพเชฏ-เช‰เชชเชฏเซ‹เช—เซ€ เช•เซ‹เชก เชฒเช–เชตเชพเชจเซ‹ เช›เซ‡.

เชธเชพเชฐเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡? เชšเชพเชฒเซ‹ เช…เช‚เชฆเชฐ เชเช• เชจเชœเชฐ เช•เชฐเซ€เช!

Auth0 เชธเชพเชฅเซ‡ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ

เช“เชณเช– เช…เชจเซ‡ เชเช•เซเชธเซ‡เชธ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชธเชฐเซเชตเชฐ เชคเชฐเซ€เช•เซ‡, เช…เชฎเซ‡ Auth0 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚, เชœเซ‡เชจเซเช‚ เช…เชœเชฎเชพเชฏเชถ เชธเช‚เชธเซเช•เชฐเชฃ เช›เซ‡, เชคเซ‡ เชตเชพเชชเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชพเชนเชœเชฟเช• เช›เซ‡ เช…เชจเซ‡ เชฎเชจเซ‡ เชคเซ‡ เช—เชฎเซเชฏเซเช‚. เชœเซ‹ เช•เซ‡, เชธเชฎเชพเชจ เชธเชฟเชฆเซเชงเชพเช‚เชคเซ‹ เช•เซ‹เชˆเชชเชฃ เช…เชจเซเชฏ เชชเชฐ เชฒเชพเช—เซ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ OpenID เช•เชจเซ‡เช•เซเชŸ เช…เชฎเชฒเซ€เช•เชฐเชฃเซ‹: เช•เซ€เช•เซเชฒเซ‹เช•, เช†เช‡เชกเซ‡เชจเซเชŸเชฟเชŸเซ€ เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เช…เชจเซเชฏ เช˜เชฃเชพ.

เชชเซเชฐเชฅเชฎ, เชชเชฐ เชœเชพเช“ Auth0 เชชเซ‹เชฐเซเชŸเชฒ เชคเชฎเชพเชฐเชพ เชเช•เชพเช‰เชจเซเชŸ เชธเชพเชฅเซ‡, เชญเชพเชกเซ‚เชค เชฌเชจเชพเชตเซ‹ (เชญเชพเชกเซ‚เชค - "เชญเชพเชกเซ‚เชค", เช…เชฒเช—เชคเชพเชจเซเช‚ เชคเชพเชฐเซเช•เชฟเช• เชเช•เชฎ, เชตเชงเซ เชตเชฟเช—เชคเซ‹ เชฎเชพเชŸเซ‡ เชœเซเช“ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ - เช†เชถเชฐเซ‡. เช…เชจเซเชตเชพเชฆ.) เช…เชจเซ‡ เชชเชฐ เชœเชพเช“ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธ > เชกเชฟเชซเซ‹เชฒเซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชชเชธเช‚เชฆ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชกเซ‹เชฎเซ‡เชจ, เชจเซ€เชšเซ‡ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸเชฎเชพเช‚ เชฌเชคเชพเชตเซเชฏเชพ เชชเซเชฐเชฎเชพเชฃเซ‡:

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

เชซเชพเช‡เชฒเชฎเชพเช‚ เช† เชกเซ‹เชฎเซ‡เชจเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‹ 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 เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ เชซเซ‹เชฐเซเชฎ เชญเชฐเซ‹:

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

เช…เชนเซ€เช‚ เชฎเชนเชคเซเชตเชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เช›เซ‡ เช“เชณเช–เช•เชฐเซเชคเชพ, เชœเซ‡เชจเซ‹ เช†เชชเชฃเซ‡ เชชเช›เซ€เชฅเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚. เชšเชพเชฒเซ‹ เชคเซ‡เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชฒเช–เซ€เช:

  • เชชเซเชฐเซ‡เช•เซเชทเช•: {YOUR_AUDIENCE}

เช…เชฎเชจเซ‡ เชœเซ‹เชˆเชคเซ€ เชฌเชพเช•เซ€เชจเซ€ เชตเชฟเช—เชคเซ‹ เชตเชฟเชญเชพเช—เชฎเชพเช‚ Auth0 เชชเซ‹เชฐเซเชŸเชฒ เชชเชฐ เชธเซเชฅเชฟเชค เช›เซ‡ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎเซ‹ - เชชเชธเช‚เชฆ เช•เชฐเซ‹ เชŸเซ‡เชธเซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ (API เชจเซ€ เชธเชพเชฅเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เชฌเชจเชพเชตเซ‡เชฒ).

เช…เชนเซ€เช‚ เช†เชชเชฃเซ‡ เชฒเช–เซ€เชถเซเช‚:

  • เชกเซ‹เชฎเซ‡เชจ: {YOUR_DOMAIN}
  • เช•เซเชฒเชพเชฏเชจเซเชŸ เช†เชˆเชกเซ€: {YOUR_CLIENT_ID}

เชธเซเชงเซ€ เชธเซเช•เซเชฐเซ‹เชฒ เช•เชฐเซ‹ เชŸเซ‡เชธเซเชŸ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชŸเซ‡เช•เซเชธเซเชŸ เชซเซ€เชฒเซเชกเชฎเชพเช‚ เชฎเช‚เชœเซ‚เชฐ เช•เซ‰เชฒเชฌเซ‡เช• URL (เช•เซ‰เชฒเชฌเซ‡เช• เชฎเชพเชŸเซ‡ เช‰เช•เซ‡เชฒเชพเชฏเซ‡เชฒ URL), เชœเซ‡เชฎเชพเช‚ เช…เชฎเซ‡ เชคเซ‡ URL เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เช เช›เซ€เช เชœเซเชฏเชพเช‚ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชชเซ‚เชฐเซเชฃ เชฅเชฏเชพ เชชเช›เซ€ เช•เซ‰เชฒ เชฎเซ‹เช•เชฒเชตเซ‹ เชœเซ‹เชˆเช. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชคเซ‡ เช›เซ‡:

http://{EXTERNAL_IP}/callback

เช…เชจเซ‡ เชฎเชพเชŸเซ‡ เชฎเช‚เชœเซ‚เชฐ เชฒเซ‰เช—เช†เช‰เชŸ URL (เชฒเซ‹เช— เช†เช‰เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฎเชพเชจเซเชฏ URL) เช‰เชฎเซ‡เชฐเซ‹:

http://{EXTERNAL_IP}/logout

เชšเชพเชฒเซ‹ เช†เช—เชณเชจเชพ เชญเชพเช—เชฎเชพเช‚ เช†เช—เชณ เชตเชงเซ€เช.

เชซเซเชฐเชจเซเชŸเชเชจเซเชก เช…เชชเชกเซ‡เชŸ

เชถเชพเช–เชพ เชชเชฐ เชธเซเชตเชฟเชš เช•เชฐเซ‹ auth0 เชฐเซ‡เชชเซ‹เชเชฟเชŸเซ‹เชฐเชฟเชฏเชพ [istio-mastery]. เช† เชถเชพเช–เชพเชฎเชพเช‚, เชซเซเชฐเชจเซเชŸเชเชจเซเชก เช•เซ‹เชกเชจเซ‡ เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ เชฎเชพเชŸเซ‡ Auth0 เชชเชฐ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸ เช•เชฐเชตเชพ เช…เชจเซ‡ เช…เชจเซเชฏ เชธเซ‡เชตเชพเช“เชจเซ€ เชตเชฟเชจเช‚เชคเซ€เช“เชฎเชพเช‚ JWT เชŸเซ‹เช•เชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชฌเชฆเชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชฌเชพเชฆเชฎเชพเช‚ เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (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));
}

Auth0 เชฎเชพเช‚ เชญเชพเชกเซ‚เชค เชกเซ‡เชŸเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชซเซเชฐเชจเซเชŸเชเชจเซเชก เชฌเชฆเชฒเชตเชพ เชฎเชพเชŸเซ‡, เช–เซ‹เชฒเซ‹ sa-frontend/src/services/Auth.js เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚ เช†เชชเชฃเซ‡ เช‰เชชเชฐ เชฒเช–เซ‡เชฒเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฌเชฆเชฒเซ‹ (Auth.js):

const Config = {
    clientID: '{YOUR_CLIENT_ID}',
    domain:'{YOUR_DOMAIN}',
    audience: '{YOUR_AUDIENCE}',
    ingressIP: '{EXTERNAL_IP}' // ะ˜ัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ั€ะตะดะธั€ะตะบั‚ะฐ ะฟะพัะปะต ะฐัƒั‚ะตะฝั‚ะธั„ะธะบะฐั†ะธะธ
}

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชคเซˆเชฏเชพเชฐ เช›เซ‡. เช•เชฐเซ‡เชฒเชพ เชซเซ‡เชฐเชซเชพเชฐเซ‹เชจเซเช‚ เชจเชฟเชฐเซเชฎเชพเชฃ เช…เชจเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถเซ‹เชฎเชพเช‚ เชคเชฎเชพเชฐเซเช‚ เชกเซ‹เช•เชฐ ID เชธเซเชชเชทเซเชŸ เช•เชฐเซ‹:

$ 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-เชซเซเชฐเชจเซเชŸเซ‡เชจเซเชก เชธเซ‡เชตเชพเช“เชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡;
  • เชฎเชงเซเชฏเชธเซเชฅเซ€เช“ (เชฎเชงเซเชฏเชธเซเชฅ) - เชคเซเชฐเชฃเซ‡เชฏ เชธเซ‡เชตเชพเช“เชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเชพเชฅเซ‡.

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3
เช…เชงเชฟเช•เซƒเชคเชคเชพ เช–เซเชฏเชพเชฒ

เช† เชœเซ‚เชฅเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ Auth0 เช…เชงเชฟเช•เซƒเชคเชคเชพ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ‹เชจเซ€ เชเช•เซเชธเซ‡เชธ เชชเซเชฐเชฆเชพเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ Istio เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚.

Auth0 เช…เชงเชฟเช•เซƒเชคเชคเชพเชจเซเช‚ เชธเซเชฅเชพเชชเชจ เช…เชจเซ‡ เช—เซ‹เช เชตเชฃเซ€

Auth0 เชชเซ‹เชฐเซเชŸเชฒเชฎเชพเช‚, เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ เชชเชฐ เชœเชพเช“ (เชเช•เซเชธเซเชŸเซ‡เชจเซเชถเชจเซเชธ) เช…เชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹ Auth0 เช…เชงเชฟเช•เซƒเชคเชคเชพ. เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเช›เซ€, เชชเชฐ เชœเชพเช“ เช…เชงเชฟเช•เซƒเชคเชคเชพ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจ, เช…เชจเซ‡ เชคเซเชฏเชพเช‚ - เช‰เชชเชฐ เชœเชฎเชฃเซ€ เชฌเชพเชœเซเช เช•เซเชฒเชฟเช• เช•เชฐเซ€เชจเซ‡ เช…เชจเซ‡ เชฏเซ‹เช—เซเชฏ เชฎเซ‡เชจเซ เชตเชฟเช•เชฒเซเชช เชชเชธเช‚เชฆ เช•เชฐเซ€เชจเซ‡ เชญเชพเชกเซ‚เชคเชจเชพ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐ เชœเชพเช“ (เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ). เชœเซ‚เชฅเซ‹เชจเซ‡ เชธเช•เซเชฐเชฟเชฏ เช•เชฐเซ‹ (เชœเซ‚เชฅเซ‹) เช…เชจเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เชจเชฟเชฏเชฎ เชฌเชŸเชจ เชชเชฐ เช•เซเชฒเชฟเช• เช•เชฐเซ‹ (เชจเชฟเชฏเชฎ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเซ‹).

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

เชœเซ‚เชฅเซ‹ เชฌเชจเชพเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡

เช…เชงเชฟเช•เซƒเชคเชคเชพ เชเช•เซเชธเซเชŸเซ‡เช‚เชถเชจเชฎเชพเช‚ เชœเชพเช“ เชœเซ‚เชฅเซ‹ เช…เชจเซ‡ เชเช• เชœเซ‚เชฅ เชฌเชจเชพเชตเซ‹ เชฎเชงเซเชฏเชธเซเชฅเซ€เช“. เช…เชฎเซ‡ เชฌเชงเชพ เช…เชงเชฟเช•เซƒเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชจเชฟเชฏเชฎเชฟเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชคเชฐเซ€เช•เซ‡ เช—เชฃเซ€เชถเซเช‚, เชคเซ‡เชฅเซ€ เชคเซ‡เชฎเชจเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชตเชงเชพเชฐเชพเชจเซเช‚ เชœเซ‚เชฅ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชจเชฅเซ€.

เชเช• เชœเซ‚เชฅ เชชเชธเช‚เชฆ เช•เชฐเซ‹ เชฎเชงเซเชฏเชธเซเชฅเซ€เช“, เชฆเชฌเชพเชตเซ‹ เชธเชญเซเชฏเซ‹ เช‰เชฎเซ‡เชฐเซ‹, เชคเชฎเชพเชฐเซเช‚ เชฎเซเช–เซเชฏ เช–เชพเชคเซเช‚ เช‰เชฎเซ‡เชฐเซ‹. เช•เซ‡เชŸเชฒเชพเช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชเช•เซเชธเซ‡เชธ เชจเช•เชพเชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡ เชคเซ‡เชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆเชชเชฃ เชœเซ‚เชฅ เชตเชฟเชจเชพ เช›เซ‹เชกเซ€ เชฆเซ‹. (เชจเชตเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฆเซเชตเชพเชฐเชพ เชœเชพเชคเซ‡ เชฌเชจเชพเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ Auth0 เชชเซ‹เชฐเซเชŸเชฒ > เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ > เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฌเชจเชพเชตเซ‹.)

เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจ เชฎเชพเชŸเซ‡ เชœเซ‚เชฅ เชฆเชพเชตเซ‹ เช‰เชฎเซ‡เชฐเซ‹

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชœเซ‚เชฅเซ‹เชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเชพ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เชฎเชพเชนเชฟเชคเซ€ เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจเซเชธเชฎเชพเช‚ เชชเชฃ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เชฅเชตเซ€ เชœเซ‹เชˆเช. OpenID เช•เชจเซ‡เช•เซเชŸเชจเซเช‚ เชชเชพเชฒเชจ เช•เชฐเชตเชพ เช…เชจเซ‡ เชคเซ‡ เชœ เชธเชฎเชฏเซ‡ เช…เชฎเชจเซ‡ เชœเซ‹เชˆเชคเชพ เชœเซ‚เชฅเซ‹ เชชเชฐเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชŸเซ‹เช•เชจเชจเซ‡ เชคเซ‡เชจเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เช‰เชฎเซ‡เชฐเชตเซเช‚ เชชเชกเชถเซ‡ เช•เชธเซเชŸเชฎ เชฆเชพเชตเซ‹. Auth0 เชจเชฟเชฏเชฎเซ‹ เชฆเซเชตเชพเชฐเชพ เช…เชฎเชฒเซ€.

เชจเชฟเชฏเชฎ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, Auth0 เชชเซ‹เชฐเซเชŸเชฒ เชชเชฐ เชœเชพเช“ เชจเชฟเชฏเชฎเซ‹, เชฆเชฌเชพเชตเซ‹ เชจเชฟเชฏเชฎ เชฌเชจเชพเชตเซ‹ เช…เชจเซ‡ เชจเชฎเซ‚เชจเชพเช“เชฎเชพเช‚เชฅเซ€ เช–เชพเชฒเซ€ เชจเชฟเชฏเชฎ เชชเชธเช‚เชฆ เช•เชฐเซ‹.

Istio เชธเชพเชฅเซ‡ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชชเชฐ เชชเชพเช›เชพ เชœเชพเช“. เชญเชพเช— 3

เชจเซ€เชšเซ‡เชจเชพ เช•เซ‹เชกเชจเซ€ เชจเช•เชฒ เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชจเชตเชพ เชจเชฟเชฏเชฎ เชคเชฐเซ€เช•เซ‡ เชธเชพเชšเชตเซ‹ เชœเซ‚เชฅ เชฆเชพเชตเซ‹ เช‰เชฎเซ‡เชฐเซ‹ (namespacedGroup.js):

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 เชธเช‚เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชพเชฏเซ‡เชฒ เช›เซ‡:

  • เชธเชฐเซเชตเชฟเชธ เชฐเซ‹เชฒ - เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเชพ เช…เชงเชฟเช•เชพเชฐเซ‹ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡;
  • ServiceRoleBinding โ€” เช† เชธเชฐเซเชตเชฟเชธเชฐเซ‹เชฒ เช•เซ‹เชจเซ€ เช›เซ‡ เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซ‡ เช›เซ‡.

เชธเชพเชฎเชพเชจเซเชฏ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เช…เชฎเซเช• เชธเซ‡เชตเชพเช“เชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ€เชถเซเช‚ (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: ["*"]

เช…เชจเซ‡ เชฎเชพเชฐเชซเชคเซ‡ regular-user-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"

เชถเซเช‚ "เชฌเชงเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“" เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชฌเชฟเชจเช…เชงเชฟเช•เซƒเชค เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ‡ เชชเชฃ 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

เชฎเชงเซเชฏเชธเซเชฅเซ€เช“ เชฎเชพเชŸเซ‡ เชเช•เซเชธเซ‡เชธ เช—เซ‹เช เชตเชฃเซ€

เชฎเชงเซเชฏเชธเซเชฅเซ€เช“ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฌเชงเซ€ เชธเซ‡เชตเชพเช“เชจเซ€ เชเช•เซเชธเซ‡เชธ เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช (mod-service-role.yaml):

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

เชชเชฐเช‚เชคเซ เช…เชฎเซ‡ เช†เชตเชพ เช…เชงเชฟเช•เชพเชฐเซ‹ เชซเช•เซเชค เชคเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“ เชฎเชพเชŸเซ‡ เชœ เชˆเชšเซเช›เซ€เช เช›เซ€เช เชœเซ‡เชฎเชจเชพ เชเช•เซเชธเซ‡เชธ เชŸเซ‹เช•เชจเชฎเชพเช‚ เชฆเชพเชตเซ‹ เช›เซ‡ https://sa.io/group เช…เชฐเซเชฅ เชธเชพเชฅเซ‡ 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" 

เชšเชพเชฒเซ‹ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจเซ‹ เชฒเชพเช—เซ เช•เชฐเซ€เช:

$ 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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹