即使删除了用于加密的KMS密钥,也要找回GKE机密

时间:2019-06-20 10:13:26

标签: google-cloud-platform google-kubernetes-engine kubernetes-security kubernetes-secrets

我按照this文档创建了带有--database-encryption-key标志的GKE群集(1.13.6-gke.6),其中提供了用于启用应用层秘密加密的KMS密钥

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

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

因此,如果我的假设正确,那么这些秘密将在创建集群时使用我提供的KMS密钥进行加密存储。但是,即使我销毁了已使用密钥的所有版本,也可以使用etcd查看存储在GKE kubectl get secret dev-db-secret -o yaml中的秘密,并且可以在创建的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

如果我执行上述操作并执行echo SECRET_USERNAMEecho SECRET_PASSWORD,我将以纯文本格式将用户名和密码打印在控制台上。

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

1 个答案:

答案 0 :(得分:1)

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

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