【Python】boto3でS3のファイルをSSE-C暗号化

                                            f:id:tm200:20210423222228j:plain
 

音声ファイルをS3に格納する際にSSE-C方式で暗号化したので備忘録。

botoの語源はアマゾンカワイルカだとか🐬

 

coin-look.pages.dev

公式

boto3.amazonaws.com

環境

Pythonのバージョンは3.7。

3.6は2021年末にサポートが切れるようです。

pip3 install boto3==1.17.22

実装

# -*- coding: utf-8 -*-
import hashlib
import base64

from boto3 import Session


def main():
// クレデンシャルはべた書きNG!
access_key_id = 'xxxxx'
secret_access_key = 'xxxxx'
sse_c_secret_key = ({秘密鍵の文字列
}).encode('utf-8')
// MD5で鍵をハッシュ化
digest = hashlib.md5(sse_c_secret_key).digest()

// HTTPヘッダの設定
sse_c_key_base64 = base64.b64encode(sse_c_secret_key).decode()
sse_c_key_md5 = base64.b64encode(digest).decode()
sse_c_header = {
'
SSECustomerAlgorithm': 'AES256',
'SSECustomerKey': sse_c_key_base64,
'SSECustomerKeyMD5': sse_c_key_md5
}
session = Session(
aws_access_key_id=access_key_id,
aws_secret_access_key=secret_access_key,
region_name='xxxxx',
)

con = session.resource('s3', endpoint_url='https://xxxx.xxx')
bucket = con.Bucket('bucket_name')

// アップロード
bucket.upload_file('{アップロードするファイルのパス}', '{S3のパス}', ExtraArgs=sse_c_header)

// ダウンロード

bucket.download_file('{S3のパス}', '{出力先のパス}', ExtraArgs=sse_c_header)


if __name__ == '__main__':
main()