暗号化されたS3バケットへのアクセスログを暗号化されたS3バケットに保存
暗号化されたS3バケットのサーバーアクセスログの設定
- サーバーアクセスログを吐き出す側の暗号化されたS3バケット
- サーバーアクセスログを保存するS3バケット
上記2つの設定を比べます。暗号化方式の違いに注意してください。
S3バケットのサーバーアクセスログ用ではない暗号化されたアクセスログを吐き出すS3バケット側
アクセスログを吐き出す側の暗号化済S3バケットの設定状況です。その他記載がない項目は、触ってないデフォルトと考えてください。
- ブロックパブリックアクセス 全オン
- サーバーアクセスのログ記録 有効
- デフォルトの暗号化 有効
- サーバー側の暗号化 有効 AWS KMS マスターキー (SSE-KMS)
- ターゲットバケットのprefix なし
- ターゲットバケットの末尾の/(スラッシュ) なし
- バケットポリシーのAllowSSLRequestsOnly(http拒否) 設定済
- ACL デフォルト(触ってない)
ターゲットバケットの設定で prefix と 末尾の/(スラッシュ) を付与すると、貯めるS3バケット側に作られるオブジェクトの命名の先頭に「prefix/」が付き、そのあとに「YYYY-mm-DD-HH-MM-SS-ランダムテキスト」が入ります。
http通信を拒否するバケットポリシー AllowSSLRequestsOnly の設定は以下のとおりです。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSSLRequestsOnly",
"Action": "s3:*",
"Effect": "Deny",
"Resource": [
"arn:aws:s3:::S3バケット名",
"arn:aws:s3:::S3バケット名/*"
],
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
},
"Principal": "*"
}
]
}
S3サーバーアクセスログを保存するS3バケット
S3サーバーアクセスログを保存するS3バケットの設定状態です。
- ブロックパブリックアクセス 全オン
- デフォルトの暗号化 有効
- サーバー側の暗号化 有効 AES256 (SSE-S3)
- オブジェクトロック 無効
- バケットポリシーのAllowSSLRequestsOnly(http拒否) 設定済
- ACL デフォルト(触ってない)
サーバー側の暗号化 有効 AES256 (SSE-S3) じゃないと、S3サーバーアクセスログを保存できないので気をつけること!
ログを吐き出す側の暗号化されたS3バケット作成時、バケット名ではなく、プレフィックスの命名規則まで考えていなかったとき
S3サーバーアクセスログを貯めるS3バケット側を複数作らず、1つにまとめることは可能です。この場合のデメリットは、バケット内のオブジェクト名の一覧表示画面でログを吐き出した側のS3バケットを特定することができないことです。しかし、オブジェクトの中身であるログのbodyとなる本文テキストまで見にいけば、ログを吐き出したS3バケット名が記載されているため特定できます。このデメリットは、Athenaを使えばクエリ次第でカバーできると考えられます。S3バケットのプレフィックス名は、なるべく、最初から命名ルールを決めておくことを強く推奨します。リソースの命名ルールは、ハーバード大学のCloud Resource Naming Conventionsなどがおすすめですが、KMS、EC2キーペア、EC2 EIP、ACMなどネーミングルール自体のリソース対応不足もありますので、抜けもれないCDPを書き、細かいリソース毎にすべてネーミングルールを決めましょう。