2017-10-06 3 views
2

J'essaye de télécharger un fichier à s3 en utilisant la méthode boto3 file_upload. C'est assez simple jusqu'à ce que le chiffrement côté serveur soit nécessaire. Dans le passé, j'ai utilisé put_object pour y parvenir.Comment ajouter le cryptage à boto3.s3.transfer.TransferConfig pour le téléchargement de fichier s3

Comme si:

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

Je veux maintenant télécharger des fichiers directement à s3 en utilisant la méthode de file_upload. Je ne peux pas trouver comment ajouter le chiffrement côté serveur à la méthode file_upload. La méthode file_upload peut prendre un TransferConfig mais je ne vois pas d'arguments qui définissent le cryptage mais je les vois dans S3Transfer.

Je cherche quelque chose comme ceci:

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) 

documentation boto3

+1

Si je lis bien, le 4ème paramètre à S3.Client.upload_file() semble être extraArgs. Êtes-vous capable de fournir ExtraArgs = {ServerSideEncryption: 'aws: kms', SSEKMSKeyId: 'alias/aws/s3'}. Notez l'orthographe de SSEKMSKeyId (pas SEKMSKeyId). – jarmod

Répondre

1

j'ai pu trouver deux solutions avec l'aide de jarmod .

En utilisant 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'} 
) 

En utilisant 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'})