如何解决一个lambda的InvalidChiperException,但另一个不
(data[0]["bar"] as List<Map<String,String>>).add({"foo": "bar"});
我已经尝试了上面的两个代码,已经验证了两个lambda函数都使用相同的VPC,专用子网,并且两个安全组均已添加到kms端点。他们都使用相同的确切角色。他们俩都使用相同的S3 zip软件包,并且都在.decrypt的代码中使用了同一行(我复制并粘贴了代码,这是上面的第二个代码)。
其中一个正常运行,另一个抛出以下错误:
db_password = boto3.client('kms').decrypt(CiphertextBlob=b64decode(os.environ['DB_PASSWORD']))['Plaintext']
services_region = 'us-east-1'
db_password = boto3.client('kms',region_name=services_region).decrypt(CiphertextBlob=b64decode(os.environ['DB_PASSWORD']))['Plaintext']
两者之间唯一的区别是密码不同。但是,我使用与编程用户不同的密码对其进行了测试,似乎没有什么区别。
lambda上的权限标签显示An error occurred (InvalidCiphertextException) when calling the Decrypt operation: : InvalidCiphertextException
Traceback (most recent call last):
File "/var/task/awsfinbi_workdocs_api_pull/bin/api_pull.py",line 143,in lambda_handler
get_data()
File "/var/task/awsfinbi_workdocs_api_pull/bin/api_pull.py",line 100,in get_data
db_load(df,s)
File "/var/task/awsfinbi_workdocs_api_pull/bin/api_pull.py",line 122,in db_load
raise e
File "/var/task/awsfinbi_workdocs_api_pull/bin/api_pull.py",line 112,in db_load
db_password = boto3.client('kms',region_name=services_region).decrypt(CiphertextBlob=b64decode(os.environ['DB_PASSWORD']))['Plaintext']
File "/var/runtime/botocore/client.py",line 316,in _api_call
return self._make_api_call(operation_name,kwargs)
File "/var/runtime/botocore/client.py",line 635,in _make_api_call
raise error_class(parsed_response,operation_name)
botocore.errorfactory.InvalidCiphertextException: An error occurred (InvalidCiphertextException) when calling the Decrypt operation:
我尝试创建一个密钥并使用它,我也尝试使用所有其他密钥。都抛出此错误。
我可能想念这个问题吗?
解决方法
好吧,我偶然发现了一个答案。
关于我的代码的1件事(尚未发布)是我有一个for循环,该循环多次调用了解密。显然,这绝对不应该做。因此,我将用于解密的代码移出了for循环。
即使将它从for循环中删除也无法解决问题,但是当我将其设置为两行时,它就起作用了:
ENCRYPTED = os.environ['DB_PASSWORD']
db_password = boto3.client('kms').decrypt(
CiphertextBlob=b64decode(ENCRYPTED),EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
)['Plaintext'].decode('utf-8')
我以前曾尝试过上下文,但当时对所有一行都没有帮助。我不确定为什么它不喜欢全部包含一行,但是上面的方法仍然有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。