web-dev-qa-db-ja.com

s3ファイルのアップロードのためにboto3.s3.transfer.TransferConfigに暗号化を追加する方法

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ドキュメント

8
ajputnam

私はjarmodの助けを借りて2つの解決策を思いつくことができました。

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'})
7
ajputnam