我尝试使用 AWS Lambda 加密助手来解密环境变量,然后收到错误消息“InvalidCiphertextException”。所有 AWS Identity and Access Management (IAM) 和 AWS Key Management Service (AWS KMS) 权限都是正确的。
简短描述
AWS KMS API 操作错误 InvalidCiphertextException 表示解密请求失败,因为 Lambda 更新了环境变量加密的方式。Lambda 将函数名称作为加密调用的加密上下文传递给 AWS KMS。对于在此更改之前创建的解密函数,您必须更新解密代码,并将 Lambda 函数名称作为加密上下文传递。
解决方法
要获取具有加密上下文的特定开发工具包的 AWS KMS 解密调用代码,请按照以下步骤操作:
- 打开 Lambda 控制台,然后选择 Functions(函数)。
- 在 Function name(函数名称)中,选择该 Lambda 函数。
- 在 Environment variable(环境变量)中,选择 Edit(编辑),然后选择 Add environment variable(添加环境变量)。
- 输入一个 Key(密钥)和 Value(值),然后展开 Encryption configuration(加密配置)。
- 选择 Enable helpers for encryption in transit(启用传输中加密助手),然后选择 Encrypt(加密)。
- 展开 Decrypt secret snippet(解密密码段),复制并粘贴与以下类似的代码段:
DECRYPTED = boto3.client('kms').decrypt(
CiphertextBlob=b64decode(ENCRYPTED),
EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
)['Plaintext'].decode('utf-8')
使用此代码段可以解密使用加密助手加密的新环境变量。
请务必重新加密旧环境变量,以便它们能够支持新的环境变量。
有关更多信息,请参阅使用 AWS Lambda 环境变量。
相关信息
在调用 AWS KMS API 时,我该如何确认使用经过身份验证的加密及关联数据加密?