9日目です!
8日目の最後で「セキュリティ設定」の見直しをするとお伝えしましたが、1点、気がついたことがあります!
なんと、アクセスログが取れていません(涙)
たしかに2日目でアクセスログの設定を入れましたが、これは、あくまでも S3 バケットに対するアクセスを記録するログの設定でした。
現在の構成はどうなっていたでしょうか。
そうですね、 CloudFront が前面に出ています。
つまり、現在、 S3 のログにでてくるのは、 CloudFront からのオブジェクト取得アクセス(とその他、AWSからのポーリングだったり、自分でオブジェクトを操作した際など)のみなんですね。
ということで、 CloudFront 側にもアクセスログの設定を入れます。
今回も、 get-distribution-config コマンドと update-distribution コマンドでの操作になります。
9日目の要約
CloudFront に対するアクセスログをとるようにするよ!
AWS CLI の準備
このあたりをみて、好きなバージョンとお使いのOSにあった環境設定をしてくださいね。
なんなら、 AWS CloudShell で実行するのも楽でよいと思います。
この記事シリーズは、AWS CloudShell で実行し、実行例を載せています。
バージョン1
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv1.html
バージョン2
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2.html
概要
CloudFront の設定を変更して、アクセスログを S3 バケットに格納するよ
さあ、やってみよう!
CloudFront の設定変更を準備する
やはり、基本的には、6日目で実施したものと似た内容です。
- cloudfront get-distribution-config コマンドで現状の設定を取得する
- ETag の値を確認する
- 取得した json ファイルに対して、設定変更を加える
- cloudfront update-distribution コマンドを実行して更新する
この記事では、3と4についてのみ記載します。1と2の実施内容については、6日目の記事をご確認ください。
取得した json ファイルに対して設定変更を加える
以下の Logging があることを確認します。
"Logging": {
"Enabled": false,
"IncludeCookies": false,
"Bucket": "",
"Prefix": ""
},
以下を参考に書き換えます。
"Logging": {
"Enabled": true,
"IncludeCookies": false,
"Bucket": "<ログ格納用バケット>.s3.amazonaws.com",
"Prefix": "cloudfront"
},
cloudfront update-distribution コマンドを実行して更新する
準備ができたら、6日目と同様に cloudfront update-distribution コマンドを実行して、設定変更を行います。
aws cloudfront update-distribution --id <CloudFront Distribution ID> ¥
--cli-input-json file://distribution_error.json ¥
--if-match 確認したETag の値
コマンド実行に成功すると、Distribution の内容が記された json が返されます。
やはり長いので割愛します。
動作確認
curl コマンドを実行して独自ドメインのアドレス(CloudFront)に対してアクセスします。
curl https://<ドメイン名>/
その後、ログ用の S3 バケットにログが配信されるまでしばし待ちます。
概ねアクセスから30〜40分程度経過するとログファイルが配信されます。
実際には1時間〜4時間程度かかることもあるようです。
s3 ls コマンドを実行してログファイルの有無を確認します。
aws s3 ls s3://<バケットファイル名>
以下のように表示されます。
PRE /
PRE cloudfront/
さらに確認します。
aws s3 ls s3://<バケットファイル名>/cloudfront/
以下のように gz 形式で圧縮されたログファイルが格納されるようになりました。
2021-12-08 16:46:00 901 *********.2021-12-08-16.********.gz
ファイルを解凍するとテキストファイルが出てきます。ログの形式は、こちらの開発者ガイドの通りです。
まとめ
これで CloudFront にアクセスがあった際のログが保存されるようになりました。
ログ形式にあるとおり、クライアントのIPアドレスが記録されているので、もしものときの調査に使ったり、アクセス解析などにつかったりができるようになります。
- 今回使ったコマンド
- (cloudfront get-distribution-config)
- cloudfront update-distribution