3 8 Secret傳遞敏感資料

2021-10-23 11:52:01 字數 4559 閱讀 7351

2 利用secret

二、service account 型別 secret

三、kubernetes.io/dockerconfigjson 型別secret

前文介紹的都是通過映象或者configmap向容器傳遞資料或配置,都是明文進行傳遞的資料或配置是敏感的,比如賬戶密碼等金鑰之類的資料,用secret加密方式傳遞可以保證資料安全性。secret結構與configmap類似,都是鍵值對形式。secret有以下3種方式

opaque型別的secret,建立secret時傳遞的value值都是base64編碼後的值,傳到容器裡面的值是base64解碼後的值。

例如lzj通過base64編碼後的值為bhpqcg==,lzj@lzj通過base64編碼後的值為bhpqqgx6ago=,下面建立secret.yaml檔案

apiversion: v1

kind: secret

metadata:

name: mysecret

type: opaque

data:

username: bhpqcg==

password: bhpqqgx6ago=

首先建立乙個user.conf檔案,檔案中新增內容:

lzj

lzj@lzj

通過檔案建立secret

kubectl create secret generic mysecret2 --

from

-file=user.conf

檢視建立的mysecret2,kubectl get secret mysecret2 -o yaml,發現user.conf內容已經被編碼base64進行傳遞

apiversion: v1

data:

user.conf: bhpqcmx6akbsemok

kind: secret

metadata:

creationtimestamp: "2020-08-19t15:23:41z"

name: mysecret2

namespace: default

resourceversion: "8630508"

selflink: /api/v1/namespaces/default/secrets/mysecret2

uid: de58bb77-3ce6-4930-a607-61fc6bb1e6d2

type: opaque

將上面建立的mysecret2掛載到volume中,容器從volume卷中讀取賬戶密碼檔案。首先建立pod為例,如下所示:

apiversion: v1

kind: pod

metadata:

name: secret-pod1

spec:

containers:

- name: mynginx1

image: nginx

imagepullpolicy: ifnotpresent

volumemounts:

- name: user

mountpath: /home/conf

readonly: true

volumes:

- name: user

secret:

secretname: mysecret2

[root@k8s-master01 pod]

# kubectl exec -it secret-pod1 -- /bin/sh

# cd /home/conf

# ls

user.conf

# cat user.conf

lzjlzj@lzj

將上面建立的mysecret匯入到容器環境變數中,建立mysecret用的base64編碼的值,匯入到容器中後就是解碼的值了。首先建立pod的yaml如下

apiversion: v1

kind: pod

metadata:

name: secret-pod2

spec:

containers:

- image: busybox

name: buysbox1

imagepullpolicy: ifnotpresent

command: [

"/bin/sh"

,"-c"

,"sleep 300"

] env:

- name: user_name

valuefrom:

secretkeyref:

name: mysecret

key: username

- name: user_password

valuefrom:

secretkeyref:

name: mysecret

key: password

建立該pod,並進入容器檢視環境變數,發現已經時解碼後的值

[root@k8s-master01 pod]

pod/secret-pod2 created

[root@k8s-master01 pod]

# kubectl exec secret-pod2 -it -- /bin/sh

/# env..

....

user_password=lzj@lzj

user_name=lzj..

....

serice account型別的secret會預設掛載到所有容器中,serice account用來訪問k8s api,由k8s自動建立,並且建立後會自動掛載到/var/run/secrets/kubernetes.io/serviceaccount目錄中。對於每乙個pod執行describe命令可以檢視到掛載的default-token-sk5fk的secret。

[root@k8s-master01 pod]

# kubectl describe pod secret-pod2

name: secret-pod2

namespace: default..

....

mounts:

/var/run/secrets/kubernetes.io/serviceaccount from default-token-sk5fk (ro)

conditions:

volumes:

default-token-sk5fk:

type: secret (a volume populated by a secret)

secretname: default-token-sk5fk

optional: false

[root@k8s-master01 pod]

# kubectl get secret

name type

data age

default-token-sk5fk kubernetes.io/service-account-token 3 82d

mysecret opaque 2 2d2h

mysecret2 opaque 1 2d

建立docker倉庫用來鑑權的registry,比如建立乙個對docker hub的鑑權,在k8s中執行容器時,可以直接從docker hub上pull映象。達到此功能,需建立乙個docker-registry型別的secret,然後指定登入docker hub的使用者名稱、密碼、郵箱,然後在建立pod時運用該secret即可。

1、首先建立乙個docker-registry型別的secret

kubectl create secret docker-registry myregistry --docker-server=hub.docker.com --docker-username=******x --docker-password=****** --docker-email=***[email protected]
2、建立pod,利用secret從docker hub中拉取映象

apiversion: v1

kind: pod

metadata:

name: myhello

spec:

containers:

- name: myhello

image: softwarebird/my_hello

imagepullsecrets:

- name: myregistry

通過yaml建立pod,容器會從docker hub上拉取softwarebird/my_hello最新的映象。

暴露敏感資料

威脅載體 可以獲得你的敏感資料和任何資料備份訪問許可權的人。包括靜止資料,在傳輸過程中,甚至在你的自定義瀏覽器中,包括內部和外部欺騙。攻擊媒介 攻擊者通常不直接破壞加密。他們破壞其他的東西,例如偷取秘鑰,做中間人攻擊,或者從伺服器,在傳輸當中或者從使用者的瀏覽器中,偷取明文資料。安全弱點 最普通的漏...

使用RSA證書加密敏感資料

x.509證書標準支援三種不對稱加密演算法 rsa,dsa,diffie hellman algorithms。最常用的是rsa演算法。所以本文就以前面章節使用makecert工具生成的生成的mytestcert證書進行加密解密,這個證書具有rsa演算法1024位的金鑰對。figure 12.rsa...

保護記憶體中的敏感資料

某些時候,我們需要在記憶體中儲存一些非常敏感的資料,比如信用卡賬號密碼 軟體註冊碼等等。那麼危險隨之而來,使用一些高階軟體除錯工具檢視程序的記憶體資料,居心不良的人就會有機會拿到這些本該嚴格保密的資料。microsoft windows 2000 sp4 以上版本的作業系統提供了用於資料保護的 ap...