Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Të gjitha janë të sakta, pas lëshimit Hashicorp Consul 1.5.0 në fillim të majit 2019, në Consul mund të bëni autorizimin e aplikacioneve dhe shërbimeve që ekzekutohen në Kubernetes, në mënyrë natyrale.

NĂ« kĂ«tĂ« udhĂ«zues, ne do tĂ« krijojmĂ« hapat-hap pas hapi POC (Provimi i konceptit (Proof of concept, PoC – provimi i [realizueshmĂ«risĂ«] sĂ« konceptit – shĂ«n. pĂ«rk.), duke demonstruar kĂ«tĂ« funksionalitet tĂ« ri. Pritet qĂ« ju tĂ« keni njohuri tĂ« bazuara mbi Kubernetes dhe Hashicorp’s Consul. NĂ«se dĂ«shironi, mund tĂ« pĂ«rdorni çdo platformĂ« cloud ose ambient lokal, por nĂ« kĂ«tĂ« udhĂ«zues do tĂ« pĂ«rdorim Google’s Cloud Platform.

Përmbledhje

Nëse kalojmë te dokumentacioni i Consul për metodën e tij të autorizimit, ne do të marrim një përmbledhje të shkurtër të qëllimit dhe përdorimit të saj, si dhe disa detaje teknike dhe një përmbledhje të përgjithshme të logjikës. Ju rekomandoj të lexoni atë të paktën një herë para se të vazhdoni, sepse tani do ta shpjegoj dhe ta sqaroj gjithçka.

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Skema 1: Përmbledhja zyrtare e metodës së autorizimit të Consul

Le të shikojmë në dokumentacionin për metodën specifike të autorizimit në Kubernetes.

Sigurisht, ka informacion të dobishëm atje, por nuk ka udhëzime se si të përdoret me të vërtetë. Prandaj, siç bën çdo person me mend, kërkoni në internet për udhëzime. Pas kësaj... përballeni me dështimin. Kështu ndodh. Le të e rregullojmë këtë.

Para se të kalojmë në krijimin e POC-it tonë, le të kthehemi në një përmbledhje të metodave të autorizimit të Consul (Schema 1) dhe ta saktësojmë atë në kontekstin e Kubernetes.

Arkitektura

Në këtë udhëzues do të krijojmë një server Consul në një makinë të veçantë, e cila do të ndërveprojë me klasterin Kubernetes me klientin e instaluar të Consul. Më pas do të krijojmë aplikacionin tonë të rremë në pod dhe do ta përdorim metodën tonë të konfigurimit për të lexuar nga magazina jonë Consul key/value.

Schema më poshtë tregon në detaje arkitekturën që po krijojmë në këtë udhëzues, si dhe logjikën e metodës së autorizimit, e cila do të shpjegohet më vonë.

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Schema 2: Përmbledhja e metodës së autorizimit në Kubernetes

Një shënim i vogël: Servisi i Consul nuk ka nevojë të jetojë jashtë klasterit Kubernetes për të funksionuar. Por po, mund ta bëjë edhe në këtë mënyrë.

Pra ndaj, duke marrë skemën përmbledhëse të Consul (Skema 1) dhe duke e aplikuar atë në Kubernetes, ne marrim skemën e sipërme (Skema 2), dhe logjika këtu do të jetë si më poshtë:

  1. Çdo pod do tĂ« lidhet me njĂ« llogari shĂ«rbimi, qĂ« pĂ«rmban njĂ« token JWT, i gjeneruar dhe i njohur nga Kubernetes. Ky token gjithashtu futet nĂ« pod si standard.
  2. Aplikacioni ose shërbimi ynë brenda pod-it iniciaton një komandë lidhëse me klientin tonë Consul. Në kërkesën për lidhje do të përmendet gjithashtu tokeni ynë dhe emri i krijuar posaçërisht metodës së autorizimit (tipi Kubernetes). Ky hap nr. 2 përputhet me hapin 1 të skemës Consul (Skema 1).
  3. Klienti ynë Consul më pas do të dërgojë këtë kërkesë te serveri ynë Consul.
  4. MAGJIA! Këtu serveri Consul verifikon autenticitetin e kërkesës, mbledh informacion rreth identitetit të kërkesës dhe e krahason atë me ndonjë rregull të paracaktuar të asocuar. Më poshtë do të ketë një skemë tjetër për ta ilustruar këtë. Ky hap korrespondon me hapat 3, 4 dhe 5 të skemës përmbledhëse të Consul (Skema 1).
  5. Serveri ynë Consul gjeneron një token Consul me lejet në përputhje me rregullat e metodës së autorizimit që kemi përcaktuar në lidhje me identitetin e kërkuesit. Më pas, ai do ta dërgojë këtë token prapa. Kjo korrespondon me hapin 6 të skemës Consul (Skema 1).
  6. Klienti ynë Consul shtyn tokenin në aplikacionin ose shërbimin e kërkuesit.

Aplikacioni ose shërbimi ynë tani mund të përdorë këtë token Consul për të komunikuar me të dhënat tona Consul, siç është përcaktuar nga privilegjet e tokenit.

Magjia është zbuluar!

Për ata prej jush që nuk janë të kënaqur vetëm me një lepur nga kapa dhe duan të dinë se si funksionon... lejoni që të "ju tregoj sa e thellë është nora e lepurit».

Siç u përmend më parë, hapi ynë "magjik" (Skema 2: Hapi 4) është se serveri Consul verifikon autenticitetin e kërkesës, mbledh informacionin rreth kërkesës dhe e krahasuar atë me çdo rregull të paracaktuar të asocuar. Ky hap korrespondon me hapat 3, 4 dhe 5 të skemës përmbledhëse Consul (Skema 1). Më poshtë është një diagram (Skema 3), qëllimi i të cilit është të ilustronte se çfarë ndodh në të vërtetë nën kapak metodën specifike të autorizimit Kubernetes.

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Skema 3: Magjia zbulon!

  1. Si një pikënisje, klienti ynë Consul drejton kërkesën në hyrje në serverin tonë Consul me tokenin e llogarisë Kubernetes dhe emrin konkret të instancës së metodës së autorizimit që ishte krijuar më parë. Ky hap përkon me hapin 3 në shpjegimin e mëparshëm të skemës.
  2. Tani serveri Consul (ose lideri) duhet të verifikojë autentikimin e tokenit të marrë. Prandaj, ai do të konsultohet me klasterin Kubernetes (nëpërmjet klientit Consul) dhe, nëse ka lejet përkatëse, ne do të zbulojmë nëse tokeni është autentik dhe kujt i përket.
  3. Më pas, kërkesa e verifikuar kthehet te lideri Consul, dhe në serverin Consul bëhet një kërkim për instancën e metodës së autorizimit me emrin e specifikuar në kërkesën e hyrjes në sistem (dhe të tipit Kubernetes).
  4. Lideri Consul përcakton instancën e metodës së autorizimit të specifikuar (nëse gjendet) dhe lexon grupin e rregullave të lidhjes që i janë bashkëngjitur. Më pas, ai lexon këto rregulla dhe i krahasohet me atributet e verifikuara të identitetit.
  5. Tada! Kalojmë në hapin 5 në shpjegimin e mëparshëm të skemës.

Nisni serverin Consul në një makinë virtuale të zakonshme

Nga kjo pikë e tutje, unë do të jap kryesisht udhëzime për krijimin e këtij POC, shpesh në pikat, pa fjalitë shpjeguese të plota. Po ashtu, siç u përmend më parë, do të përdor GCP për të ndërtuar tërë infrastrukturën, por ju mund ta krijoni të njëjtën infrastrukturë kudo tjetër.

  • Nisni njĂ« makinĂ« virtuale (instancĂ« / server).

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

  • Krijoni njĂ« rregull pĂ«r firewall (grup sigurie nĂ« AWS):
  • MĂ« pĂ«lqen t'i jap tĂ« njĂ«jtin emĂ«r makinĂ«s rregullit dhe etiketĂ«s rrjetit, nĂ« kĂ«tĂ« rast Ă«shtĂ« "skywiz-consul-server-poc".
  • Gjeni adresĂ«n IP tĂ« kompjuterit tuaj lokal dhe shtojeni atĂ« nĂ« listĂ«n e adresave IP tĂ« burimit, nĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« aksesojmĂ« ndĂ«rfaqen e pĂ«rdoruesit (UI).
  • Hapni portin 8500 pĂ«r UI. Klikoni Krijo (Create). Shpejt do ta ndryshojmĂ« pĂ«rsĂ«ri kĂ«tĂ« firewall [link].
  • Shtoni njĂ« rregull pĂ«r firewall pĂ«r instancĂ«n. Kthehuni nĂ« panelin e monitorimit VM nĂ« serverin Consul dhe shtoni "skywiz-consul-server-poc" nĂ« fushĂ«n e etiketave rrjetit. Klikoni Ruaj (Save).

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

  • Instaloni Consul nĂ« makinĂ« virtuale, kontrolloni kĂ«tu. Mos e harroni, ju nevojitet versioni Consul ≄ 1.5 [link].
  • Do tĂ« krijojmĂ« Consul me node tĂ« vetme — konfigurimi Ă«shtĂ« si nĂ« vijim.

groupadd --system consul
useradd -s /sbin/nologin --system -g consul consul
mkdir -p /var/lib/consul
chown -R consul:consul /var/lib/consul
chmod -R 775 /var/lib/consul
mkdir /etc/consul.d
chown -R consul:consul /etc/consul.d

  • NjĂ« udhĂ«zues mĂ« i detajuar pĂ«r instalimin e Consul dhe konfigurimin e njĂ« klasteri me 3 nod. kĂ«tu.
  • Krijoni skedarin /etc/consul.d/agent.json nĂ« kĂ«tĂ« mĂ«nyrĂ« [link]:

### /etc/consul.d/agent.json
{
 "acl" : {
 "enabled": true,
 "default_policy": "deny",
 "enable_token_persistence": true
 }
}

  • Nisni serverin tonĂ« Consul:

consul agent 
-server 
-ui 
-client 0.0.0.0 
-data-dir=/var/lib/consul 
-bootstrap-expect=1 
-config-dir=/etc/consul.d

  • Duhet tĂ« shihni shumĂ« dalje dhe pĂ«rfundimisht “
 update blocked by ACLs”.
  • Gjeni adresĂ«n IP tĂ« jashtme tĂ« serverit Consul dhe hapni shfletuesin me kĂ«tĂ« IP nĂ« portin 8500. Sigurohuni qĂ« UI tĂ« hapet.
  • Provo tĂ« shtosh disa çelĂ«sa/vlera. Duhet tĂ« ketĂ« njĂ« gabim. Kjo Ă«shtĂ« pĂ«r shkak se kemi ngarkuar serverin Consul me ACL dhe kemi ndaluar tĂ« gjitha rregullat.
  • Kthehuni nĂ« shell-in tuaj nĂ« serverin Consul dhe nisni procesin nĂ« mĂ«nyrĂ« qĂ« ai tĂ« punojĂ« nĂ« sfond ose ndonjĂ« mĂ«nyrĂ« tjetĂ«r, dhe shkruani kĂ«tĂ«:

consul acl bootstrap

  • Gjeni vlerĂ«n «SecretID» dhe kthehuni te UI. NĂ« skedĂ«n «ACL», shkruani identifikuesin sekret tĂ« tokenit qĂ« sapo kopjuat. Kopjoni SecretID diku tjetĂ«r, do na nevojitet mĂ« vonĂ«.
  • Tani shtoni njĂ« çift çelĂ«s/vlerĂ«. PĂ«r kĂ«tĂ« POC, do tĂ« shtojmĂ«: çelĂ«si: «custom-ns/test_key», vlera: «Jam nĂ« folderin custom-ns!»

Fillimi i një Kubernetes klasteri për aplikacionin tonë me klientin Consul si Daemonset

  • Krijoni njĂ« klaster K8s (Kubernetes). Ne do ta krijojmĂ« nĂ« tĂ« njĂ«jtĂ«n zonĂ« si serveri, pĂ«r akses mĂ« tĂ« shpejtĂ«, dhe pĂ«r kĂ«tĂ« arsye mund tĂ« pĂ«rdorim tĂ« njĂ«jtin subnet pĂ«r lidhje tĂ« lehta me IP-tĂ« e brendshme. Do ta quajmĂ« «skywiz-app-with-consul-client-poc».

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

  • Si njĂ« shĂ«nim, ja njĂ« udhĂ«zues i mirĂ« qĂ« kam gjetur kur konfiguroja POC klasterin Consul me Consul Connect.
  • Ne gjithashtu do tĂ« pĂ«rdorim Hashicorp helm chart me njĂ« skedĂ« tĂ« zgjeruar vlerash.
  • Instaloni dhe konfigurojini Helm. Hapat e konfigurimit:

kubectl create serviceaccount tiller --namespace kube-system
kubectl create clusterrolebinding tiller-admin-binding 
   --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
./helm init --service-account=tiller
./helm update

### poc-helm-consul-values.yaml
global:
 enabled: false
 image: "consul:latest"
# Expose the Consul UI through this LoadBalancer
ui:
 enabled: false
# Allow Consul to inject the Connect proxy into Kubernetes containers
connectInject:
 enabled: false
# Configure a Consul client on Kubernetes nodes. GRPC listener is required for Connect.
client:
 enabled: true
 join: ["<PRIVATE_IP_CONSUL_SERVER>"]
 extraConfig: |
{
  "acl" : {
 "enabled": true,   
 "default_policy": "deny",   
 "enable_token_persistence": true 
  }
}
# Minimal Consul configuration. Not suitable for production.
server:
 enabled: false
# Sync Kubernetes and Consul services
syncCatalog:
 enabled: false

  • Zbatoni helm chart:

./helm install -f poc-helm-consul-values.yaml ./consul-helm - emri skywiz-app-with-consul-client-poc

  • Kur pĂ«rpiqet tĂ« nisĂ«, do tĂ« nevojiten leje pĂ«r serverin Consul, kĂ«shtu qĂ« lehtĂ«sojmĂ« ato.
  • Kujdesi pĂ«r «range adresash Pod» tĂ« vendosur nĂ« panelin e kontrollit tĂ« klasters, dhe kthehuni nĂ« rregullin tonĂ« pĂ«r firewall «skywiz-consul-server-poc».
  • Shtoni ranges adresash pĂ«r podin nĂ« listĂ«n e IP-ve dhe hapni portat 8301 dhe 8300.

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

  • Shkoni te Consul UI, dhe pas disa minutash do tĂ« shihni qĂ« klastri ynĂ« do tĂ« shfaqet nĂ« skedĂ«n e nodĂ«ve.

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Konfiguroni metodën e autorizimit duke integruar Consul me Kubernetes.

  • Kthehuni nĂ« shell-in e serverit tĂ« Consul dhe eksportoni tokenin qĂ« keni ruajtur mĂ« parĂ«:

export CONSUL_HTTP_TOKEN=

  • Na nevojitet informacioni nga Kubernetes klasteri ynĂ« pĂ«r tĂ« krijuar njĂ« instancĂ« tĂ« metodĂ«s auth:
  • kubernetes-host

kubectl get endpoints | grep kubernetes

  • kubernetes-service-account-jwt

kubectl get sa -consul-client -o yaml | grep "- name:"
kubectl get secret  -o yaml | grep token:

  • Tokeni Ă«shtĂ« i koduar nĂ« base64, prandaj dekodoni atĂ« me mjetin tuaj tĂ« preferuar [link]
  • kubernetes-ca-cert

kubectl get secret  -o yaml | grep ca.crt:

  • Merrni certifikatĂ«n “ca.crt” (pas dekodimit nga base64) dhe shkruani atĂ« nĂ« skedarin “ca.crt”.
  • Tani krijoni njĂ« instancĂ« tĂ« metodĂ«s auth, duke zĂ«vendĂ«suar vendet rezervĂ« me vlerat qĂ« sapo keni marrĂ«.

consul acl auth-method create 
-type "kubernetes" 
-name "auth-method-skywiz-consul-poc" 
-description "Ky është një metodë autentikimi që përdor kubernetes për klusterin skywiz-app-with-consul-client-poc" 
-kubernetes-host "" 
-kubernetes-ca-cert=@ca.crt 
-kubernetes-service-account-
jwt=""

  • MĂ« pas duhet tĂ« krijojmĂ« njĂ« rregull dhe ta lidhim atĂ« me njĂ« rol tĂ« ri. PĂ«r kĂ«tĂ« pjesĂ« mund tĂ« pĂ«rdorni UI-nĂ« e Consul, por ne do tĂ« pĂ«rdorim linjĂ«n e komandĂ«s.
  • Shkruani rregullin

### kv-custom-ns-policy.hcl
key_prefix "custom-ns/" {
 policy = "write"
}

  • Aplikoni rregullin

consul acl policy create 
-name kv-custom-ns-policy 
-description "Ky është një shembull i politikës për kv në custom-ns/" 
-rules @kv-custom-ns-policy.hcl

  • Gjeni identifikuesin e rregullit qĂ« sapo krijuat, nga dalja.
  • Krijoni njĂ« rol me rregullin e ri.

consul acl role create 
-name "custom-ns-role" 
-description "Ky është një shembull rol për hapësirën e custom-ns" 
-policy-id

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-ns-role' 
-selector='serviceaccount.namespace=="custom-ns"'

Konfigurimet përfundimisht

TĂ« drejtat e aksesit

  • Krijoni tĂ« drejtat e qasjes. Na nevojitet tĂ« japim leje Consul pĂ«r tĂ« verifikuar dhe identifikuar identitetin e tokenit tĂ« llogarisĂ« shĂ«rbimit K8s.
  • Shkruani nĂ« skedarin e mĂ«poshtĂ«m [lidhjen]:

###skywiz-poc-consul-server_rbac.yaml
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: review-tokens
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: system:auth-delegator
 apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: service-account-getter
 namespace: default
rules:
- apiGroups: [""]
 resources: ["serviceaccounts"]
 verbs: ["get"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
 name: get-service-accounts
 namespace: default
subjects:
- kind: ServiceAccount
 name: skywiz-app-with-consul-client-poc-consul-client
 namespace: default
roleRef:
 kind: ClusterRole
 name: service-account-getter
 apiGroup: rbac.authorization.k8s.io

  • Le tĂ« krijojmĂ« tĂ« drejtat e qasjes

kubectl create -f skywiz-poc-consul-server_rbac.yaml

Koneksioni me Consul Client

  • Siç u theksua kĂ«tu, ka disa opsione pĂ«r tĂ« lidhur nĂ« daemonset, por ne do tĂ« kalojmĂ« nĂ« zgjidhjen e thjeshtĂ« tĂ« mĂ«poshtme:
  • Aplikoni skedarin e mĂ«poshtĂ«m [link].

### poc-consul-client-ds-svc.yaml
apiVersion: v1
kind: Service
metadata:
 name: consul-ds-client
spec:
 selector:
   app: consul
   chart: consul-helm
   component: client
   hasDNS: "true"
   release: skywiz-app-with-consul-client-poc
 ports:
 - protocol: TCP
   port: 80
   targetPort: 8500

  • MĂ« pas aplikoni komandĂ«n e mĂ«poshtme pĂ«r tĂ« krijuar configmap [link]. Kini parasysh se po referohemi nĂ« emrin e shĂ«rbimit tonĂ«, zĂ«vendĂ«sojeni ashtu siç nevojitet.

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
 labels:
   addonmanager.kubernetes.io/mode: EnsureExists
 name: kube-dns
 namespace: kube-system
data:
 stubDomains: |
   {"consul": ["$(kubectl get svc consul-ds-client -o jsonpath='{.spec.clusterIP}')"]}
EOF

Testimi i metodës auth

Tani le të shohim magjinë në veprim!

  • Krijoni disa dosje tĂ« tjera kryesore me tĂ« njĂ«jtin çelĂ«s tĂ« nivelit tĂ« lartĂ« (p.sh. /sample_key) dhe vlerĂ«n sipas zgjedhjes suaj. Krijoni politikat dhe rolet pĂ«r rrugĂ«t e reja tĂ« çelĂ«sit. Ne do tĂ« bĂ«jmĂ« lidhjet mĂ« vonĂ«.

Hyrje nĂ« Autorizimin e Hashicorp Consul’s Kubernetes

Testi i përdoruesit të hapësirës emri:

  • Le tĂ« krijojmĂ« hapĂ«sirĂ«n tonĂ« tĂ« emrit:

kubectl create namespace custom-ns

  • Do tĂ« krijojmĂ« njĂ« pod nĂ« hapĂ«sirĂ«n tonĂ« tĂ« re tĂ« emrave. Shkruani konfigurimin pĂ«r podin.

###poc-ubuntu-custom-ns.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-ns
 namespace: custom-ns
spec:
 containers:
 - name: poc-ubuntu-custom-ns
   image: ubuntu
   command: ["/bin/bash", "-ec", "sleep infinity"]
 restartPolicy: Never

  • Krijoni podin:

kubectl create -f poc-ubuntu-custom-ns.yaml

  • Sapo tĂ« nisĂ« kontejneri, hyni atje dhe instaloni curl.

kubectl exec poc-ubuntu-custom-ns -n custom-ns -it /bin/bash
apt-get update && apt-get install curl -y

  • Tani do tĂ« dĂ«rgojmĂ« njĂ« kĂ«rkesĂ« pĂ«r t'u kyçur nĂ« Consul, duke pĂ«rdorur metodĂ«n e autorizimit qĂ« e krijuam mĂ« parĂ« [link].
  • PĂ«r tĂ« parĂ« token-in e futur nga llogaria juaj e shĂ«rbimit:

cat /run/secrets/kubernetes.io/serviceaccount/token

  • Shkruani kĂ«tĂ« nĂ« skedarin brenda kontejnerit:

### payload.json
{
 "AuthMethod": "auth-method-test",
 "BearerToken": "<jwt_token>"
}

  • Kyçu!

curl 
--request POST 
--data @payload.json 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • PĂ«r tĂ« kryer hapat e mĂ«sipĂ«rm nĂ« njĂ« rresht (pasi do tĂ« kryejmĂ« disa teste), mund tĂ« bĂ«ni si nĂ« vijim:

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • Funksionon! NĂ« tĂ« paktĂ«n. Tani merrni SecretID dhe provoni tĂ« qaseni te çelĂ«si/vlera qĂ« duhet tĂ« kemi qasje.

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-ns/test_key --header “X-Consul-Token: ”

  • Mund tĂ« dekodoni «Value» nĂ« base64 dhe tĂ« shihni se si pĂ«rputhet me vlerĂ«n nĂ« custom-ns/test_key nĂ« UI. NĂ«se keni pĂ«rdorur tĂ« njĂ«jtĂ«n vlerĂ« tĂ« dhĂ«nĂ« mĂ« sipĂ«r nĂ« kĂ«tĂ« udhĂ«zues, vlera juaj e koduar do tĂ« jetĂ« IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.

Testi i llogarisë së shërbimit të klientit:

  • Krijoni njĂ« ServiceAccount tĂ« personalizuar me komandĂ«n e mĂ«poshtme [link].

kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
 name: custom-sa
EOF

  • Krijoni njĂ« skedĂ« tĂ« re konfigurimi pĂ«r pod-in. Vini re se kam pĂ«rfshirĂ« instalimin e curl pĂ«r ta bĂ«rĂ« jetĂ«n mĂ« tĂ« lehtĂ« 🙂

###poc-ubuntu-custom-sa.yaml
apiVersion: v1
kind: Pod
metadata:
 name: poc-ubuntu-custom-sa
 namespace: default
spec:
 serviceAccountName: custom-sa
 containers:
 - name: poc-ubuntu-custom-sa
   image: ubuntu
   command: ["/bin/bash","-ec"]
   args: ["apt-get update && apt-get install curl -y; sleep infinity"]
 restartPolicy: Never

  • Pas kĂ«saj, hapni njĂ« shell brenda kontejnerit.

kubectl exec -it poc-ubuntu-custom-sa /bin/bash

  • Kyçu!

echo "{ 
"AuthMethod": "auth-method-skywiz-consul-poc", 
"BearerToken": "$(cat /run/secrets/kubernetes.io/serviceaccount/token)" 
}" 
| curl 
--request POST 
--data @- 
consul-ds-client.default.svc.cluster.local/v1/acl/login

  • Leje e refuzuar. Oh, harrojmĂ« tĂ« shtojmĂ« lidhjen e re tĂ« rregullave me lejet pĂ«rkatĂ«se, le tĂ« bĂ«jmĂ« kĂ«tĂ« tani.

Përsëritni hapat e mëparshëm:
a) Krijoni një Politike identike për prefiksin «custom-sa/».
b) Krijoni një Rol, quajeni «custom-sa-role»
c) Lidheni Politiken me Rol.

  • Krijoni njĂ« Rule-Binding (vetĂ«m nga cli / api). Kushtojini vĂ«mendje vlerĂ«s tjetĂ«r tĂ« flagut tĂ« selektorit.

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='custom-sa-role' 
-selector='serviceaccount.name=="custom-sa"'

  • PĂ«rsĂ«ritni login-in nga kontejneri «poc-ubuntu-custom-sa». Sukses!
  • Kontrolloni aksesin ton nĂ« rrugĂ« kyçe custom-sa/.

curl 
consul-ds-client.default.svc.cluster.local/v1/kv/custom-sa/test_key --header "X-Consul-Token: "

  • Mund tĂ« siguroheni qĂ« ky token nuk ofron akses nĂ« kv nĂ« "custom-ns/". Thjesht pĂ«rsĂ«ritni komandĂ«n e mĂ«sipĂ«rme pasi tĂ« zĂ«vendĂ«soni "custom-sa" me prefixin "custom-ns".
    Leje e ndaluar.

Shembulli i overlay-it:

  • Vlen tĂ« theksohet se tĂ« gjitha pĂ«rputhjet e rule-binding do tĂ« shtohen nĂ« token me kĂ«to tĂ« drejta.
  • Kontejneri ynĂ« "poc-ubuntu-custom-sa" ndodhet nĂ« hapĂ«sirĂ«n e emrit tĂ« paracaktuar — kĂ«shtu qĂ« le tĂ« pĂ«rdorim atĂ« pĂ«r njĂ« tjetĂ«r rule-binding.
  • PĂ«rsĂ«ritni hapat e mĂ«parshĂ«m:
    a) Krijoni një Politike identike për prefix-in e çelësit "default/".
    b) Krijoni njĂ« Rol, quajeni “default-ns-role”
    c) Lidheni Politiken me Rol.
  • Krijoni njĂ« Rule-Binding (e mundshme vetĂ«m nga cli / api)

consul acl binding-rule create 
-method=auth-method-skywiz-consul-poc 
-bind-type=role 
-bind-name='default-ns-role' 
-selector='serviceaccount.namespace=="default"'

  • Kthehuni te kontejneri ynĂ« "poc-ubuntu-custom-sa" dhe provoni tĂ« aksesoni rrugĂ«n "default/" kv.
  • Leje e ndaluar.
    Mund të shihni kredencialet për çdo token në UI në seksionin ACL > Tokens. Siç e shihni, tokeni ynë aktual ka vetëm një "custom-sa-role" të lidhur. Tokeni që po përdorim aktualisht u gjenerua kur hynë në sistem, dhe atëherë kishte vetëm një lidhje rregulli që ishte e atij momenti. Na nevojitet të hyjmë përsëri në sistem dhe të përdorim një token të ri.
  • Sigurohuni qĂ« tĂ« lexoni si nga rrugĂ«t "custom-sa/" ashtu edhe "default/" kv.
    Sukses!
    Kjo ndodh për shkak se "poc-ubuntu-custom-sa" ynë përputhet me lidhjet e rregullave "custom-sa" dhe "default-ns".

Përfundimi

Menaxhimi i TTL për token?

NĂ« kohĂ«n e shkruarjes sĂ« kĂ«tij artikulli, nuk ka njĂ« mĂ«nyrĂ« tĂ« integruar pĂ«r tĂ« pĂ«rcaktuar TTL pĂ«r tokenĂ«t e gjeneruar me kĂ«tĂ« metodĂ« autorizimi. Kjo do tĂ« ishte njĂ« mundĂ«si fantastike — tĂ« sigurohet automatizimi i sigurt i autorizimit tĂ« Consul.

Ekziston mundësia për të krijuar dorazi një token me TTL:

Shpresojmë që së shpejti do të jemi në gjendje të kontrollojmë se si gjenerohen tokenët (për çdo rregull ose metodë autorizimi) dhe të shtojmë TTL.

Derisa të ndodhë kjo, propozohet që të përdorni në logjikën tuaj pikën e fundit për dalje nga sistemi.

Shihni gjithashtu artikuj të tjerë në blogun tonë:

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster