botocore.exceptions.ClientError:客户端KMS加密

时间:2016-08-10 13:31:52

标签: python-2.7 encryption amazon-s3 boto3 aws-kms

我正在尝试使用我在AWS IAM中创建的密钥加密应用程序中的pdf文件,并将加密文件上传到S3。我使用boto3来实现这一目标。我可以将文件上传到S3而不加密。这是我执行加密的功能:

def write(self):
    print 'Write to S3'
    client = boto3.client('kms')

    s3 = boto3.client('s3')
    input_file = open('265987747.pdf', 'rb')
    data = input_file.read()
    input_file.close()
    print type(data)
    response = client.encrypt(
        KeyId='alias/efax',
        Plaintext=data,
        EncryptionContext={
            'string': 'string'
        }
    )
    #Upload file to S3
    #s3.upload_file("265987747.pdf", "bucket_efax", "265987747.pdf")

我收到以下错误:

botocore.exceptions.ClientError:调用加密操作时发生错误(ValidationException):检测到1个验证错误:'明文'未能满足约束:成员的长度必须小于或等于4096

我不确定我是否使用正确的方法来加密KMS中的文件。

1 个答案:

答案 0 :(得分:0)

您可能正在尝试加密超过4 KB的数据。

正如文档所述,您的数据不能超过4 KB(您的错误也指出了这一点)。

  

您可以加密最多4 KB的任意数据,例如RSA密钥,数据库密码或其他敏感客户信息。

     

如果要将加密数据从一个区域移动到另一个区域,则可以使用此API在新区域中加密用于加密原始区域中数据的明文数据密钥。这为您提供了数据密钥的加密副本,该副本可以在新区域中解密,并在那里用于解密加密数据。

有关详细信息,请参阅docs

据我所知,boto还不支持文件的客户端加密。

您必须自己加密并将它们发送到s3,我已经为django文件字段实现了客户端加密here的小代码。希望它有所帮助