iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0

每當 pod 需要存取一些機密資料時,可以透過 secret 取得,今天將討論權限以及如何取得。

Manage Kubernetes secrets

  1. Secret 可以透過兩種方式建立
    (1) 以 kubectl create secret的指令建立,此時建立時可以直接將原來的密碼寫上
    (2) 若以檔案的形式並透過 kubectl create -f 的方式建立,會需要將密碼轉為 base64

因為 secrets 是 base64 編碼,所以在密碼的的儲存上會建議做以下防護:
(1) 對 Secrets 啟用靜態加密
(2) 透過 RBAC 規則限制訪問secret的最小權限
(3) 限制只能透過特定的 container 訪問
(4) 使用外部的 secret store 如 AWS 的 Secrets Mangaer

注意:如果是pem檔在encode時會需要加上-w 0

或者,tls配置可以參考以下方式建立

kubectl create secret tls my-tls-secret \
  --cert=path/to/cert/file \
  --key=path/to/key/file
  1. Secrets 主要以兩種形式在 pod 中使用: (1)ENV (2)Volume
# Env 形式
apiVersion: v1
kind: Pod
metadata:
  name: envfrom-secret
spec:
  containers:
  - name: envars-test-container
    image: nginx
    envFrom:
    - secretRef:
        name: test-secret
# volumes 形式
apiVersion: v1
kind: Pod
metadata:
  name: secret-dotfiles-pod
spec:
  volumes:
    - name: secret-volume
      secret:
        secretName: dotfile-secret
  containers:
    - name: dotfile-test-container
      image: registry.k8s.io/busybox
      volumeMounts:
        - name: secret-volume
          readOnly: true
          mountPath: "/etc/secret-volume"
  1. 取得 secrets - 主要討論可以取得 secrets 的風險,以了解風險
    (1) 可以先查看 pod 的 yaml 並直接進到 pod 中讀取 volume 或者 Env
    (2) 若是透過 ServiceAccount 會需要透過 curl 指令
# Point to the internal API server hostname
APISERVER=https://kubernetes.default.svc


# Read this Pod's namespace
NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)

# Read the ServiceAccount bearer token
TOKEN=$(cat ${SERVICEACCOUNT}/token)

# Reference the internal certificate authority (CA)
CACERT=${SERVICEACCOUNT}/ca.crt

# Explore the API with TOKEN
curl --cacert ${CACERT} --header "Authorization: Bearer ${TOKEN}" -X GET ${APISERVER}/api

(3) 也可以透過 ETCD 取得

ETCDCTL_API=3 etcdctl \
   --cacert=/etc/kubernetes/pki/etcd/ca.crt   \
   --cert=/etc/kubernetes/pki/etcd/server.crt \
   --key=/etc/kubernetes/pki/etcd/server.key  \
   get /registry/secrets/default/secret1 | hexdump -C

參考資料
https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/


上一篇
[Day15] 4-1. Use appropriate pod security standards
下一篇
[Day17] 4-3. Understand and implement isolation techniques
系列文
我在 CKS 考完只拿 47% 後痛定思痛決定好好準備內容17
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言