AWSで、ユーザがダウンロードするファイルは、暗号化したいところです。まず「CloudShell」で、「S3」のファイルを暗号化Zipする練習してみました。
以下のシェルでできました。
#!/usr/bin/bash MY_BUCKET=S3対象のバケット MY_CSV=対象ファイル MY_ZIP=$MY_CSV.zip MY_PASS=パスワード cd /tmp if test -z $MY_CSV; then exit 1 fi if test -z $MY_PASS; then exit 2 fi rm -f $MY_CSV $MY_ZIP aws s3 cp s3://$MY_BUCKET/$MY_CSV . if test $? -ne 0; then exit 3 fi zip -e --password $MY_PASS $MY_ZIP $MY_CSV if test $? -ne 0; then exit 4 fi aws s3 mv $MY_ZIP s3://$MY_BUCKET if test $? -ne 0; then exit 5 fi exit 0
これを「Lamdba」から呼出せばと安直にかんがえていましたが、「Lamdba」と「CloudShell」は、全く別空間なので呼び出せません。
「Lamdba」の「レイヤー」でシェルを試したりしましたが、結局「Lamdba」でUNIXシェルは接動かせず、「Lamdba」の上でZipコマンドは未サポートでした。この作戦はNG。「EC2」なら呼べるらしいですが、今回は常に仮想サーバが必要でシステムではないので控えました。
Python側の「zipfile」に頼ります。ヘルプではいちおうパスワードが指定できるようになっていますね。
ZipFile.setpassword(pwd) Set pwd (a bytes object) as default password to extract encrypted files.
しかしこれは読込時のみでした。書込み時は、pythonから未サポートの旨のエラーが出ます。なんかzipの暗号化はライセンス上の制約があるとか、昔なにかで聞いたことがある気がします。
ネットで探すと、暗号化zipのpythonライブラリ「pyminizip」がありますね。「EC2」にもっていってためします。(EC2用に再Buildが必要だったかもしたかもしれません)
とりあえず「Lamdba」の「レイヤー」に追加するため、「pyminizip」をzipにまとめてから、PCローカルに「scp」でコピーします。windowsから行う場合、少し事前準備が必要でした。
「pyminizip.zip」を、「Lamdba」の「レイヤー」に追加して、Lamdba関数側で、pyminizpをimportします。実行すると、import時点でエラーになってしまいます。
他ネット記事によると、python3用にいじってリビルドするといけるらしいのですが、
業務での使用ですので際どいことは避け、信頼性の面から、控えておきました。
そのうちサポートされるかもしれませんし…