如何使用Google Cloud的Cloud KMS存储私钥?
GCP Cloud KMS 私钥存储与应用接入说明
私钥存储逻辑说明
你提到的「先存存储服务再用KMS加密」不是必须流程,Cloud KMS支持两种私钥使用模式,按需选择即可:
- KMS托管私钥模式:直接将私钥作为密钥版本导入KMS,私钥全程存储在KMS的硬件安全模块(HSM)中,不会对外暴露明文。你不需要额外将私钥存储在其他服务,只需要调用KMS开放的密码学接口完成签名、解密等操作即可,适合对私钥安全等级要求高、需要满足合规要求的场景。
- 自托管私钥密文模式:如果需要自行保存私钥副本,可以先用KMS密钥加密私钥明文,再将加密后的密文存储在GCS、Cloud SQL等存储服务中。这种模式下KMS只负责存储加密私钥用的根密钥,不存储你的业务私钥本身,适合需要频繁读取私钥明文、对调用延迟要求较高的场景。
应用访问私钥的实现步骤
根据你选择的存储模式,对应操作流程如下:
KMS托管私钥模式
该模式下应用不需要接触私钥明文,直接调用KMS接口完成操作即可:
- 在Cloud KMS控制台创建对应用途的密钥环和非对称密钥,若使用自有私钥选择「导入现有密钥」选项,按指引完成私钥导入
- 为应用绑定的服务账号授予
roles/cloudkms.cryptoOperator角色权限,确保应用有权限调用目标KMS密钥的对应接口 - 应用侧集成GCP官方SDK,调用KMS的
asymmetricSign、decrypt、getPublicKey等接口完成所需的密码学操作即可
自托管私钥密文模式
该模式下应用需要自行完成密文解密后使用私钥:
- 本地使用
gcloud命令,提前用KMS密钥加密私钥明文,生成密文文件:
gcloud kms encrypt \ --key=你的KMS密钥ID \ --keyring=你的密钥环ID \ --location=密钥所在区域 \ --plaintext-file=./本地私钥明文文件路径 \ --ciphertext-file=./输出加密后密文文件路径
- 将生成的密文文件上传到存储服务,更推荐直接存入GCP Secret Manager,该服务是专门用于存储敏感信息的托管服务,底层默认用KMS加密,不需要你自行处理加密流程
- 为应用绑定的服务账号授予
roles/cloudkms.cryptoKeyDecrypter角色权限,以及对应存储服务的读取权限 - 应用运行时先从存储服务拉取私钥密文,调用KMS的
decrypt接口解密密文得到私钥明文,直接放在内存中使用即可,不要将明文写入持久化存储
内容的提问来源于stack exchange,提问作者nkhil
相关产品推荐
相关产品推荐

