如何在kubernetes机密中存储/检索KMS加密的.enc文件

时间:2019-11-06 16:26:00

标签: google-kubernetes-engine google-cloud-kms kubernetes-secrets

我有一个.enc文件,该文件已通过GCP KMS密钥加密。我将此加密文件作为秘密存储在kubernetes中。 Kubernetes集群有权访问KMS密钥。现在我想在容器运行时使用密钥解密存储的加密文件。我的服务是用python编写的。如何使用python脚本解密存储的加密文件?

1 个答案:

答案 0 :(得分:2)

我认为您可能在这里混淆了两个概念。如果您使用的是GKE Application-layer encryption,则您的群集需要IAM权限才能与KMS对话。作为用户,您永远不会直接加密机密。例如,当您运行kubectl create secret时,GKE将在将密码保存到etcd之前自动对其进行加密。当您请求密码时,GKE会自动将其解密。

如果您想对带外机密进行加密,则您的Kubernetes集群应该具有使用KMS密钥的权限。 Kubernetes和etcd都不会看到明文秘密。您可以在计算机上本地对其进行加密,然后将加密后的数据作为秘密保存在Kubernetes中。当您想要检索纯文本时,您的pod /服务将需要请求Kubernetes机密,然后对Cloud KMS进行必要的API调用以解密该机密。以下是一些可以解密密码的示例Python代码:

def decrypt(client, s):
    if not s:
        raise ValueError('ciphertext is missing')

    response = client \
        .projects() \
        .locations() \
        .keyRings() \
        .cryptoKeys() \
        .decrypt(name=crypto_key_id, body={"ciphertext":s}) \
        .execute()

    return base64.b64decode(response['plaintext']).decode('utf-8').strip()