0

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

4

1 回答 1

2

我认为您可能在这里混淆了两个概念。如果您使用GKE 应用层加密,您的集群需要 IAM 权限才能与 KMS 通信。作为用户,您永远不会直接加密秘密。kubectl create secret例如,当您运行时,GKE 会在将 secret 保存到 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()
于 2019-11-06T16:50:13.590 回答