Kubernetes机密加密

时间:2018-07-24 10:35:04

标签: kubernetes google-cloud-platform

我有一些pod部署到Kubernetes集群(由Google Cloud Kubernetes托管)。这些吊舱正在使用一些secret,它们是纯文本文件。我将机密添加到yaml文件中并部署了部署。该应用程序运行正常。

现在,让我们说有人破坏了我的代码,并以某种方式可以访问我在容器上的所有文件。在这种情况下,攻击者可以找到secrets目录并打印在那里写的所有秘密。这是纯文本。

问题:

为什么使用kubernetes-secrets而不是纯文本更为安全?

2 个答案:

答案 0 :(得分:1)

有不同级别的安全性,正如@Vishal Biyani在评论中所说,听起来您正在寻找从诸如Sealed Secrets之类的项目中获得的安全性级别。

正如您所说,开箱即用的机密不会在容器级别为您提供加密。但是它确实提供了通过kubectl和kubernetes API进行访问的控制。例如,您可以使用基于角色的访问控制,以便特定用户可以看到秘密存在,而无需(通过k8s API)看到秘密的价值。

答案 1 :(得分:0)

如果您可以使用命令来创建机密,而不是将其存储在yaml文件中: 示例:

kubectl create secret generic cloudsql-user-credentials --from-literal=username=[your user]--from-literal=password=[your pass]

您也可以将其阅读为

kubectl get secret  cloudsql-user-credentials -o yaml 

我也使用2个级别的秘密,一个是kubernetes:

  env:
    - name: SECRETS_USER
      valueFrom:
        secretKeyRef:
          name: cloudsql-user-credentials
          key: username

SECRETS_USER是一个环境变量,我在jasypt上使用此值

春天: 数据源: 密码:ENC($ {SECRETS_USER})

在应用启动时,您可以使用以下参数:-Djasypt.encryptor.password=encryptKeyCode

/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar  org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="encryptKeyCode" password=[pass user] algorithm=PBEWithMD5AndDES