即使在删除用于加密的 KMS 密钥后,也能取回 GKE 机密



我按照本文档创建了一个 GKE 集群 (1.13.6-gke.6(,其中--database-encryption-key标志提供了用于启用应用层机密加密的 KMS 密钥。

我使用以下命令创建了一个密钥:

kubectl create secret generic dev-db-secret --from-literal=username=someuser --from-literal=password=somepass

因此,如果我的假设是正确的,这些机密将使用我在创建集群时提供的 KMS 密钥进行加密存储。但是,即使我销毁了所用密钥的所有版本,我也能够使用kubectl get secret dev-db-secret -o yaml查看存储在 GKE etcd中的密钥,并且能够在使用以下清单创建的 pod 中看到它们:

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: dev-db-secret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: test-secret
            key: password
  restartPolicy: Never

如果我执行上述 pod 并执行echo SECRET_USERNAMEecho SECRET_PASSWORD我会在控制台上以纯文本形式打印用户名和密码。

这是加密应该工作的方式吗?如果是,加密究竟在哪里发生?我做错了什么?秘密真的加密了吗?

我不是 100% 确定,但我认为这些密钥是缓存的,因此解密失败可能需要一段时间。Azure就是这种情况,我想GKE也是如此。

顺便说一句,您可能想阅读如何保护清单文件,以便将它们存储在 Git 上。我写了一篇博客文章,描述了您可以使用的一些选项。

相关内容

  • 没有找到相关文章

最新更新