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