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用にいじってリビルドするといけるらしいのですが、
業務での使用ですので際どいことは避け、信頼性の面から、控えておきました。
そのうちサポートされるかもしれませんし…