amazon-web-services – 如何为boto3.s3.transfer.TransferConfig添加加密以进行s3文件上传

我正在尝试使用boto3 file_upload方法将文件上传到s3.这是非常直接的,直到需要服务器端加密.在过去,我使用put_object来实现这一目标.

像这样:

import boto3
s3 = boto3.resource('s3')
s3.Bucket(bucket).put_object(Key=object_name,
                             Body=data,
                             ServerSideEncryption='aws:kms',
                             SSEKMSKeyId='alias/aws/s3')

我现在想使用file_upload方法将文件直接上传到s3.我找不到如何在file_upload方法中添加服务器端加密. file_upload方法可以使用TransferConfig,但我没有看到任何设置加密的参数,但我确实在S3Transfer中看到它们.

我正在寻找这样的东西:

import boto3
s3 = boto3.resource('s3')
tc = boto3.s3.transfer.TransferConfig(ServerSideEncryption='aws:kms',
                                      SEKMSKeyId='alias/aws/s3')
s3.upload_file(file_name, 
               bucket, 
               object_name,
               Config=tc)

boto3文档

> file_upload
> TransferConfig

最佳答案 我能够用jarmod的帮助提出两个解决方案.

使用boto3.s3.transfer.S3Transfer

import boto3
client = boto3.client('s3', 'us-west-2')
transfer = boto3.s3.transfer.S3Transfer(client=client)
transfer.upload_file(file_name,
                     bucket, 
                     key_name,
                     extra_args={'ServerSideEncryption':'aws:kms', 
                                 'SSEKMSKeyId':'alias/aws/s3'}
)

使用s3.meta.client

import boto3
s3 = boto3.resource('s3')
s3.meta.client.upload_file(file_name, 
                           bucket, key_name, 
                           ExtraArgs={'ServerSideEncryption':'aws:kms',
                                      'SSEKMSKeyId':'alias/aws/s3'})
点赞