如何store/retrieve KMS加密.enc文件in/from kubernetes secrets

How to store/retrieve KMS encrypted .enc file in/from kubernetes secrets

我有一个已使用 GCP KMS 密钥加密的 .enc 文件。我将这个加密文件作为秘密存储在 kubernetes 中。 Kubernetes 集群具有访问 KMS 密钥的权限。现在我想在容器为 运行 时使用密钥解密存储的加密文件。我的服务是用[=​​14=]写的。我如何使用 python 脚本解密存储的加密文件?

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

如果您想在带外加密秘密,您的 Kubernetes 集群应该没有使用 KMS 密钥的权限。 Kubernetes 和 etcd 都不会看到明文秘密。您在计算机上对其进行本地加密,并将加密后的数据作为秘密保存在 Kubernetes 中。当您想要检索明文时,您的 pod/service 将需要请求 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()