如何在GKE中尝试"静态加密机密数据"功能?含kube-apiserver配置操作
在GKE中配置静态加密机密数据的具体操作
嘿,刚好对这块熟,和原生K8s需要手动改kube-apiserver配置不一样,GKE直接集成了Google Cloud KMS(密钥管理服务)来实现静态加密机密数据,操作起来更省心,具体步骤如下:
一、准备工作
首先你得确保:
- 已经有一个GCP项目,并且拥有该项目的
roles/cloudkms.admin或相关权限(比如能创建KMS密钥、给服务账号授权) - 本地已经安装并配置好
gcloud命令行工具,且已关联到你的GCP项目
二、创建Cloud KMS密钥环和加密密钥
GKE的静态加密依赖Cloud KMS的自定义密钥,先创建所需的密钥资源:
- 创建密钥环(替换括号里的占位符为你的实际值):
gcloud kms keyrings create [你的密钥环名称] --location [你的区域,比如us-central1] - 创建加密密钥:
gcloud kms keys create [你的密钥名称] --keyring [你的密钥环名称] --location [你的区域] --purpose encryption - 给GKE的服务账号授权,让它能使用这个密钥进行加解密:
gcloud kms keys add-iam-policy-binding [你的密钥名称] \ --keyring [你的密钥环名称] \ --location [你的区域] \ --member serviceAccount:[你的项目编号]-compute@developer.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter提示:可以用
gcloud projects describe [你的项目ID] --format='value(projectNumber)'获取项目编号
三、配置GKE集群使用自定义加密密钥
分两种场景:新建集群和现有集群更新
1. 新建集群时配置
创建集群的时候直接指定自定义加密密钥:
gcloud container clusters create [你的集群名称] \ --region [你的区域] \ --database-encryption-key projects/[你的项目ID]/locations/[你的区域]/keyRings/[你的密钥环名称]/cryptoKeys/[你的密钥名称]
2. 给现有集群启用加密
如果是已经存在的集群,执行更新命令即可:
gcloud container clusters update [你的集群名称] \ --region [你的区域] \ --database-encryption-key projects/[你的项目ID]/locations/[你的区域]/keyRings/[你的密钥环名称]/cryptoKeys/[你的密钥名称]
注意:这个操作会重启GKE的控制平面,期间集群的API访问会有短暂中断,建议在业务低峰期执行
四、验证加密是否生效
你可以通过以下方式确认配置成功:
- 创建一个测试机密:
kubectl create secret generic test-secret --from-literal=password=mysecret123 - 前往Cloud Console的Cloud KMS页面,找到你创建的密钥,查看它的使用记录,如果能看到GKE发起的加解密请求,就说明配置生效了
- 也可以通过
gcloud container clusters describe [你的集群名称] --region [你的区域]命令,查看输出中的databaseEncryption字段,确认使用的是你自定义的密钥
一些额外注意事项
- GKE默认已经用Google管理的密钥加密了静态数据,自定义密钥是在这之上再加一层信封加密,安全性更高
- 如果后续需要切换回默认加密,只需执行更新命令时把
--database-encryption-key设为默认密钥路径:projects/[你的项目ID]/locations/[你的区域]/keyRings/gke-default/cryptoKeys/gke-default - 一定要保管好你的KMS密钥,如果密钥被删除,集群将无法解密现有机密数据,导致业务故障
内容的提问来源于stack exchange,提问作者Tao Li
相关产品推荐
相关产品推荐

