๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋Š” ์‹œํฌ๋ฆฟ์„ ํ†ตํ•ด ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. 

 

์ƒ์„ฑ๋œ ์‹œํฌ๋ฆฟ์€ mount fs ๋˜๋Š” env var ์„ ํ†ตํ•ด์„œ ํŒŒ๋“œ์— ์‹œํฌ๋ฆฟ ๋ฐ์ดํ„ฐ๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์ฃ .

 

์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•œ ํ›„,

kubectl create secret generic secret1 --from-literal user=admin
kubectl create secret generic secret2 --from-literal user=12345678

 

์•„๋ž˜์™€ ๊ฐ™์ด yaml ์„ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ .

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: pod
  name: pod
spec:
  containers:
  - image: nginx
    name: pod
    resources: {}
    volumeMounts:
    - name: secret1
      mountPath: "/etc/secret1"
      readOnly: true
    env:
      - name: PASSWORD
        valueFrom:
          secretKeyRef:
            name: secret2
            key: user
  volumes:
  - name: secret1
    secret:
      secretName: secret1
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

 

 

env var ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,

env var

 

mount fs ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mount fs

 

์ƒ์„ฑํ•œ ์‹œํฌ๋ฆฟ์€ ETCD ์— ์ €์žฅ๋˜๋ฉฐ, API Server ๋ฅผ ํ†ตํ•ด ํŒŒ๋“œ ๋‚ด ์ปจํ…Œ์ด๋„ˆ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์ „๋ฐ˜์ ์ธ ์‹œํฌ๋ฆฟ ์›Œํฌํ”Œ๋กœ์šฐ

 

ํ•˜์ง€๋งŒ ์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•  ๋•Œ ํ•ญ์ƒ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์•”ํ˜ธํ™”์ฃ . 

 

์‹œํฌ๋ฆฟ์€ ๋ฆฌ์†Œ์Šค ์ด๋ฆ„ ์ž์ฒด๊ฐ€ ์‹œํฌ๋ฆฟ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ญ”๊ฐ€ ์•”ํ˜ธํ™”๊ฐ€ ๋˜์„œ ๊ด€๋ฆฌ๋  ๊ฑฐ ๊ฐ™์€ ๋Š๋‚Œ์„ ์ค๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋‚ด์—์„œ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ ์ผ์ฒด์˜ ์•”ํ˜ธํ™” ํ–‰์œ„๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ธ์ฝ”๋”ฉ๋งŒ ํ•ด์ค„ ๋ฟ ๋””์ฝ”๋“œ๋กœ ํ†ตํ•ด ์–ธ์ œ๋“  ์‹œํฌ๋ฆฟ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์šฐ์„  ์–ด๋–ป๊ฒŒ ์‹œํฌ๋ฆฟ์„ ๊ฐ’์„ ์•Œ์•„๋‚ด๋Š”์ง€ ํ•œ๋ฒˆ ์•Œ์•„๋ณด์ฃ .

 

ํฌ๊ฒŒ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›Œ์ปค ๋…ธ๋“œ์— ์ ‘๊ทผํ•ด์„œ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•๊ณผ ETCD ์— ์ ‘๊ทผํ•ด์„œ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

 

 

์›Œ์ปค ๋…ธ๋“œ์— ์ ‘๊ทผํ•ด์„œ ์‹œํฌ๋ฆฟ ๋ฐ์ดํ„ฐ ์•Œ์•„๋‚ด๊ธฐ


์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ๋งŒ์•ฝ ํ•ดํ‚น์„ ๋‹นํ•œ๋‹ค๋ฉด ์›Œ์ปค ๋…ธ๋“œ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์‹œํฌ๋ฆฟ์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์•„๊นŒ ์ƒ์„ฑํ•œ ํŒŒ๋“œ์˜ ์‹œํฌ๋ฆฟ์„ ํ•œ๋ฒˆ ์•Œ์•„๋‚ด๋ณด์ฃ .

ํŒŒ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์›Œ์ปค ๋…ธ๋“œ์— crictl ps ๋ฅผ ์‹คํ–‰ํ•ด container id ๋ฅผ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  crictl inspect ๋ฅผ ํ†ตํ•ด pid ๋ฅผ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค.

 

cd /proc ๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค ๋งˆ์šดํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•œ ํ›„ root ๋กœ ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค.

 

ls -l ๋ฅผ ํ•ด๋ณด๋ฉด pod exec -it -- ls -l  ํ–ˆ์„ ๋•Œ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ ์ง€๊ธˆ ์œ„์น˜๊ฐ€ ํŒŒ๋“œ์— ๋งˆ์šดํŠธ๋˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์ฒ˜๋Ÿผ ์‹œํฌ๋ฆฟ ๊ฐ’์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

RBAC ๋กœ ์‹œํฌ๋ฆฟ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•ด๋„ ๊ฒฐ๊ตญ ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ•ดํ‚น๋œ๋‹ค๋ฉด ์•„์ฃผ ์‰ฝ๊ฒŒ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ์‚ฌ์‹ค ETCD ๋ฅผ ์•”ํ˜ธํ™”ํ•œ๋‹ค๊ณ  ํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ํƒˆ์ทจ ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ETCD ์ž…์žฅ์—์„  ์•„์ฃผ ์ •์ƒ์ ์œผ๋กœ ์ ‘๊ทผํ•œ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .

 

๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฒฝ์šฐ๋Š” ์›Œ์ปค ๋…ธ๋“œ๊ฐ€ ํ•ดํ‚น ๋‹นํ•˜์ง€ ์•Š๋„๋ก ์œ ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

 

ETCD ์— ์ ‘๊ทผํ•ด์„œ ์‹œํฌ๋ฆฟ ๋ฐ์ดํ„ฐ ์•Œ์•„๋‚ด๊ธฐ


 

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์˜ ๋ชจ๋“  ์ •๋ณด๋Š” ETCD ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์‹œํฌ๋ฆฟ ๋˜ํ•œ ETCD ์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ETCD ์— ์ ‘๊ทผํ•˜๋ฉด ์‹œํฌ๋ฆฟ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ETCD ๋ฅผ ํ†ตํ•ด ์‹œํฌ๋ฆฟ์„ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์€ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์—์„œ etcdctl ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ /proc/<etcd pid>/fd ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

etcdctl ์„ ํ†ตํ•ด ์•Œ์•„๋‚ด๊ธฐ

etcdctl ์— ๋Œ€ํ•ด์„  ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์šฐ์„  apt  install etcd-client ์„ ํ†ตํ•ด etcdctl ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ •์ƒ์ ์œผ๋กœ ์ ‘๊ทผ์ด ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ฃ .

ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/ca.crt  endpoint health

 

 ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์ƒ์„ฑํ•œ crt, key ๋กœ etcd ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉด endpoint ๋Š” 127.0.0.1:2379 ๊ฐ€ default ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ์‘๋‹ต๊ฐ’์ด ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ secret2 ๋ฅผ ETCD ์—์„œ ๊ฐ€์ ธ์™€ ๋ณด์ฃ .

ETCDCTL_API=3 etcdctl --cert /etc/kubernetes/pki/apiserver-etcd-client.crt --key /etc/kubernetes/pki/apiserver-etcd-client.key --cacert /etc/kubernetes/pki/etcd/ca.crt get /registry/secrets/default/secret2

 

ETCD ๊ฐ€ ์•”ํ˜ธํ™”๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ETCD ์— ์ ‘๊ทผ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํ‰๋ฌธ์œผ๋กœ ๋ฐ”๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

/proc/<etcd pid>/fd ์„ ํ†ตํ•ด ์•Œ์•„๋‚ด๊ธฐ

etcdctl ์„ ํ†ตํ•ด ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ETCD ํŒŒ๋“œ์— ์ ‘๊ทผํ•ด์„œ ์•Œ์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

etcd ๋Š” ๋ณดํ†ต ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— ์žˆ์œผ๋‹ˆ ๋งˆ์Šคํ„ฐ ๋…ธ๋“œ์— crictl ps ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

crictl inspect ๋กœ pid ๋ฅผ ์•Œ์•„๋‚ธ ํ›„,

 

์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. proc ์™€ fd ์‚ฌ์ด์— ์žˆ๋Š” pid ๋Š” ์ปดํ“จํ„ฐ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ˆ ์ฃผ์˜ํ•˜์„ธ์š”!

 

ls -l ์„ ํ•ด๋ณด๋ฉด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ๋งํฌ๋“ค์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค ์ค‘ ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋ชฉํ•  ๊ฒƒ์€ ๋ฐ”๋กœ 10 ์ž…๋‹ˆ๋‹ค. /var/lib/etcd/member/snap/db ์— ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๊ฐ€ ๊ฑธ๋ ค์žˆ์ฃ .

 

cat 10 | strings ์„ ์‹คํ–‰ํ•˜๋ฉด ETCD ์— ์ €์žฅ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

๋‹น์—ฐํžˆ ์‹œํฌ๋ฆฟ ๋ฐ์ดํ„ฐ๋„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ด๋Ÿฌํ•œ ์œ„ํ—˜์„ฑ ๋•Œ๋ฌธ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ETCD ๋ฅผ ์•”ํ˜ธํ™”ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Falco ๋ฅผ ํ†ตํ•ด ์ถ”์ ๋„ ํ•  ์ˆ˜ ์žˆ์ฃ .

 

๊ทธ๋Ÿผ ํ•˜ํŽธ์—์„œ๋Š” Encryption Data ๋ฅผ ํ†ตํ•ด ์‹ค์ œ๋กœ ์•”ํ˜ธํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€!

๋ฐ˜์‘ํ˜•
profile on loading

Loading...