Kubernetes 库伯内特斯秘密加密

Kubernetes 库伯内特斯秘密加密,kubernetes,google-cloud-platform,Kubernetes,Google Cloud Platform,我有部署到Kubernetes集群(由Google Cloud Kubernetes托管)的POD。这些播客使用的是一些机密文件,它们是纯文本文件。我将秘密添加到yaml文件并部署了部署。应用程序运行良好 现在,假设有人泄露了我的代码,并以某种方式访问了容器中的所有文件。在这种情况下,攻击者可以找到secrets目录并打印其中写入的所有机密。这是纯文本 问题: 为什么使用kubernetes机密而不仅仅是纯文本更安全?有不同的安全级别,正如@Vishal Biyani在评论中所说的,听起来你在寻

我有部署到Kubernetes集群(由Google Cloud Kubernetes托管)的POD。这些播客使用的是一些
机密文件
,它们是纯文本文件。我将秘密添加到
yaml
文件并部署了部署。应用程序运行良好

现在,假设有人泄露了我的代码,并以某种方式访问了容器中的所有文件。在这种情况下,攻击者可以找到
secrets
目录并打印其中写入的所有机密。这是纯文本

问题:
为什么使用kubernetes机密而不仅仅是纯文本更安全?

有不同的安全级别,正如@Vishal Biyani在评论中所说的,听起来你在寻找从项目中获得的安全级别,比如密封机密


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

如果您可以使用命令创建机密,而不是将其保存在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 
我还使用了两个级别的秘密,一个是kubernetes:

  env:
    - name: SECRETS_USER
      valueFrom:
        secretKeyRef:
          name: cloudsql-user-credentials
          key: username
SECRETS_用户是一个env var,我在jasypt上使用这个值

春天: 数据源: 密码:ENC(${SECRETS\u USER})

在应用程序启动时,您使用参数:
-djsypt.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

库伯内特斯的秘密是不安全的,因为它们只有B64编码。如果您想保护机密,应该使用类似于或Vault的Kubernetes后端。您可以使用Kubernetes引擎加密机密:这是一个非常好的答案。为了更好、更安全地进行秘密管理,可以查看