【问题标题】:Getting GKE secrets back even after deleting the KMS keys used for encryption即使在删除用于加密的 KMS 密钥后也能取回 GKE 机密
【发布时间】:2019-11-03 03:27:30
【问题描述】:

我按照 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 密钥加密存储。但是,即使在我销毁了所有使用密钥的版本之后,我也可以使用 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,我会在控制台上以纯文本形式打印用户名和密码。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 已经很久(超过12-13小时),解密没有失败。但是,我无法创建新的秘密,但可以 get,deletemodify 它。此外,即使集群发出密钥不可用的警告,新创建的 pod 也可以使用该密钥。
    • 我会在相关的KMS plugin 下提交问题。不确定这是否是正确的插件,但这是我在 Google 上找到的第一件事。或联系 GKE 支持。当您发现发生了什么时,请添加答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-31
    • 2019-05-30
    • 2019-11-18
    相关资源
    最近更新 更多