如何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()
我有一个已使用 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()