แฒจแแแแจแแแ. แแแ แแแแ:
แฉแแแ แจแแแฅแแแแแ Kubernetes แแแแกแขแแ แ, แ แแแแแจแแช แแแแแแแแแกแแ Istio แแ แแแแ แแกแแ แแแกแแก แแแแแแแชแแแก แแแแแแแแ, Sentiment Analysis, Istio-แก แจแแกแแซแแแแแแแแแแก แแแแแแกแขแ แแ แแแแกแแแแก.
Istio-แก แกแแจแฃแแแแแแ แฉแแแ แจแแแซแแแแ แฉแแแแ แกแแ แแแกแแแแก แแชแแ แ แแแแแก แจแแแแ แฉแฃแแแแ, แ แแแแแ แแแ แแ แกแญแแ แแแแแ แแกแแแ แคแแแแแแก แแแแแ แแแ, แ แแแแ แแชแแ แแแแแแแ แแแแแ แชแแแแ, แแแแแแ, แแแแแ แแแแแแแ, แแแแแแแแ, แแแแแขแแ แแแแ. แแแ แแ แแแแกแ, แฉแแแ แแแแแแแงแแแแ แแแฌแแแแแ แขแแกแขแแ แแแแกแ แแ แแแแแแแแแแก แขแแฅแแแแ: A/B แขแแกแขแแ แแแ, mirroring แแ canary rollouts.
แแฎแแ แแแกแแแแจแ แฉแแแ แแแแแแฎแแแแแ แกแแแแแแ แคแแแแแก แแแแแแกแแก แฆแแ แแแฃแแแแแกแแแ แแแแแแแ แแแแแ: แแแแแแขแแคแแแแชแแ แแ แแแขแแ แแแแชแแ - แแ แแกแขแแแจแ แแก แแแแแแแแ แกแแแแแแแแแแ!
แแแแแแขแแคแแแแชแแ แแ แแแขแแ แแแแชแแ แแกแขแแแจแ
แแ แแกแแแแก แแแแแฏแแ แแแแ, แ แแ แจแแแแแแแแฃแแ แแแฅแแแแแแ แแแขแแ แแแแชแแแกแ แแ แแแขแแ แแแแชแแแก แแแแ. แ แ แจแแแซแแแแ แจแแกแแแแแแแก Istio-แก แขแแฅแแแแแแแฃแ แ แแแ แกแแแฅแขแแแแแแ, แ แแ แแก แแแแแแ แกแแฎแแแแกแ แแ, แแแ แฃแแแขแแก, แจแแแแแแแแแแแแ แแแฎแแแก แแฅแแแแแแแก?
แแแกแฃแฎแ แแแ แขแแแแ: Istio แแแแแกแชแแแก แแแกแฃแฎแแกแแแแแแแแแก แแ แจแแกแแซแแแแแแแแแแ แแฅแแแแ แกแแ แแแกแแแแแแ Envoy proxy-แแ. แแ แแ แแแกแแแแก, แ แแแแกแแช แแแแฎแแแแแแ แกแแ แแแกแแแก แแแแฆแฌแแแก, แแกแแแ แฃแแแ แแแแแฌแแแแฃแแแ แแ แแแขแแ แแแแแฃแแแ, แแกแ แ แแ แแฅแแแ แแฎแแแแ แฃแแแ แแแฌแแ แแ แแแแแแกแแกแแแแก แกแแกแแ แแแแแ แแแแ.
แฒแแ แแแ แแฆแแ แก? แแแแแ แจแแแฎแแแแ แจแแแแแ!
แแแขแแ แแแแชแแ Auth0-แแ
แ แแแแ แช แแแแแขแฃแ แแแแกแ แแ แฌแแแแแแก แแแ แแแแก แกแแ แแแ แ, แฉแแแ แแแแแแแงแแแแแ Auth0-แก, แ แแแแแกแแช แแฅแแก แกแแชแแแแ แแแ แกแแ, แแแแแกแแงแแแแแแแ แแแขแฃแแชแแฃแ แแ แแ แแ แฃแแ แแแแ แแแแฌแแแก. แแฃแแชแ, แแแแแ แแ แแแชแแแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแแแแกแแแแ แกแฎแแแแ
แแแกแแฌแงแแแแ, แแแแแแแ
แแแฃแแแแแ แแก แแแแแแ แคแแแแจแ 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
แแกแแแ แ แแกแฃแ แกแแ, แแแแแขแ (แแกแขแแแจแ แกแแแแแขแ แแแ แกแแแ แขแงแแก แกแแแ แซแแ แแแแแ แแแแแแแแแขแแแแ แแ แ-แแ แแ - แแแแฎแ. แแแ แแแแแ.) แแแแแคแแแฃแ แแ แแแก Envoy-แก, แ แแแ แแแแฎแแแแแก แแแแแแขแแคแแแแชแแ แแแแฎแแแแแก แแแ แกแแ แแแกแแแแ แแแแแแแแแแแ: sa-web-app
ะธ sa-feedback
. แแแแแแ แแฃแแแ, แแแแคแแแฃแ แแชแแ แแ แแแแแแงแแแแแ แกแแ แแแกแแก Envoys-แแ sa-frontend
, แกแแจแฃแแแแแแก แแแแซแแแแก แแแแขแแแแ แคแ แแแขแแแขแ แแฃแแแแขแแคแแแแชแแแก แแแ แแจแ. แแแแแขแแแแก แแแแแกแแงแแแแแแแ, แแแฃแจแแแ แแ แซแแแแแ:
$ kubectl apply -f resource-manifests/istio/security/auth-policy.yaml
policy.authentication.istio.io โauth-policyโ created
แแแแ แฃแแแแ แแแแ แแแ แแ แแแแแแแแ แแแแฎแแแแ - แแแฎแแแ, แ แแ แแก แแแแแ แแแแ แกแขแแขแฃแกแแ แแ แแกแแแฅแชแแ แแแฃแแ. แแฎแแ แแแแแ แแแแแแแขแแแแ แฌแแแ แแแแฎแแแ แแแแแแ Auth0-แแ แแแแแแขแแคแแแแชแแแกแแแแก.
แแแแฎแแแแแแแก แแแขแแ แแแแชแแ Auth0-แแ
แกแแแแแแ แแแแฎแแแ แแแแแก แแแแฎแแแแแแแก แแแแแแขแแคแแแแชแแแกแแแแก, แแฅแแแ แฃแแแ แจแแฅแแแแ API Auth0-แจแ, แ แแแแแแช แฌแแ แแแแแแแแก แแแแแฌแแแแฃแ แกแแ แแแกแแแก (แแแแแฎแแแแแแ, แแแขแแแแแ แแ แ แแแขแแแแแแ). API-แก แจแแกแแฅแแแแแแ แแแแแแแ Auth0 แแแ แขแแแ > APIs > แจแแฅแแแ API แแ แจแแแแกแแ แคแแ แแ:
แแฅ แแ แแก แแแแจแแแแแแแแแ แแแคแแ แแแชแแ แแแแแขแแคแแแแขแแ แ, แ แแแแแกแแช แแแแแแแแแแแ แแแแแแแงแแแแแ แกแแ แแแขแจแ. แแแแแ แฉแแแฌแแ แแ แแกแ:
- แแฃแแแขแแ แแ: {YOUR_AUDIENCE}
แแแ แฉแแแแแ แแแขแแแแแ, แ แแแแแแแช แแแญแแ แแแแ, แแแแแแ แแแแก แแแแงแแคแแแแแแจแ Auth0 แแแ แขแแแแ แแ แแแ แแแแแ - แแแ แฉแแแ แขแแกแขแแก แแแแแแแชแแ (แจแแแฅแแแแแ แแแขแแแแขแฃแ แแ API-แกแแแ แแ แแแ).
แแฅ แฉแแแ แแแแฌแแ แ:
- แแแแแแแก: {YOUR_DOMAIN}
- แแแแแแขแแก ID: {YOUR_CLIENT_ID}
แแแแแแฎแแแแ แขแแกแขแแก แแแแแแแชแแ แขแแฅแกแขแแก แแแแจแ แแแ แแแแแก แแแจแแแแฃแแ URL-แแแ (แแแแแญแ แแ URLโ แแแก แแแแแฎแแแฃแ แแแแกแแแแก), แ แแแแแจแแช แฉแแแ แแแคแแฅแกแแ แแแ URLโ แก, แกแแแแช แแแ แ แฃแแแ แแแแแแแแแแก แแแแแแขแแคแแแแชแแแก แแแกแ แฃแแแแแก แจแแแแแ. แฉแแแแก แจแแแแฎแแแแแจแ แแก แแ แแก:
http://{EXTERNAL_IP}/callback
แแ แแแแกแแแแก แแแจแแแแฃแแ แแแกแแแแก URL-แแแ (แแแจแแแแฃแแ URL-แแแ แแแแแกแแแแกแแแแก) แแแแแแขแแ:
http://{EXTERNAL_IP}/logout
แแแแแ แแแแแแแแแ แคแ แแแขแแ.
Frontend แแแแแฎแแแแ
แคแแแแแแแ แแแแแ แแแ auth0
แ แแแแแแชแแแแ [istio-mastery]
. แแ แคแแแแแแจแ, แฌแแแ แแแฌแแแแก แแแแ แแชแแแแแ, แ แแแ แแแแแแแกแแแแ แแแแก แแแแฎแแแ แแแแแแ Auth0-แแ แแแขแแ แแแแชแแแกแแแแก แแ แแแแแแงแแแแก JWT แแแขแแแ แกแฎแแ แกแแ แแแกแแแแก แแแแฎแแแแแแจแ. แแก แฃแแแแแกแแแแแ แฎแแ แชแแแแแแแ แจแแแแแแแแแ แแ (
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
แแ แจแแชแแแแแ แแแกแจแ แแก แแแแจแแแแแแแแแ, แ แแแแแแแช แแแแแ แแแแฌแแ แแ (
const Config = {
clientID: '{YOUR_CLIENT_ID}',
domain:'{YOUR_DOMAIN}',
audience: '{YOUR_AUDIENCE}',
ingressIP: '{EXTERNAL_IP}' // ะัะฟะพะปัะทัะตััั ะดะปั ัะตะดะธัะตะบัะฐ ะฟะพัะปะต ะฐััะตะฝัะธัะธะบะฐัะธะธ
}
แแแแแแแชแแ แแแแแแ. แแแฃแแแแแ แแฅแแแแ Docker 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-แแ, แกแแแแช แฃแแแ แจแแฎแแแแแ (แแ แแแ แแแแกแขแ แแ แแแ), แ แแก แจแแแแแแแช แแแแแแแแแแแแแ แแ แแแแ แแแ, แกแแแแแแแช แแแฎแแแแ แฃแแแ แแแแแฌแแแแฃแแ แแแแฎแแแแแแ. แแฃ แกแขแแขแแแก แแแ แแแ แแแฌแแแแแจแ แแฆแแแจแแฃแ แแ แซแแแแแแแก curl-แแ แกแชแแแแ, แแแแฆแแแ แแแแก 401 แกแขแแขแฃแกแแก แแแแ, แ แแช แแแฃแแแแแแก แแแแแ, แ แแ แแแแฎแแแแ แแ แแ แแก แแแขแแ แแแแแฃแแ.
แแแแแ แแแแแแแแแ แจแแแแแแ แแแแแฏแ - แแแแฎแแแแแก แแแขแแ แแแแชแแ.
แแแขแแ แแแแชแแ Auth0-แแ
แแแแแแขแแคแแแแชแแ แกแแจแฃแแแแแแก แแแแซแแแแก แแแแแแแ แแแ แแ แแก แแแแฎแแแ แแแแแ, แแแแ แแ แแแขแแ แแแแชแแแ แกแแญแแ แ แแแแกแแแแแก, แ แแ แแแชแแแแ แ แแแ แแฅแแก แแแก แฌแแแแแ. Istio แแแแแแแแแ แแแกแขแ แฃแแแแขแแแก แแแแกแแแแกแแช.
แแแแแแแแแ, แแแแแ แจแแแฅแแแแ แแแแฎแแแ แแแแแก แแ แ แฏแแฃแคแ (แแฎแแแแ แแแแแ แแแ แฅแแแแแ):
- แฌแแแ แแแ (แแแแฎแแแ แแแแแแ) โ แแฎแแแแ SA-WebApp แแ SA-Frontend แกแแ แแแกแแแแ แฌแแแแแแ;
- แแแแแ แแขแแ แแแ (แแแแแ แแขแแ แแแ) โ แกแแแแแ แกแแ แแแกแแ แฌแแแแแแ.
แแแขแแ แแแแชแแแก แแแแชแแคแชแแ
แแ แฏแแฃแคแแแแก แจแแกแแฅแแแแแแ, แฉแแแ แแแแแแแงแแแแแ Auth0 แแแขแแ แแแแชแแแก แแแคแแ แแแแแแก แแ แแแแแแแงแแแแแ Istio-แก, แ แแแ แแแแแฌแแแแ แแแ แกแฎแแแแแกแฎแแ แแแแแก แฌแแแแแ.
Auth0 แแแขแแ แแแแชแแแก แแแกแขแแแแชแแ แแ แแแแคแแแฃแ แแชแแ
Auth0 แแแ แขแแแแ แแแแแแแ แแแคแแ แแแแแแแแ (แแแแ แซแแแแแ) แแ แแแแแแกแขแแแแ แแ Auth0 แแแขแแ แแแแชแแ. แแแกแขแแแแชแแแก แจแแแแแ แแแแแแแ แแแขแแ แแแแชแแแก แแแคแแ แแแแแแแ แแฅ - แแแแฏแแ แแก แแแแคแแแฃแ แแชแแแแ แแแฌแแแแฃแแแแแ แแแแ แแแ แฏแแแแ แแฃแแฎแแจแ แแ แแแ แฉแแแ แแแแแฃแก แจแแกแแแแแแกแ แแแ แแแแขแ (แแแแคแแแฃแ แแชแแ). แฏแแฃแคแแแแก แแแแฅแขแแฃแ แแแ (แฏแแฃแคแแแ) แแ แแแแฌแแแแฃแแแ แแแแแฅแแแงแแแแแก แฌแแกแแก แฆแแแแแแ (แแแแแฅแแแงแแแแแก แฌแแกแ).
แฏแแฃแคแแแแก แจแแฅแแแ
แแแขแแ แแแแชแแแก แแแคแแ แแแแแแจแ แแแแแแแ แฏแแฃแคแแแ แแ แจแแฅแแแแแ แฏแแฃแคแ แแแแแ แแขแแ แแแ. แแแแแแแแ แฉแแแ แงแแแแ แแแแแแขแแคแแชแแ แแแฃแ แแแแฎแแแ แแแแแก แแแแแแฎแแแแแ แ แแแแ แช แฉแแแฃแแแแ แแ แแแแฎแแแ แแแแแแก, แแ แแ แแก แกแแญแแ แ แแแแแแแก แแแแแขแแแแแ แฏแแฃแคแแก แจแแฅแแแ.
แแแ แฉแแแ แฏแแฃแคแ แแแแแ แแขแแ แแแ, แฒแแญแแ แ แฌแแแ แแแแก แแแแแขแแแ, แแแแแแขแแ แแฅแแแแ แซแแ แแแแแ แแแแแ แแจแ. แแแขแแแแ แแแแแแ แแ แแแแฎแแแ แแแแแ แฏแแฃแคแแก แแแ แแจแ, แ แแแ แแแ แฌแแฃแแแแ, แ แแ แแแ แแแ แซแแแฃแแ แแฅแแ แฌแแแแแ. (แแฎแแแ แแแแฎแแแ แแแแแแแก แจแแฅแแแ แจแแกแแซแแแแแแแ แฎแแแแ Auth0 แแแ แขแแแ > แแแแฎแแแ แแแแแแ > แแแแฎแแแ แแแแแก แจแแฅแแแ.)
แแแแแแขแแ แฏแแฃแคแฃแ แ แแ แแขแแแแแ Access Token-แก
แแแแฎแแแ แแแแแแ แแแแแแขแแแ แฏแแฃแคแแแก, แแแแ แแ แแก แแแคแแ แแแชแแ แแกแแแ แฃแแแ แแแกแแฎแแก แฌแแแแแแก แแแจแแแแจแ. OpenID Connect-แแก แจแแกแแกแ แฃแแแแแแ แแ แแแแแ แแ แแก แฉแแแแแแแก แกแแญแแ แ แฏแแฃแคแแแแก แแแกแแแ แฃแแแแแแ, แแแขแแแก แแแกแญแแ แแแแ แกแแแฃแแแ แแก แแแแแขแแแ
แฌแแกแแก แจแแกแแฅแแแแแแ แแแแแแแ Auth0 แแแ แขแแแแ แฌแแกแแแ, แฒแแญแแ แ แฌแแกแแก แจแแฅแแแ แแ แจแแแ แฉแแแ แชแแ แแแแ แฌแแกแ แจแแแแแแแแแแแ.
แแแแแแแแ แแ แฅแแแแแ แแแชแแแฃแแ แแแแ แแ แจแแแแแฎแแ แแฎแแแ แฌแแกแแ แแแแแแขแแ แฏแแฃแคแฃแ แ แแ แแขแแแแแ (
function (user, context, callback) {
context.accessToken['https://sa.io/group'] = user.groups[0];
return callback(null, user, context);
}
แจแแแแจแแแ: แแก แแแแ แแฆแแแก แแแ แแแ แแแแฎแแแ แแแแแแ แฏแแฃแคแก, แ แแแแแแช แแแแกแแแฆแแ แฃแแแ แแแขแแ แแแแชแแแก แแแคแแ แแแแแแจแ แแ แแแแขแแแก แฌแแแแแแก แแแขแแแก, แ แแแแ แช แแแ แแแแฃแแ แแ แแขแแแแแ (แแแกแ แกแแฎแแแแแแก แกแแแ แชแแก แฅแแแจ, แ แแแแ แช แแแแก แแแแแฎแแแก Auth0).
แแแแ แแแ แแแแ แฃแแแแ แฌแแกแแแ แแ แจแแแแแฌแแแ, แ แแ แแแฅแแ แแ แ แฌแแกแ แแแฌแแ แแแ แจแแแแแแ แแแแแแแแแแ แแแแ:
- แแแขแแ แแแแชแแ-แแแแ แซแแแแแ
- แแแแแแขแแ แฏแแฃแคแฃแ แ แแ แแขแแแแแ
แแแแแแแแแแ แแแ แแแแจแแแแแแแแแแ, แ แแแแแ แฏแแฃแคแแก แแแแ แแฆแแแก แฌแแกแก แแกแแแฅแ แแแฃแแแ แแแขแแ แแแแชแแ-แแแแ แซแแแแแ แฎแแแ แแแแก แจแแแแแ แแแแขแแแ แแ แแขแแแแแแก แแแแ แ แฌแแกแแ. แจแแแแแ แแ แแก แแกแแแ แฌแแแแแแก แแแจแแแ:
{
"https://sa.io/group": "Moderators",
"iss": "https://sentiment-analysis.eu.auth0.com/",
"sub": "google-oauth2|196405271625531691872"
// [ัะพะบัะฐัะตะฝะพ ะดะปั ะฝะฐะณะปัะดะฝะพััะธ]
}
แแฎแแ แแฅแแแ แฃแแแ แแแแแแแคแแแฃแ แแ แแ Envoy proxy แแแแฎแแแ แแแแแก แฌแแแแแแก แจแแกแแแแฌแแแแแแ, แ แแกแแแแกแแช แฏแแฃแคแ แแแแฆแแแฃแ แแฅแแแแ แกแแ แฉแแแแแแ (https://sa.io/group
) แแแแ แฃแแแแฃแ แฌแแแแแแก แแแขแแแจแ. แแก แแ แแก แกแขแแขแแแก แจแแแแแแ แแแฌแแแแก แแแแ.
แแแขแแ แแแแชแแแก แแแแคแแแฃแ แแชแแ แแกแขแแแจแ
แแแขแแ แแแแชแแแก แแฃแจแแแแแกแแแแก, แแฅแแแ แฃแแแ แฉแแ แแแ RBAC Istio-แกแแแแก. แแแแกแแแแแก แฉแแแ แแแแแแแงแแแแแ แจแแแแแ แแแแคแแแฃแ แแชแแแก:
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.
แฉแแแฃแแแแ แแแ แแแแฎแแแ แแแแแแแกแแแแก แฉแแแ แแแแฃแจแแแแ แฌแแแแแแก แแแ แแแแฃแ แกแแ แแแกแแแแ (
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
แแแแแแงแแแแ ServiceRole แแแแ แแแก แงแแแแ แแแแแขแแ แแ (
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
แฌแแแแแ แแแแแ แแขแแ แแแแก แแแแคแแแฃแ แแชแแแแ
แแแแแ แแขแแ แแแก แแแกแฃแ แก แฉแแ แแแ แฌแแแแแ แงแแแแ แกแแ แแแกแแ (
apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
name: mod-user
namespace: default
spec:
rules:
- services: ["*"]
paths: ["*"]
methods: ["*"]
แแแแ แแ แฉแแแ แแแแแแ แแกแแแ แฃแคแแแแแแ แแฎแแแแ แแ แแแแฎแแแ แแแแแแแกแแแแก, แ แแแแแแ แฌแแแแแแก แแแจแแแ แจแแแชแแแก แแ แแขแแแแแแก https://sa.io/group
แแแแจแแแแแแแแ Moderators
(
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-แก แแแกแแฌแงแแแแ.
PS แแแแ แแแแแแแกแแแ
แแกแแแ แฌแแแแแแฎแแ แฉแแแแก แแแแแแ:
- "แฃแแ แฃแแแ แแแแ แแกแแ แแแกแแแก Istio-แกแแแ แแ แแแ":
แแแฌแแแ 1 (แซแแ แแแแแ แแแฎแแกแแแแแแแแแแก แจแแกแแแแแ) ,แแแฌแแแ 2 (แแแ แจแ แฃแขแแแแชแแ, แแแซแ แแแแแก แแแแขแ แแแ) ; - ยซ
แแแแแฃแแขแ - แแกแฃแแฃแฅแ แกแแ แแแกแแก แแแแ Kubernetes-แแกแแแแก "; - ยซ
แ แ แแ แแก แกแแ แแแกแฃแแ แฅแกแแแ แแ แ แแขแแ แแญแแ แแแแ แแก [แแแแ แกแแ แแแกแแแแ แฆแ แฃแแแแแแแ แแแแแแแชแแแกแแแแก]? ".
แฌแงแแ แ: www.habr.com