音声ファイルを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()