You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 11:10:23