Hyrja në autorizimin e Kubernetes të Hashicorp Consul

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

E gjitha është e saktë, pas lansimit Hashicorp Consul 1.5.0 në fillim të majit 2019, në Consul mund të bëhet autorizimi i aplikacioneve dhe shërbimeve të nisura në Kubernetes, natyrshëm.

NĂ« kĂ«tĂ« udhĂ«zues do tĂ« krijojmĂ« hap pas hapi POC (Kontrolli i konceptit (Proof of concept, PoC — dĂ«shmia e [veprueshmĂ«risĂ«] sĂ« konceptit — shĂ«nimi i pĂ«rkthyesit), duke demonstruar kĂ«tĂ« funksionalitet tĂ« ri. Pritet qĂ« tĂ« keni njohuri tĂ« bazuara mbi Kubernetes dhe Hashicorp's Consul. Edhe pse mund tĂ« pĂ«rdorni çdo platformĂ« cloud ose ambient lokal, nĂ« kĂ«tĂ« udhĂ«zues do tĂ« pĂ«rdorim PlatformĂ«n e ShkĂ«putjes sĂ« Google.

Përmbledhje

Nëse kalojmë tek dokumentacioni i Consul për metodën e tij të autorizimit, do të marrim një përmbledhje të shkurtër të qëllimit dhe përdorimit të tij, si dhe disa detaje teknike dhe një përmbledhje të përgjithshme të logjikës. Ju rekomandoj me forcë ta lexoni atë të paktën një herë përpara se të vazhdoni, pasi tani do ta shpjegoj dhe e qartësoj këtë gjithashtu.

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

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

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

Sigurisht, atje ka informacione tĂ« dobishme, por nuk ka udhĂ«zime se si ta pĂ«rdorni atĂ« nĂ« tĂ« vĂ«rtetĂ«. Prandaj, si çdo njeri me mend, ju kĂ«rkoni nĂ« Internet pĂ«r udhĂ«zime. Dhe pastaj
 DĂ«shtoni. Kjo ndodh. Le tĂ« e bĂ«jmĂ« kĂ«tĂ« ndryshe.

Para se të kalojmë në krijimin e POC-it tonë, le të kthehemi te përmbledhja e metodave të autorizimit të Consul (Skema 1) dhe ta sqarojmë atë në kontekstin e Kubernetes.

Arkitektura

Në këtë udhëzues do të krijojmë një server Consul në një makinë të ndarë, që do të ndërveprojë me klusterin Kubernetes me klientin Consul të instaluar. Më pas, do të krijojmë aplikacionin tonë të rremë në pod dhe do të përdorim metodën tonë të autorizimit të konfiguruar për të lexuar nga magazina jonë e çelësit/vlerës së Consul.

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

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

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

Një shënim i vogël: Serveri Consul nuk ka nevojë të jetojë jashtë klusterit Kubernetes për të funksionuar. Por, po, mund dhe në këtë formë.

Prandaj, duke marrë skemën përmbledhëse të Consul (Skema 1) dhe duke e aplikuar atë në Kubernetes, ne marrim skemën më lart (Skema 2), dhe logjika do të jetë si më poshtë:

  1. Çdo pod do tĂ« lidhet me njĂ« llogari shĂ«rbimi, e cila pĂ«rmban njĂ« token JWT, i gjeneruar dhe i njohur nga Kubernetes. Ky token gjithashtu vendoset nĂ« pod siç Ă«shtĂ« e paracaktuar.
  2. Aplikacioni ynë ose shërbimi brenda pod-it nisin një komandë për t'u kyçur në klientin tonë Consul. Në kërkesën për kyçje do të përfshihet gjithashtu tokeni ynë dhe emri i krijuar veçmas i metodës së autorizimit (tipi Kubernetes). Ky hap nr. 2 korrespondon me hapin 1 të skemës Consul (Skema 1).
  3. Klienti ynë Consul më pas do ta dërgojë këtë kërkesë në serverin tonë Consul.
  4. MAGJI! Këtu, serveri Consul verifikon autenticitetin e kërkesës, mbledh informacionet mbi identitetin e kërkesës dhe i krahason ato me ndonjë rregull të paracaktuar. 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 Consul (Skema 1).
  5. Serveri ynë Consul gjeneron një token Consul me të drejta sipas rregullave të metodës së autorizimit që ne specifikuam lidhur me identitetin e kërkuesit. Më pas ai do ta dërgojë këtë token prapa. Ky hap korrespondon me hapin 6 të skemës Consul (Skema 1).
  6. Klienti ynë Consul ridrejton tokenin në aplikacionin ose shërbimin që kërkoi.

Aplikacioni ynë ose shërbimi 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 nga ju qĂ« nuk janĂ« tĂ« kĂ«naqur vetĂ«m me njĂ« lepur nga kapela dhe duan tĂ« dinĂ« se si funksionon
 lejoni qĂ« unĂ« t'ju 'tregohem se sa e thellĂ« Ă«shtĂ« nora e lepurĂ«ve».

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 mbi kërkesën dhe e krahason atë me çdo rregull të paracaktuar. Ky hap korrespondon me hapat 3, 4 dhe 5 të skemës përmbledhëse Consul (Skema 1). Më poshtë është një skemë (Skema 3), që ka për qëllim të tregojë qartë se çfarë ndodh në të vërtetë në pjesën e brendshme e metodës specifike të autorizimit Kubernetes.

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

Skema 3: Magjia e zbuluar!

  1. Si pikënisje, klienti ynë Consul ridrejton kërkesën për kyçje në serverin tonë Consul me tokenin e llogarisë Kubernetes dhe emrin specifik të instancës së metodës së autorizimit, e cila u krijua më parë. Ky hap korrespondon me hapin 3 të shpjegimit tone të mëparshëm të skemës.
  2. Tani, serveri Consul (ose lideri) duhet të verifikojë autenticitetin e tokenit të marrë. Prandaj, ai do të konsultohet me klasterin Kubernetes (përmes 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 kërkohet instanca e metodës së autentifikimit me emrin e dhënë nga kërkesa për hyrje (dhe tipi Kubernetes).
  4. Lideri Consul përcakton instancën e dhënë të metodës së autentifikimit (nëse gjendet) dhe lexon grupin e rregullave të lidhura me të. Më pas, ai lexon këto rregulla dhe i krahasçon ato me atributet e verifikuara të identitetit.
  5. Ja! Kalojmë në hapin 5 të shpjegimit të mëparshëm të skemës.

Nisni serverin Consul në një makinë virtuale standarde.

Nga ky moment, unë kryesisht do të jap udhëzime për krijimin e këtij POC, shpesh në pika, pa fjalitë shpjeguese të plota. Gjithashtu, siç u përmend më parë, do të përdor GCP për të ndërtuar gjithë infrastrukturen, por mund të krijoni të njëjtën infrastrukturë kudo tjetër.

  • Nisni makinĂ«n virtuale (instancĂ«n/serverin).

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

  • Krijoni njĂ« rregull pĂ«r firewall (grupi i sigurisĂ« nĂ« AWS):
  • MĂ« pĂ«lqen tĂ« jep njĂ« emĂ«r tĂ« njĂ«jtĂ« makinisĂ« rregullit dhe etiketĂ«s rrjetore, nĂ« kĂ«tĂ« rast Ă«shtĂ« "skywiz-consul-server-poc".
  • Gjeni adresĂ«n IP tĂ« kompjuterit tuaj lokal dhe shtoni atĂ« nĂ« listĂ«n e IP-ve burimore, nĂ« mĂ«nyrĂ« qĂ« tĂ« mund tĂ« aksesoni ndĂ«rfaqen e pĂ«rdoruesit (UI).
  • Hapni portin 8500 pĂ«r UI. Klikoni Krijo. Shpejt do ta ndryshojmĂ« dhe njĂ« herĂ« kĂ«tĂ« firewall [link].
  • Shtoni njĂ« rregull pĂ«r firewall nĂ« instancĂ«n. Kthehuni nĂ« panelin e monitorimit VM nĂ« serverin Consul dhe shtoni "skywiz-consul-server-poc" nĂ« fushĂ«n e etiketave tĂ« rrjetit. Klikoni Ruaj.

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

  • Instaloni Consul nĂ« makinĂ« virtuale, kontrolloni kĂ«tu. Mos harroni se ju nevojitet versioni Consul ≄ 1.5 [link]
  • TĂ« krijojmĂ« njĂ« konsul me njĂ« nyje — konfigurimi Ă«shtĂ« si mĂ« poshtĂ«.

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Ă« tĂ« detajuar pĂ«r instalimin e Consul dhe konfigurimin e klasterit me 3 nyje mund tĂ« gjendet. 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 njĂ« mori tĂ« dhĂ«nash rezultuese dhe pĂ«rfundimisht "
 update blocked by ACLs".
  • Gjeni adresĂ«n IP ekstern tĂ« serverit Consul dhe hapni njĂ« shfletues me kĂ«tĂ« adresĂ« IP nĂ« portin 8500. Sigurohuni qĂ« UI tĂ« hapet.
  • Provoni tĂ« shtoni njĂ« çift çelĂ«s/vlerĂ«. Duhet tĂ« ketĂ« njĂ« gabim. Kjo ndodh sepse ngarkuam serverin Consul me ACL dhe ndaloi tĂ« gjitha rregullat.
  • Kthehuni nĂ« shell-in tuaj nĂ« serverin Consul dhe çelni njĂ« proces nĂ« prapaskenĂ« ose nĂ« ndonjĂ« mĂ«nyrĂ« tjetĂ«r, nĂ« mĂ«nyrĂ« qĂ« tĂ« funksionojĂ«, dhe shkruani kĂ«tĂ«:

consul acl bootstrap

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

Nisni klasterin Kubernetes 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Ă« mund tĂ« pĂ«rdorim tĂ« njĂ«jtin subnet pĂ«r lidhje tĂ« thjeshta me adresat IP tĂ« brendshme. Do ta quajmĂ« "skywiz-app-with-consul-client-poc".

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

  • Si njĂ« shĂ«nim, kĂ«tu Ă«shtĂ« njĂ« udhĂ«zues i mirĂ«, me tĂ« cilin u pĂ«rballa gjatĂ« konfigurimit tĂ« POC klasterit Consul me Consul Connect.
  • Ne gjithashtu do tĂ« pĂ«rdorim hartĂ«n Helm tĂ« Hashicorp me njĂ« skedar tĂ« zgjeruar vlerash.
  • Instaloni dhe konfiguroni 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

  • Apliko hartĂ«n helm:

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

  • GjatĂ« pĂ«rpjekjes pĂ«r ta nisur, do tĂ« nevojiten leje pĂ«r serverin Consul, kĂ«shtu qĂ« le tĂ« shtojmĂ« ato.
  • Kujdesi pĂ«r "range address Pod", i vendosur nĂ« panelin e klasterit, dhe kthehuni te rregulli ynĂ« pĂ«r firewall "skywiz-consul-server-poc".
  • Shtoni njĂ« gamĂ« adresash pĂ«r podin nĂ« listĂ«n e adresave IP dhe hapni portat 8301 dhe 8300.

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

  • Shkoni te UI i Consul, dhe pas disa minutash do tĂ« shihni se klasteri ynĂ« do tĂ« shfaqet nĂ« skedĂ«n e nodave.

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

Konfiguroni metodën e autorizimit duke integruar Consul me Kubernetes

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

export CONSUL_HTTP_TOKEN=

  • Do tĂ« na nevojitet informacioni nga Kubernetes-clusteri 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 ndihmĂ«n e mjetit 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 shkruajeni atĂ« nĂ« skedarin “ca.crt”.
  • Tani krijoni njĂ« instancĂ« tĂ« metodĂ«s auth, duke zĂ«vendĂ«suar placeholders me vlerat qĂ« sapo keni marrĂ«.

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

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

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

  • Zbatoni rregullin

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

  • Gjeni identifikuesin e rregullit qĂ« sapo krijuat nga tĂ« dhĂ«nat e daljes.
  • 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 emrit 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 aksesit. Na nevojitet tĂ« japim leje Consulit pĂ«r tĂ« verifikuar dhe identifikuar identitetin e tokenit tĂ« llogarisĂ« sĂ« shĂ«rbimit K8s.
  • Shkruani nĂ« skedarin e mĂ«poshtĂ«m [lidhja]:

###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 aksesit

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

Lidhja me Konsulentin Klient

  • Siç u shpreh kĂ«tu, ka disa opsione pĂ«r tĂ« lidhur me daemonset, por ne do tĂ« kalojmĂ« nĂ« zgjidhjen e ardhshme mĂ« tĂ« thjeshtĂ«:
  • Zbatoni 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

  • Pastaj aplikoni komandĂ«n e mĂ«poshtme tĂ« integruar pĂ«r tĂ« krijuar configmap [link]. Vini re se ne i referohemi emrit tĂ« shĂ«rbimit tonĂ«, ndryshojeni atĂ« nĂ«se Ă«shtĂ« e nevojshme.

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ë shikojmë magjinë në veprim!

  • Krijoni disa dosje kryesore me tĂ« njĂ«jtin çelĂ«s tĂ« niveleve tĂ« larta (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Ă«.

Hyrja në autorizimin e Kubernetes të Hashicorp Consul

Testi i llogarisë përdoruese të hapësirës emërore:

  • Le tĂ« krijojmĂ« hapĂ«sirĂ«n tonĂ« emĂ«rore:

kubectl create namespace custom-ns

  • Le tĂ« krijojmĂ« njĂ« pod nĂ« hapĂ«sirĂ«n tonĂ« emĂ«rore tĂ« re. 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 kontejneri tĂ« nisĂ«, hyni brenda 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Ă« skapim mĂ« parĂ« [link].
  • PĂ«r tĂ« parĂ« tokenin e futur nga llogaria juaj e shĂ«rbimit:

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

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

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

  • Kyçuni!

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

  • PĂ«r tĂ« kryer hapĂ«sirat e mĂ«sipĂ«rme nĂ« njĂ« vijĂ« (pasi do tĂ« kryejmĂ« disa teste), mund tĂ« bĂ«ni si mĂ« poshtĂ«:

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! Duhet, tĂ« paktĂ«n. Tani merrni SecretID dhe provoni tĂ« qaseni nĂ« çelĂ«sin/vlerĂ«n qĂ« duhet tĂ« kemi akses.

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

  • Mund tĂ« dekodoni "VlerĂ«n" base64 dhe tĂ« shihni se pĂ«rputhet me vlerĂ«n nĂ« custom-ns/test_key nĂ« UI. NĂ«se keni pĂ«rdorur tĂ« njĂ«jtĂ«n vlerĂ«, tĂ« dhĂ«nat tuaja do tĂ« jenĂ« IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi.

Testi i llogarisë së shërbimit përdorues:

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

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

  • Krijoni njĂ« skedar tĂ« ri konfigurimi pĂ«r podin. Kini parasysh se kam pĂ«rfshirĂ« instalimin e curl pĂ«r ta lehtĂ«suar punĂ«n 🙂

###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, nisni njĂ« shell brenda kontejnerit.

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

  • Kyçuni!

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

  • Lejo i ndaluar. Oh, harxhuam 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 të mësipërm:
a) Krijoni një Politikë identike për prefixin "custom-sa/".
b) Krijoni një Rolle, emërojeni "custom-sa-role".
c) Bashkoni Politikën me Rollo.

  • Krijoni njĂ« Rule-Binding (tĂ« mundshme vetĂ«m nga cli / api). Kushtojini vĂ«mendje vlerĂ«s sĂ« ndryshme tĂ« flamurit 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 hyrjen nĂ« sistem nga kontejneri "poc-ubuntu-custom-sa". Succes!
  • Kontrolloni aksesin tonĂ« nĂ« rrugĂ«n kryesore custom-sa/.

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

  • Ju gjithashtu mund tĂ« siguroni qĂ« ky token nuk ndihmon tĂ« aksesoni kv nĂ« "custom-ns/". Thjesht pĂ«rsĂ«ritni komandĂ«n e mĂ«sipĂ«rme pas ndryshimit tĂ« "custom-sa" nĂ« prefixin "custom-ns".
    Lejo i ndaluar.

Shembulli i overlay-it:

  • Vlen tĂ« pĂ«rmendet se tĂ« gjitha mapimet 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 emrave tĂ« paracaktuar - kĂ«shtu qĂ« le tĂ« pĂ«rdorim atĂ« pĂ«r njĂ« lidhje tjetĂ«r tĂ« rregullave.
  • PĂ«rsĂ«ritni hapat e mĂ«parshĂ«m:
    a) Krijoni një Politikë identike për prefixin e çelësit "default/".
    b) Krijoni një Rolle, emërojeni "default-ns-role".
    c) Bashkoni Politikën me Rollo.
  • Krijoni Rule-Binding (tĂ« 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 nĂ« kontejnerin tonĂ« "poc-ubuntu-custom-sa" dhe provoni tĂ« aksesoni rrugĂ«n "default/" kv.
  • Lejo i ndaluar.
    Ju mund të shihni kredencialet e dhëna për çdo token në UI në seksionin ACL > Tokens. Siç e shihni, vetëm një "custom-sa-role" është bashkëlidhur me tokenin tonë aktual. Tokeni që po përdorim tani u krijua kur hyem në sistem dhe atëherë kishte vetëm një rule-binding që ishte në përputhje. Duhet të hyjmë përsëri në sistem dhe të përdorim një token të ri.
  • Sigurohuni qĂ« mund tĂ« lexoni si nga rrugĂ«t "custom-sa/", ashtu dhe nga "default/" kv.
    Suces!
    Kjo ndodh sepse "poc-ubuntu-custom-sa" ynë përputhet me lidhjet e rregullave "custom-sa" dhe "default-ns".

Përfundim

Menaxhimi i TTL tokenit?

Në momentin e shkruajtjes së këtij artikulli, nuk ka një mënyrë të integruar për të përcaktuar TTL për tokenet që janë krijuar përmes kësaj metode autorizimi. Kjo do të ishte një mundësi fantastike - për të lehtësuar automatizimin e sigurt të autorizimit të Consul.

Ka është mundësia për të krijuar manualisht një token me TTL:

Shpresojmë se së shpejti do të kemi kontroll mbi mënyrën se si gjenerohen tokenët (për çdo rregull ose metodë autorizimi) dhe do të shtojmë TTL.

Derisa, rekomandohet të përdorni në logjikën tuaj pikën e dalje nga sistemi.

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

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster