【问题标题】:How to make the kubernetes pods unable to decrypt the kubernetes secrets without a key?如何使 kubernetes pod 在没有密钥的情况下无法解密 kubernetes 机密?
【发布时间】:2021-05-22 19:00:49
【问题描述】:

我要实现的最终目标是创建一个 kubernetes 机密(可能带有密钥)和一个使用它的 pod。但问题是,创建的 pod 不应该能够在没有特定密钥的情况下解码/解密秘密值。 我已经尝试过使用静态数据加密的秘密,但这还不足以满足我的要求。

【问题讨论】:

  • “使用它的 pod”是什么意思?这个问题听起来不像是密码学的工作原理
  • Pod 引用任何创建的 pod。

标签: kubernetes kubernetes-pod kubernetes-secrets


【解决方案1】:

编辑:我正在尝试将其作为分步解决方案。 (正如@Dawid 在 cmets 中所问的那样)

  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

【讨论】:

  • 尝试了秘密卷和环境变量的方法,但它们将被编码为base64,任何有权访问pod的人都可以以纯文本形式访问秘密。
  • 你可以试试这个步骤。 1.使用您的密钥加密数据。 2. 创建新数据的秘密。 3.在你的解密逻辑中,首先解密base64,然后使用你的密钥解密
  • 感谢途径,使用OpenSSL能够完成我想要的任务。
  • 您好,您已经指出了导致解决方案的评论,您能否编辑您现有的答案以将其包含在其中? @Preetham,很高兴您设法解决了您的问题,请考虑使用您为解决问题所采取的步骤创建自己的答案。
【解决方案2】:

@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. 假设秘密被挂载到/opt/mnt/secrets/,在 pod 内部。

    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#
    

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 2019-10-24
    • 2019-11-16
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    相关资源
    最近更新 更多