Муқаддима ба Консули Hashicorp Authorization Kubernetes

Муқаддима ба Консули Hashicorp Authorization Kubernetes

Ин дуруст аст, пас аз озод шудан Консул Hashicorp 1.5.0 дар аввали моҳи майи соли 2019, дар Консул шумо метавонед барномаҳо ва хидматҳоеро, ки дар Кубернетес кор мекунанд, иҷозат диҳед.

Дар ин дастур мо қадам ба қадам эҷод мекунем POC (Исботи консепсия, PoC), ки ин хусусияти навро нишон медиҳад. Интизор меравад, ки шумо дониши асосии Кубернетес ва консули Hashicorp дошта бошед. Дар ҳоле ки шумо метавонед ҳама гуна платформаи абрӣ ё муҳити дохилиро истифода баред, дар ин дарс мо платформаи абрии Google-ро истифода хоҳем бурд.

шарҳ

Агар мо равем Ҳуҷҷатҳои консулӣ дар бораи усули иҷозатдиҳии он, мо шарҳи фаврии мақсад ва ҳолати истифодаи он, инчунин баъзе тафсилоти техникӣ ва шарҳи умумии мантиқро хоҳем гирифт. Ман тавсия медиҳам, ки ҳадди аққал як бор пеш аз идома додан онро хонед, зеро ҳоло ман ҳама чизро шарҳ медиҳам ва хоиданро хоҳам дод.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

Диаграммаи 1: Шарҳи расмии усули иҷозатдиҳии консул

Биёед ба дарун нигарем ҳуҷҷатҳо барои усули мушаххаси иҷозати Kubernetes.

Албатта, дар он ҷо маълумоти муфид мавҷуд аст, аммо дар бораи чӣ гуна истифода бурдани ҳамаи онҳо дастуре нест. Ҳамин тавр, мисли ҳар як шахси солимфикр, шумо барои роҳнамоӣ Интернетро меҷӯед. Ва баъд... Шумо ноком. Он рӯй медиҳад. Биёед инро ислоҳ кунем.

Пеш аз он ки мо ба эҷоди POC-и худ гузарем, биёед ба шарҳи усулҳои иҷозатдиҳии консул (Диаграммаи 1) баргардем ва онро дар заминаи Кубернетес такмил диҳем.

меъморӣ

Дар ин дастур, мо сервери консулро дар мошини алоҳида эҷод мекунем, ки бо кластери Kubernetes бо муштарии консул насбшуда муошират мекунад. Сипас, мо дар подкаст барномаи мукаммали худро эҷод мекунем ва барои хондан аз мағозаи калиди Консули худ усули танзимшудаи иҷозати худро истифода мебарем.

Дар диаграммаи зер меъморӣ, ки мо дар ин дарс эҷод карда истодаем ва инчунин мантиқи усули иҷозатдиҳӣ, ки баъдтар шарҳ дода мешавад, тафсилот медиҳад.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

Диаграммаи 2: Шарҳи усули авторизатсияи Кубернетес

Эзоҳ: Барои кор кардан ба сервери консул лозим нест, ки берун аз кластери Кубернетес зиндагӣ кунад. Аммо бале, вай ин тавр ва он тавр кор карда метавонад.

Ҳамин тавр, диаграммаи баррасии Консулро (Диаграммаи 1) гирифта, ба он Кубернетесро татбиқ намуда, диаграммаи дар боло зикршударо мегирем (Диаграммаи 2) ва мантиқ дар ин ҷо чунин аст:

  1. Ҳар як подк дорои ҳисоби хидматрасонӣ мебошад, ки ба он аломати JWT, ки аз ҷониби Kubernetes тавлид ва маълум аст, замима карда мешавад. Ин нишона инчунин ба таври нобаёнӣ ба подкаст ворид карда мешавад.
  2. Ариза ё хидмати мо дар дохили подк фармони воридшавиро ба муштарии консули мо оғоз мекунад. Дархости воридшавӣ инчунин нишона ва номи моро дар бар мегирад махсус офарида шудааст усули иҷозатдиҳӣ (навъи Kubernetes). Ин қадами №2 ба қадами 1 диаграммаи Консул мувофиқат мекунад (Нақшаи 1).
  3. Мизоҷи консули мо ин дархостро ба сервери консули мо ирсол мекунад.
  4. Сеҳрнок! Дар ин ҷо сервери консул ҳаққонияти дархостро тафтиш мекунад, маълумотро дар бораи шахсияти дархост ҷамъ мекунад ва онро бо ҳама гуна қоидаҳои пешакӣ муайяншуда муқоиса мекунад. Дар зер диаграммаи дигаре оварда шудааст, ки инро нишон медиҳад. Ин қадам ба қадамҳои 3, 4 ва 5 диаграммаи баррасии Консул мувофиқат мекунад (Диаграммаи 1).
  5. Сервери консули мо токени консулро бо иҷозатҳо тибқи қоидаҳои муайяншудаи усули иҷозатдиҳӣ (ки мо муайян кардаем) оид ба шахсияти дархосткунанда тавлид мекунад. Он гоҳ он нишонаро баргардонад. Ин ба қадами 6-и диаграммаи Консул мувофиқат мекунад (Диаграммаи 1).
  6. Мизоҷи консули мо токенро ба барнома ё хидмати дархосткунанда интиқол медиҳад.

Замима ё хидмати мо ҳоло метавонад ин нишонаи консулро барои иртибот бо маълумоти консули мо, ки аз рӯи имтиёзҳои токен муайян шудааст, истифода барад.

Ҷодугарӣ ошкор мешавад!

Барои онҳое, ки аз як харгӯш аз кулоҳ хушҳол нестанд ва мехоҳанд бидонанд, ки он чӣ гуна кор мекунад... иҷозат диҳед "ба шумо нишон диҳам, ки то чӣ андоза амиқтар аст. сӯрохи харгӯш".

Тавре ки қаблан зикр гардид, қадами "ҷодугарӣ"-и мо (Расми 2: Қадами 4) дар он ҷоест, ки сервери консул дархостро тасдиқ мекунад, маълумоти дархостро ҷамъ мекунад ва онро бо ҳама қоидаҳои пешакӣ муайяншудаи алоқаманд муқоиса мекунад. Ин қадам ба қадамҳои 3, 4 ва 5 диаграммаи баррасии Консул мувофиқат мекунад (Диаграммаи 1). Дар зер диаграмма (диаграммаи 3) оварда шудааст, ки максад аз он равшан нишон додани вокеаи вокеа мебошад зери капот усули махсуси иҷозатдиҳии Kubernetes.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

Диаграммаи 3: Ҷодугарӣ ошкор шуд!

  1. Ҳамчун нуқтаи ибтидоӣ, муштарии консули мо дархости воридшавӣ ба сервери консули мо бо нишони ҳисоби Kubernetes ва номи мушаххаси усули иҷозатдиҳӣ, ки қаблан сохта шуда буд, ирсол мекунад. Ин қадам ба қадами 3 дар шарҳи схемаи қаблӣ мувофиқат мекунад.
  2. Ҳоло сервери консул (ё роҳбар) бояд ҳаққонияти аломати гирифташударо тафтиш кунад. Аз ин рӯ, он бо кластери Kubernetes машварат хоҳад кард (тавассути муштарии консул) ва бо иҷозати мувофиқ, мо мефаҳмем, ки оё токен аслӣ аст ва ба кӣ тааллуқ дорад.
  3. Пас аз он дархости тасдиқшуда ба роҳбари консул баргардонида мешавад ва сервери консул намунаи усули иҷозатро бо номи муайян аз дархости воридшавӣ (ва навъи Kubernetes) меҷӯяд.
  4. Роҳбари консул намунаи усули иҷозатдиҳии мушаххасро муайян мекунад (агар ёфт шавад) ва маҷмӯи қоидаҳои ҳатмӣ, ки ба он замима шудаанд, мехонад. Он гоҳ ин қоидаҳоро мехонад ва онҳоро бо атрибутҳои шахсияти тасдиқшуда муқоиса мекунад.
  5. ТА-дах! Биёед ба қадами 5 дар шарҳи схемаи қаблӣ гузарем.

Консул-серверро дар мошини муқаррарии виртуалӣ иҷро кунед

Минбаъд, ман асосан дар бораи чӣ гуна сохтани ин POC дастурҳо медиҳам, аксар вақт дар нуқтаҳои тир, бидуни шарҳи пурраи ҷумла. Инчунин, тавре ки қаблан қайд карда шуд, ман GCP-ро барои эҷоди тамоми инфрасохтор истифода хоҳам кард, аммо шумо метавонед ҳамон инфрасохторро дар ҷои дигар эҷод кунед.

  • Мошини виртуалиро оғоз кунед (мисол/сервер).

Муқаддима ба Консули Hashicorp Authorization Kubernetes

  • Барои брандмауэр қоида эҷод кунед (гурӯҳи амниятӣ дар AWS):
  • Ман мехоҳам як номи мошинро ҳам ба қоида ва ҳам теги шабака таъин кунам, дар ин ҳолат "skywiz-consul-server-poc".
  • Суроғаи IP-и компютери маҳаллии худро пайдо кунед ва онро ба рӯйхати суроғаҳои IP-и манбаъ илова кунед, то мо ба интерфейси корбар (UI) дастрасӣ пайдо кунем.
  • Порти 8500 барои UI кушоед. Эҷод ро пахш кунед. Мо ин деворро ба зудӣ аз нав иваз мекунем [Садо Ояндасоз].
  • Ба инстансия қоидаи брандмауэр илова кунед. Ба панели VM дар сервери Консул баргардед ва ба майдони барчаспҳои шабака "skywiz-consul-server-poc" илова кунед. Захира клик кунед.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

  • Консулро дар мошини виртуалӣ насб кунед, инҷо санҷед. Дар хотир доред, ки ба шумо версияи Консул ≥ 1.5 лозим аст [пайванд]
  • Биёед як гиреҳи Консулро эҷод кунем - конфигуратсия чунин аст.

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

  • Барои дастури муфассал оид ба насби Консул ва таъсиси кластери 3 гиреҳ, нигаред дар ин ҷо.
  • Файли /etc/consul.d/agent.json-ро ба таври зерин созед [Садо Ояндасоз]:

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

  • Сервери консули моро оғоз кунед:

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

  • Шумо бояд як қатор натиҷаҳоро бинед ва бо "... навсозӣ аз ҷониби ACLҳо басташуда" хотима меёбад.
  • Суроғаи IP-и берунаи сервери консулро ёбед ва браузерро бо ин суроғаи IP дар бандари 8500 кушоед. Боварӣ ҳосил кунед, ки UI кушода мешавад.
  • Кӯшиш кунед, ки ҷуфти калид/арзишро илова кунед. Ин ҷо ҳатман хатое ҳаст. Сабаб дар он аст, ки мо сервери консулро бо ACL бор кардем ва ҳама қоидаҳоро ғайрифаъол кардем.
  • Ба қабати худ дар сервери Консул баргардед ва равандро дар замина ё бо роҳи дигар оғоз кунед, то онро ба кор баред ва зеринро ворид кунед:

consul acl bootstrap

  • Арзиши "SecretID" -ро ёбед ва ба UI баргардед. Дар ҷадвали ACL, ID-и махфии токенеро, ки навакак нусхабардорӣ кардаед, ворид кунед. SecretID-ро дар ҷои дигар нусхабардорӣ кунед, ба мо дертар лозим мешавад.
  • Акнун ҷуфти калид/арзишро илова кунед. Барои ин POC, инҳоро илова кунед: калид: "custom-ns/test_key", арзиш: "Ман дар папкаи custom-ns ҳастам!"

Оғози кластери Kubernetes барои барномаи мо бо муштарии консул ҳамчун Daemonset

  • Кластери K8s (Kubernetes) эҷод кунед. Мо онро дар ҳамон минтақаи сервер барои дастрасии тезтар эҷод мекунем ва аз ин рӯ мо метавонем аз ҳамон зершабака истифода барем, то бо суроғаҳои IP дохилӣ ба осонӣ пайваст шавем. Мо онро "skywiz-app-with-consul-client-poc" меномем.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

  • Ҳамчун ёддошти паҳлӯ, ин як дастури хубест, ки ман ҳангоми таъсиси кластери Консули POC бо Consul Connect дучор шудам.
  • Мо инчунин диаграммаи helm Hashicorp -ро бо файли арзишҳои васеъ истифода хоҳем кард.
  • Helm-ро насб ва танзим кунед. Қадамҳои конфигуратсия:

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

  • диаграммаи руль: https://www.consul.io/docs/platform/k8s/helm.html
  • Файли арзиши зеринро истифода баред (дар хотир доред, ки ман аксари онҳоро хомӯш кардаам):

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

  • Татбиқи диаграммаи руль:

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

  • Вақте ки он кӯшиш мекунад, ки кор кунад, он барои сервери Консул иҷозатҳоро талаб мекунад, аз ин рӯ биёед онҳоро илова кунем.
  • Ба "Дипазони суроғаи Pod" -и дар панели панели кластер ҷойгиршуда аҳамият диҳед ва ба қоидаи девори девори мо "skywiz-consul-server-poc" муроҷиат кунед.
  • Ба рӯйхати суроғаҳои IP диапазони суроғаҳоро барои pod илова кунед ва портҳои 8301 ва 8300-ро кушоед.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

  • Ба UI Consul UI равед ва пас аз чанд дақиқа шумо мебинед, ки кластери мо дар ҷадвали гиреҳҳо пайдо мешавад.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

Танзими усули авторизатсия тавассути ҳамгироии консул бо Кубернетес

  • Ба қабати сервери Консул баргардед ва нишонаи қаблан захиракардаатонро содир кунед:

export CONSUL_HTTP_TOKEN=<SecretID>

  • Барои сохтани намунаи усули аутентсия ба мо маълумот аз кластери Кубернетес лозим мешавад:
  • kubernetes-мизбон

kubectl get endpoints | grep kubernetes

  • kubernetes-хизмат-ҳисоб-jwt

kubectl get sa <helm_deployment_name>-consul-client -o yaml | grep "- name:"
kubectl get secret <secret_name_from_prev_command> -o yaml | grep token:

  • Нишона base64 рамзгузорӣ шудааст, аз ин рӯ бо истифода аз асбоби дӯстдоштаи худ рамзкушоӣ кардани он [Садо Ояндасоз]
  • kubernetes-ca-cert

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

  • Шаҳодатномаи "ca.crt" -ро гиред (пас аз рамзкушоии base64) ва онро ба файли "ca.crt" нависед.
  • Акнун усули аутентиро ҷорӣ кунед, ҷойгузорҳоро бо арзишҳои нав гирифтаатон иваз кунед.

consul acl auth-method create 
-type "kubernetes" 
-name "auth-method-skywiz-consul-poc" 
-description "This is an auth method using kubernetes for the cluster skywiz-app-with-consul-client-poc" 
-kubernetes-host "<k8s_endpoint_retrieved earlier>" 
[email protected] 
-kubernetes-service-account-
jwt="<decoded_token_retrieved_earlier>"

  • Минбаъд мо бояд қоида эҷод кунем ва онро ба нақши нав замима кунем. Барои ин қисм шумо метавонед Consul UI-ро истифода баред, аммо мо сатри фармонро истифода хоҳем бурд.
  • Қоида нависед

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

  • Қоидаро татбиқ кунед

consul acl policy create 
-name kv-custom-ns-policy 
-description "This is an example policy for kv at custom-ns/" 
-rules @kv-custom-ns-policy.hcl

  • Идентификатсияи қоидаеро, ки навакак офаридаед, аз натиҷа пайдо кунед.
  • Бо қоидаи нав нақш эҷод кунед.

consul acl role create 
-name "custom-ns-role" 
-description "This is an example role for custom-ns namespace" 
-policy-id <policy_id>

  • Ҳоло мо нақши нави худро бо мисоли усули аутентӣ алоқаманд хоҳем кард. Дар хотир доред, ки парчами "интихобкунанда" муайян мекунад, ки оё дархости воридшавии мо ин нақшро қабул мекунад. Барои дигар имконоти интихобкунанда дар ин ҷо санҷед: https://www.consul.io/docs/acl/auth-methods/kubernetes.html#trusted-identity-attributes

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

Ниҳоят конфигуратсияҳо

Ҳуқуқҳои дастрасӣ

  • Эҷоди ҳуқуқҳои дастрасӣ. Мо бояд ба консул иҷозат диҳем, ки шахсияти аломати ҳисоби хидматии K8s-ро тафтиш ва муайян кунад.
  • Ба файли зеринро нависед [пайванд]:

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

  • Биёед ҳуқуқҳои дастрасӣ эҷод кунем

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

Пайвастшавӣ ба муштарии консул

  • Чунон ки кайд карда шуд дар ин ҷоЯкчанд имконоти пайвастшавӣ ба demonset вуҷуд дорад, аммо мо ба ҳалли оддии зерин мегузарем:
  • Файли зеринро татбиқ кунед [Садо Ояндасоз].

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

  • Пас фармони дохилии зеринро барои сохтани конфигмап истифода баред [Садо Ояндасоз]. Лутфан қайд кунед, ки мо ба номи хидмати худ ишора мекунем, агар лозим бошад, онро иваз кунед.

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

Санҷиши усули аутентификация

Акнун биёед ҷодуро дар амал бубинем!

  • Бо як калиди сатҳи боло (яъне /sample_key) ва арзиши интихоби шумо чанд ҷузвдони калидии дигар эҷод кунед. Барои роҳҳои нави калидӣ сиёсатҳо ва нақшҳои мувофиқ эҷод кунед. Мо пайвандҳоро баъдтар иҷро мекунем.

Муқаддима ба Консули Hashicorp Authorization Kubernetes

Санҷиши фазои номҳои фармоишӣ:

  • Биёед фазои номи худро созем:

kubectl create namespace custom-ns

  • Биёед дар фазои номҳои нави худ як pod эҷод кунем. Конфигуратсияро барои pod нависед.

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

  • Дар зер эҷод кунед:

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

  • Пас аз он ки контейнер кор мекунад, ба он ҷо равед ва curl насб кунед.

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

  • Ҳоло мо бо истифода аз усули иҷозатдиҳӣ, ки қаблан сохта будем, ба консул дархости воридшавӣ мефиристем [Садо Ояндасоз].
  • Барои дидани аломати воридшуда аз ҳисоби хидматрасонии худ:

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

  • Ба файли дохили контейнер инҳоро нависед:

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

  • Даромадан!

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

  • Барои анҷом додани қадамҳои дар боло зикршуда дар як сатр (зеро мо якчанд санҷишҳоро иҷро хоҳем кард), шумо метавонед амалҳои зеринро иҷро кунед:

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

  • Кор мекунад! Ақаллан бояд. Акнун SecretID-ро гиред ва кӯшиш кунед, ки ба калид/арзише, ки мо бояд ба он дастрасӣ дошта бошем, дастрасӣ пайдо кунед.

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

  • Шумо метавонед base64 "Арзиш"-ро рамзкушоӣ кунед ва бубинед, ки он ба арзиши дар custom-ns/test_key дар UI мувофиқат мекунад. Агар шумо ҳамон арзиши дар боло зикршударо дар ин дастур истифода баред, арзиши рамзгузории шумо IkknbSBpbiB0aGUgY3VzdG9tLW5zIGZvbGRlciEi хоҳад буд.

Санҷиши ҳисоби хидматрасонии корбар:

  • Бо истифода аз фармони зерин [Account-и фармоишӣ эҷод кунед.Садо Ояндасоз].

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

  • Барои pod файли конфигуратсияи нав эҷод кунед. Лутфан қайд кунед, ки ман насби curl барои сарфаи меҳнат дохил кардам :)

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

  • Баъд аз ин, дар дохили контейнер як қабатро гузаронед.

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

  • Даромадан!

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

  • Иҷоза дода нашуд. Оҳ, мо фаромӯш кардем, ки қоидаҳои наверо, ки бо иҷозатҳои мувофиқ ҳатмӣ мебошанд, илова кунем, биёед ин корро ҳозир кунем.

Қадамҳои қаблии дар боло зикршударо такрор кунед:
а) Сиёсати якхеларо барои префикси "custom-sa/" созед.
б) Нақш эҷод кунед, онро "нақши фармоишӣ" меномед
в) Сиёсатро ба нақш замима кунед.

  • Қоидаҳои ҳатмӣ эҷод кунед (танҳо аз cli/api имконпазир аст). Ба маънои гуногуни парчами селектор таваҷҷӯҳ кунед.

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

  • Аз контейнери "poc-ubuntu-custom-sa" дубора ворид шавед. Муваффақият!
  • Дастрасии моро ба роҳи калидии custom-sa/ санҷед.

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

  • Шумо инчунин метавонед боварӣ ҳосил кунед, ки ин нишона дастрасӣ ба kv дар "custom-ns/" намедиҳад. Танҳо пас аз иваз кардани "custom-sa" бо префикси "custom-ns" фармони дар боло зикршударо такрор кунед.
    Иҷоза дода нашуд.

Намунаи такрорӣ:

  • Қобили қайд аст, ки ҳама харитасозии қоидаҳои ҳатмӣ бо ин ҳуқуқҳо ба аломат илова карда мешаванд.
  • Контейнери мо "poc-ubuntu-custom-sa" дар фазои номҳои пешфарз ҷойгир аст - аз ин рӯ биёед онро барои бастани қоидаи дигар истифода барем.
  • Қадамҳои қаблиро такрор кунед:
    а) Сиёсати якхеларо барои префикси калиди "default/" эҷод кунед.
    б) Нақш эҷод кунед, онро "default-ns-rol" номгузорӣ кунед
    в) Сиёсатро ба нақш замима кунед.
  • Эҷоди қоидаҳои ҳатмӣ (танҳо аз 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"'

  • Ба контейнери "poc-ubuntu-custom-sa" баргардед ва кӯшиш кунед, ки ба роҳи "default/" kv дастрасӣ пайдо кунед.
  • Иҷоза дода нашуд.
    Шумо метавонед эътимодномаҳои мушаххасро барои ҳар як нишона дар UI дар зери ACL > Токенҳо бубинед. Тавре ки шумо мебинед, аломати ҳозираи мо ба он танҳо як "нақши фармоишӣ" дорад. Токене, ки мо ҳоло истифода мебарем, вақте ки мо ворид шудем тавлид шуд ва танҳо як қоида ҳатмӣ буд, ки он вақт мувофиқат мекард. Мо бояд дубора ворид шавем ва аломати навро истифода барем.
  • Боварӣ ҳосил кунед, ки шумо метавонед аз роҳҳои "custom-sa/" ва "default/" kv хонед.
    Муваффақият!
    Ин аз он иборат аст, ки "poc-ubuntu-custom-sa"-и мо ба ҳатмии қоидаҳои "custom-sa" ва "default-ns" мувофиқат мекунад.

хулоса

Нишонаи TTL мгмт?

Дар замони навиштани ин навиштан, ягон роҳи ҳамгирошудаи муайян кардани TTL барои нишонаҳо, ки бо ин усули иҷозатдиҳӣ тавлид шудаанд, вуҷуд надорад. Ин як имконияти олиҷаноб барои таъмини автоматикунонии бехатари иҷозати консул хоҳад буд.

Имконияти ба таври дастӣ сохтани нишона бо TTL мавҷуд аст:

Умедворам, ки дар ояндаи наздик мо метавонем назорат кунем, ки токенҳо чӣ гуна тавлид мешаванд (дар як қоида ё усули иҷозатдиҳӣ) ва илова кардани TTL.

То он вақт, тавсия дода мешавад, ки дар мантиқи худ нуқтаи ниҳоии баромадро истифода баред.

Инчунин мақолаҳои дигарро дар блоги мо хонед:

Манбаъ: will.com

Илова Эзоҳ