如何让 kubernetes pods 在没有密钥的情况下无法解密 kubernetes secrets?

How to make the kubernetes pods unable to decrypt the kubernetes secrets without a key?

我试图实现的最终目标是创建一个 kubernetes 秘密(可能有一个密钥)和一个使用它的 pod。但要注意的是,创建的 pod 不应该 decode/decrypt 没有特定密钥的秘密值。 我已经尝试过静态数据加密的秘密,但这还不足以满足我的要求。

编辑:我正在尝试将其作为逐步解决方案。 (正如@Dawid 在评论中所问)

  1. 使用您的密钥加密您的数据(您的加密逻辑,可能在脚本中)。
./encrypt.sh --key your-key --data your-data
  1. 创建此加密数据的秘密
kubectl create secret generic your-secret-name --from-literal=secretdata=your-encrypted-data 
  1. 您可以在您的 pod 中添加这样的解密逻辑(作为 sidecar 或 initContainer)
# decrypt.sh will decode base64 then your decryption logic using your-key
./decrypt.sh --key your-key --data /var/my-secrets 
  1. 您还需要将此机密作为卷装载到您的容器中。
    spec:
      containers:
      - image: "image"
        name: app
        ...
        volumeMounts:
          - mountPath: "/var/my-secrets"
            name: my-secret
      volumes:
        - name: my-secret
          secret:
            secretName: your-secret-name

正如@Kiran 的回答,这是我获得解决方案所遵循的步骤。

  1. 使用openssl

    加密

    echo -n "preetham" | openssl enc -e -aes-256-cbc -a -salt -pass pass:<PASSWORD>

  2. 从 YAML 文件创建了秘密。 preetham-secrets-test.yaml

    apiVersion: v1
    kind: Secret
    metadata:
      name: preetham-secrets
    type: Opaque
    stringData: # Using stringData instead data
      username: U2FsdGVkX18VsbQaVpeqrCCJCDEd3LCbefT6nupChvw=  # output from the step 1 
    
  3. 创建密钥

    kubectl apply -f preetham-secrets-test.yaml -n <NAMESPACE>

  4. 将密钥挂载到卷并执行到 pod 中。 Kubernetes reference

  5. 在 pod 内假设秘密安装到 /opt/mnt/secrets/

    bash-4.2# cat /opt/mnt/secrets/username
    
    U2FsdGVkX18VsbQaVpeqrCCJCDEd3LCbefT6nupChvw=bash-4.2#
    
  6. 使用 openssl 解密相同内容。(您可能必须使用

    基于图像安装 openssl
    bash-4.2# echo "U2FsdGVkX18VsbQaVpeqrCCJCDEd3LCbefT6nupChvw=" | openssl enc -d -aes-256-cbc -a -salt -pass pass:<PASSWORD>
    
    preethambash-4.2#