能否通过aws-encryption-sdk-python,使用AWS KMS中非对称客户密钥加解密文本?
用AWS KMS非对称CMK结合aws-encryption-sdk-python实现加解密
你遇到的报错是:
An error ocurred (InvalidKeyUsageException) when calling the GenerateDataKey operation: You cannot generate a data key with an assymetric CMK.
翻译:调用GenerateDataKey操作时发生错误(InvalidKeyUsageException):无法使用非对称CMK生成数据密钥。
核心结论
可以用AWS KMS的非对称客户密钥结合该SDK实现加解密,但不能用默认的对称加密流程——非对称CMK本身不支持GenerateDataKey操作,这就是报错的直接原因。
可行解决方案
方案1:用非对称CMK加密数据密钥(推荐,适合任意大小文本)
SDK依然会生成用于加密文本的数据密钥,但会改用非对称CMK的公钥加密这个数据密钥,而非调用KMS的GenerateDataKey接口。解密时通过KMS的私钥解密数据密钥,再还原原文。
示例代码:
import aws_encryption_sdk from aws_encryption_sdk.identifiers import EncryptionKeyType, WrappingAlgorithm from aws_encryption_sdk.key_providers.kms import KMSMasterKeyProvider # 初始化KMS密钥提供者,传入你的非对称CMK ARN kms_provider = KMSMasterKeyProvider(key_ids=["arn:aws:kms:你的区域:账号ID:key/密钥ID"]) # 加密文本 plain_text = b"要加密的内容" cipher_text, encrypt_header = aws_encryption_sdk.encrypt( source=plain_text, key_provider=kms_provider, # 指定匹配非对称CMK的包装算法,比如RSA_OAEP_SHA_256 wrapping_algorithm=WrappingAlgorithm.RSA_OAEP_SHA_256, encryption_key_type=EncryptionKeyType.ASYMMETRIC ) # 解密文本 decrypted_text, decrypt_header = aws_encryption_sdk.decrypt( source=cipher_text, key_provider=kms_provider )
方案2:直接用非对称CMK加密小数据(仅适合小文本)
如果你的文本大小小于非对称CMK支持的明文上限(比如RSA 2048密钥支持最大245字节),可以直接用CMK的公钥加密文本,跳过数据密钥环节。但要注意KMS对直接加密的大小限制,不同密钥类型限制不同。
关键注意事项
- 确保你的非对称CMK的密钥用法是
ENCRYPT_DECRYPT,而非SIGN_VERIFY,否则无法用于加解密操作 - 解密时需要拥有访问该非对称CMK私钥的权限(KMS会自动托管私钥,无需你手动持有)
内容的提问来源于stack exchange,提问作者Augusto S. de O.
相关产品推荐
相关产品推荐

