KMS密钥用途错误排查:数据库加解密场景需何种密钥用途?
问题解决:KMS获取公钥报错的密钥用途问题
错误根源
你调用getPublicKey()方法获取公钥,但当前使用的密钥是对称加密密钥(用途标记为ENCRYPT_DECRYPT)。这类密钥采用单密钥完成加解密,不存在公钥/私钥对,因此无法通过该接口获取公钥,触发FAILED_PRECONDITION错误。
正确的密钥用途
如果你的需求是获取公钥实现客户端加密(比如加密数据库数据),必须使用非对称加密密钥,对应的密钥用途为:
ASYMMETRIC_ENCRYPT:专门用于非对称加密场景,公钥可导出用于客户端加密,私钥托管在KMS中用于解密,完全匹配你的数据库数据加解密需求。
具体修正操作
重新创建合规密钥:
在Cloud KMS控制台或通过CLI创建密钥时,需选择:- 密钥类型:「非对称」
- 密钥用途:「加密」(后台对应标识为
ASYMMETRIC_ENCRYPT) - 加密算法:根据业务需求选择,比如
RSA_DECRYPT_OAEP_2048_SHA256
代码适配:
你现有代码的逻辑本身无问题,只需确保CryptoKeyVersionName指向新创建的非对称密钥版本即可。
补充说明
如果你的业务更适合对称加密(比如追求更高的加解密性能),可以放弃获取公钥的逻辑,直接调用KMS的encrypt()和decrypt()接口完成对称加解密,此时密钥用途保持ENCRYPT_DECRYPT即可。
内容的提问来源于stack exchange,提问作者BefuddledBarberian
相关产品推荐
相关产品推荐

