在K8S中,如何安全管理Secrets?

本文详细介绍了在Kubernetes中对Secrets进行加密的必要性和方法,包括静态加密和使用KMS插件如阿里云KMS进行动态加密,确保集群中的敏感数据安全。
摘要由CSDN通过智能技术生成

为何要加密?

在Kubernetes中,Secret是用来帮我们存储敏感信息的,比如密码、证书等,但是在默认的情况下,Secret只是做了简单的base64编码,任何人都可以非常容易的对其进行解密获取到原始数据。

比如通过以下方法生成一个secret对象:

$ echo -n "coolops" | kubectl create secret generic mysecret --dry-run --from-file=secret=/dev/stdin -o yaml > secret.yaml
$ cat secret.yaml 
apiVersion: v1
data:
  secret: Y29vbG9wcw==
kind: Secret
metadata:
  creationTimestamp: null
  name: mysecret

复制代码

其他人只要拿到secret的值,就可以对其进行解密获取到真实数据,如下:

$ echo "Y29vbG9wcw==" | base64 -d
coolops

复制代码

这样就非常的不安全,有点"掩耳盗铃"的意思。

在Kubernetes集群中,Etcd是集群数据库,存储着集群所以的资源数据,其中也包括Secrets,所以拿下了这个数据库就等于拿下了整个集群,所以在生产环境中对其进行加密是非常有必要的。

如何进行加密?

静态加密

kubernetes 1.13版本之后,提供静态加密方式,其主要是通过kube-apiserver来控制Secrets的加解密,而在Etcd中存储的是加密后的信息,所以攻击者拿下了etcd,也无法轻易的拿到Secrets保存的敏感数据。

!! 当前集群是使用kubeadm安装,版本1.18.9

(1)创建加密配置文件,保存到master节点/etc/kubernetes/pki/static-secret-encryption.yaml中

apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
  - resources:
    - secrets
    providers:
    - aescbc:
        keys:
        - name: mysecret
          secret: DJqYaMMpY2DNlHz+HYrFYOUSh5SXKWiVOwLf6nQX9ss=
    - identity: {}

复制代码

其中secret是加密密钥,使用如下命令生成:

$ head -c 32 /dev/urandom | base64

复制代码

(2)修改kube-apiserver启动参数,位置/etc/kubernetes/manifests/kube-apiserver.yaml

......
spec:
  containers:
  - command:
    - kube-apiserver
    - --encryption-provider-config=/etc/kubernetes/pki/static-secret-encryption.yaml
......    

复制代码

!! 注意:kube-apiserver的加密参数,在1.14之后是--encryption-provider-config

(3)重启kube-apiserver

(4)验证加密

首先创建一个secr

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值