Boto3 AWS KMS 加密解密文件
Posted
技术标签:
【中文标题】Boto3 AWS KMS 加密解密文件【英文标题】:Boto3 AWS KMS encrypt and decrypt file 【发布时间】:2019-07-24 01:35:39 【问题描述】:我有一个 python 脚本尝试使用 boto3 使用 AWS KMS 加密文件。我可以将文件加密并写入文件。但是当我尝试使用第二部分代码解密文件时,它引发了如下错误,有人可以帮助解决这个问题还是有更好的解决方案?非常感谢。
Traceback(最近一次调用最后一次): _api_call 中的文件“runtime/lib/python3.4/site-packages/botocore/client.py”,第 357 行 return self._make_api_call(operation_name, kwargs) _make_api_call 中的文件“runtime/lib/python3.4/site-packages/botocore/client.py”,第 661 行 raise error_class(parsed_response, operation_name) botocore.errorfactory.InvalidCiphertextException:调用解密操作时发生错误(InvalidCiphertextException):
加密文件
client = boto3.client(
'kms',
region_name='us-east-1',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)
with open(src_file, 'rb') as infile :
with open(ret_file, 'wb') as outfile :
while True:
chunk = infile.read(chunk_size)
if not chunk :
break
resp = client.encrypt(KeyId=kms_id, Plaintext=chunk)['CiphertextBlob']
outfile.write(resp)
解密之前加密的文件
client = boto3.client(
'kms',
region_name='us-east-1',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key
)
with open(src_file, 'rb') as infile :
with open(ret_file, 'wb') as outfile :
while True:
chunk = infile.read(chunk_size)
if not chunk :
break
resp = client.decrypt(CiphertextBlob=chunk)['Plaintext']
outfile.write(resp)
【问题讨论】:
可能相关? aws kms decrypt InvalidCiphertextException error · Issue #1043 · aws/aws-cli 【参考方案1】:您收到该错误的原因是您从 KMS 返回的密文与您加密的明文长度不同。此外,KMS 不保证密文的大小或格式保持不变。您应该将 KMS 密文视为黑匣子。
此外,KMS 不建议您将明文直接发送到 KMS。相反,他们建议您改用信封加密:使用 KMS 加密数据密钥,并使用这些数据密钥加密您的数据。在像您这样的情况下,这不仅会减少对 KMS 的调用,而且还会造成资源分离:KMS 绝不会同时拥有您的加密数据和解密数据所需的密钥。
对于您的使用案例,您是否考虑过使用 AWS 加密 SDK[1][2]?它提供了一个易于使用的信封加密实现,并使得使用 KMS 保护您的数据变得简单。您可以在此处[3] 找到配置它以使用 KMS 的示例,并在此处[4] 找到加密和解密文件的示例。
[1]https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html
[2]https://aws-encryption-sdk-python.readthedocs.io/en/stable/
[3]https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/basic_encryption.py#L29
[4]https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/basic_file_encryption_with_multiple_providers.py#L96-L107
【讨论】:
以上是关于Boto3 AWS KMS 加密解密文件的主要内容,如果未能解决你的问题,请参考以下文章