我正在使用boto3和我的django应用程序将一些文件上传到S3。但是当我尝试使用boto3's Object's API指定客户端加密算法和密钥时,我收到以下错误。
调用PutObject时发生错误(InvalidArgument) 操作:使用客户提供的密钥的服务器端加密 与指定的加密方法不兼容。
这是我的代码,用于指定加密算法和密钥。
import boto3
s3 = boto3.resource('s3')
key = s3.Object(bucket_name, key_name)
file_obj.seek(0)
kwargs = {
'ServerSideEncryption': 'AES256',
'SSECustomerAlgorithm': 'AES256',
'SSECustomerKey': settings.AWS_ENCRYPTION_KEY,
}
key.put(**kwargs)
key.put(Body=file_obj)
key.Acl().put(ACL='public-read')
以下是我在settings.py
中生成加密密钥的方法# settings.py
password = '32characterslongpassphraseneeded'.encode('utf-8')
AWS_ENCRYPTION_KEY = base64.b64encode(password)
我正在使用python3。
答案 0 :(得分:3)
在boto3库上发布问题后,我终于得到了一个有效的例子。这是应该怎么做的。
import boto3
import os
BUCKET = 'YOUR-BUCKET'
KEY = os.urandom(32)
s3 = boto3.client('s3')
print("Put object...")
s3.put_object(Bucket=BUCKET,
Key='path_of_object_in_bucket', Body=b'foobar',
SSECustomerKey=KEY,
SSECustomerAlgorithm='AES256')
print("Done")
# Make sure to save the KEY!
# Getting the object:
print("Getting object...")
response = s3.get_object(Bucket=BUCKET,
Key='path_of_object_in_bucket',
SSECustomerKey=KEY,
SSECustomerAlgorithm='AES256')
print("Done, response body:")
print(response['Body'].read())