0

我正在尝试使用我在 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: An error occurred (ValidationException) when calling the Encrypt operation: 1 validation error detected: Value at 'plaintext' failed to satisfy constraint: Member must have length less than or equal to 4096

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

4

1 回答 1

1

您可能试图加密超过 4 KB 的数据。

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

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

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

有关更多信息,请参阅文档

据我记得 boto 还不支持文件的客户端加密。

您必须自己加密它们并将它们发送到 s3,我在这里为 django 文件字段实现了一个用于客户端加密的小代码。希望能帮助到你

于 2016-08-10T13:42:04.017 回答