s3 オブジェクトが暗号化されているか確認する

tl;dr

- SSE-S3 を試した
- デフォルト暗号化なら特に設定無しでもオブジェクトは暗号化される
- aws s3api head-objects で確認可能

S3 の暗号化を試してみた

バケットで設定を有効化するだけ。とりあえず SSE-S3 選択。
ただ鍵とファイル同じ場所に置くので意味ない気も。
ちゃんとやるなら SSE-KMS、もしくはクライアントサイド暗号化検討する

アプリの既存処理は設定変更必要?

デフォルト暗号化の SSE-S3 ならアプリ側で設定変更しなくても暗号化される。
明示的に暗号化する場合はリクエストヘッダーに x-amz-server-side-encryption を付与する必要があるが、デフォルト暗号化設定が有効化されているとそちらを勝手に利用してくれる。

S3 オブジェクトが暗号化されているか確認する

ドキュメントでは以下の記載があったが追跡できなかった。
設定がおかしいのか…

> オブジェクトレベルの Amazon S3 アクションに CloudTrail ログを使用して Amazon S3 への PUT および POST リクエストを追跡し、
> 受信 PUT リクエストに暗号化ヘッダーがないとき、デフォルト暗号化を使用してオブジェクトが暗号化されているかどうか確認できます。

s3api でオブジェクト確認したら ServerSideEncryption の有無確認すればよさそうだった。

デフォルト暗号化なしのバケット

~$ aws s3api head-object --bucket encrypt-test --key hoge/fuga
{
   "AcceptRanges": "bytes",
   "ContentType": "binary/octet-stream",
   "LastModified": "Thu, 12 Jul 2018 hh:mm:ss GMT",
   "ContentLength": 157334,
   "ETag": "\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"",
   "Metadata": {}
}

デフォルト暗号化ありのバケット

~$ aws s3api head-object --bucket encrypt-test --key hoge/fuga
{
   "AcceptRanges": "bytes",
   "ContentType": "binary/octet-stream",
   "LastModified": "Thu, 02 Aug 2018 hh:mm:ss GMT",
   "ContentLength": 23877,
   "ETag": "\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"",
   "ServerSideEncryption": "AES256",
   "Metadata": {}
}

注意事項

既存のオブジェクトは暗号化されない。新規に PUT されるもののみ。
KMS 暗号化する場合はリクエスト制限に注意。


なんとかやっていきたい