第4回 Amazon Lightsail で監視 ~ CloudWatch エージェントを導入したのだからログも飛ばそう編

Amazon Lightsail のアイコン

はじめに

猫とキャンプと野球観戦と AWS が大好きな旦那、LeoSaki です。モフモフしたい。

前回は、CloudWatch エージェントを Amazon Lightsail インスタンスに導入し、メモリ使用率とストレージ使用量を CloudWatch で確認できるようにしました。

せっかく CloudWatch エージェントを導入したのだから、ログも一緒に飛ばしたらどうだい? ということで、ログを飛ばす設定もやってみることにしました。

今回できること

  • Amazon Lightsail インスタンスの内部の時刻を日本時間に修正します。
  • Amazon Lightsail インスタンスのログを CloudWatch へ飛ばします。

Amazon Lightsail インスタンスの時間

メトリクスを眺めていたら・・・

ある~日 LeoSaki(旦那)が メトリクスを 眺めたら

何かの記事が跳ねたのかな? かな?

嘘だ!!

攻撃されてるやん。そのうえ、攻撃時刻が [06:17] ってどういうこと?

Amazon Lightsail インスタンスの時刻を日本時間に変更する

現在の時間の設定を確認

$ timedatectl status

Time zone が Etc/UTC になっています。

Time zone の変更

$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl status

Asia/Tokyo へ Time zone に変更を行い確認してみます。

アクセスログを確認してみる

嘘だ!!

PHP の設定変更

$ sudo vim /opt/bitnami/php/etc/php.ini
date.timezone = UTC を探して、書き換えます。
date.timezone = UTC
↓
;date.timezone = UTC
date.timezone = Asia/Tokyo
restart をかけて、反映させます。
$ sudo /opt/bitnami/ctlscript.sh restart

ちゃんと日本時間で表示されるようになりました。

攻撃の件はね、その時点で気づいたので対応したのですが、それにしてもログをいちいち SSH 接続して確認するのって面倒だなぁ。

そうだ! こないだ、CloudWatch エージェントを入れたから、CloudWatch でログを確認しよう!

CloudWatch エージェントの設定変更

まず重要なのは、前回確認した「ポリシー」のお話。前回、「CloudWatchAgentServerPolicy」をアタッチしました。このポリシーには、CloudWatch Logs の「リスト」と「書き込み」の権限がついています。ということは、ポリシーについては何もしなくても、CloudWatch にログを飛ばすことができそうです。

config.json を直接書き換える

前回やったウィザードを利用する方法でも良いですが、途中の選択肢を間違えそうなので、config.json を直接書き換えてみます。

$ sudo vim /opt/aws/amazon-cloudwatch-agent/bin/config.json

赤文字が今回追加したものです

「messages」と「access_log」を CloudWatch に飛ばす設定です。

file_path:取得したいログのフルパス
log_group_name:CloudWatch 上で表示されるロググループ名(ご自身でお好きなように)
log_stream_name:ロググループの中で表示されるストリーム名(インスタンス ID としています)
retention_in_days:ログの保持期間です。「-1」 で「失効しない」設定となります

{
    "agent": {
        "metrics_collection_interval": 60,
        "run_as_user": "root"
     },
    "logs": {
        "logs_collected": {
            "files": {
                "collect_list": [
                    {
                        "file_path": "/var/log/messages",
                        "log_group_name": "luna-leo-messages",
                        "log_stream_name": "{instance_id}",
                        "retention_in_days": -1
                    },
                    {
                        "file_path": "/opt/bitnami/apache2/logs/access_log",
                        "log_group_name": "luna-leo-access_log",
                        "log_stream_name": "{instance_id}",
                        "retention_in_days": -1
                    }
                ]
            }
        }
    },
    "metrics": {
        "aggregation_dimensions": [
            [
                "InstanceId"
            ]
        ],
    "append_dimensions": {
        "AutoScalingGroupName": "${aws:AutoScalingGroupName}",
        "ImageId": "${aws:ImageId}",
        "InstanceId": "${aws:InstanceId}",
        "InstanceType": "${aws:InstanceType}"
    },
以下続く

最後に、config.json を反映させます

$ sudo amazon-cloudwatch-agent-ctl -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -a fetch-config -s

CloudWatch での確認

ロググループで確認

ロググループで、設定したロググループ名を探しましょう。LeoSaki(旦那)の場合、ロググループがちょっと増えてしまっているため、先ほどの設定で、ロググループ名に「luna-leo」をつけて、検索しやすいようにしていました。

ちゃんと、ロググループが作成されていることが確認できました。

試しに、アクセスログを確認してみる

届いています。問題なさそうです。

最後に

簡単にログを CloudWatch に飛ばすことができました。あとは、CloudWatch でアラーム設定を行えば、今日のような外部からの攻撃にもいち早く気づくことができるようになりそうです。

LeoSaki(旦那)も、Amazon Lightsail についてはまだまだ初心者なので、更に学習を進めていきたいと思います。普段、がっつり CloudFront や EC2 を見ていると、結構問題点も見えてしまうもの。とてもお手軽な反面、痒い所に手が届かない部分もありますね。マネージドのレンサバだから仕方のないことだけれども。

Amazon Lightsail での監視設定については、以上となります。お付き合いいただきまして、ありがとうございました。

次は・・・まだ決めていませんが、Amazon Lightsail 以外のことを書きたいかもしれない。アウトプットは凄く自分自身の勉強にもなるので良いと思っています。引き続き、よろしくお願いします!

この記事を書いた人
LeoSaki(旦那)

猫大好き、野球大好き、AWS が大好き、な、藩士。
AWS 6冠、取得しています。
IPA 資格は IT パスポート、基本情報技術者、応用情報技術者、取得しています。
キャンプ場でも仕事する社畜っぽい人。

LightsailAWS,Lightsail

Posted by LeoSaki