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