
Amazon Auroraの監査ログをCloudWatch Logsへ出力できるようになりました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ウィスキー、シガー、パイプをこよなく愛する大栗です。
Auroraではパフォーマンス影響が少ない監査ログを出力することができます。
今までは各Auroraインスタンスのローカルに保存されていましたが、CloudWatch Logsへ出力することができるようになりました!
Monitoring Amazon Aurora Audit Events with Amazon CloudWatch
Auroraの監査ログ
詳しくはこちらのエントリーに書いていますが、通常のMySQLやMariaDBの監査ログと比較してパフォーマンスの影響が少ないことが特徴の監査ログです。しかし、各インスタンスのローカルに保存されていて、内容を確認するためにはコンソールからダウンロードしたり、aws rds download-db-log-file-portionコマンドを使用する必要がありました。
今回CloudWatch Logsに出力できるようになったため、監査ログの監視がやりやすくなり、長期保存も簡単になりました。
試してみる
Auroraの監査ログをCloudWatch Logsに出力して、内容を監視して通知を行ってみます。
Auroraの監査ログの設定
CloudWatch Logs用のIAM Roleの作成
Aurora用のIAM Roleの作成はこちらも参考になります。
IAMの画面から左のメニューでポリシーを開き、ポリシーの作成をクリックします。
ポリシーを作成します。Policy Generatorを選択します。

アクセス許可の編集で以下の内容を設定します。
|効果|アクション|リソース| |---|---|---| |Allow|logs:CreateLogGroup logs:PutRetentionPolicy|arn:aws:logs:*:*:log-group:/aws/rds/* |Allow|logs:CreateLogStream logs:DescribeLogStreams logs:GetLogEvents logs:PutLogEvents|arn:aws:logs:*:*:log-group:/aws/rds/*:log-stream:*|

内容を確認してポリシーを作成します。

IAMの画面から左のメニューでロールを開き、ロールの作成をクリックします。
AWS サービスでRDSを選択します。

ユースケースの選択でRDSを選択して先に進みます。

ここではポリシーを設定せずに先に進みます。なお設定されている権限は不要なので後で消します。

ロールを作成します。

作成Roleを選択して、既存のポリシーをデタッチします。

ポリシーのアタッチをクリックします。

先ほど作成したポリシーをアタッチします。

これでRoleにポリシーがアタッチされました。

Auroraの構築
次にAuroraを構築します。
監査ログをCloudWatch Logsへ出力するためのDBパラメータグループの設定を行います。
パラメータグループのメニューを開きパラメータグループの作成をクリックします。そして、以下の内容でクラスタパラメータグループを作成します。
| 項目 | 内容 | 備考 |
|---|---|---|
| パラメータグループファミリー | aurora5.6 | |
| タイプ | DB Cluster Parameter Group | |
| グループ名 | aurora-audit-1 | 内容は任意です |
| 説明 | Parameter Group for Aurora Audit | 内容は任意です |

選択したクラスタパラメータグループを選択して、パラメータの編集をクリックします。
監査ログ関連のパラメータを以下のように編集して保存します。
| 名前 | 値の編集 | 備考 |
|---|---|---|
| server_audit_events | CONNECT, QUERY, QUERY_DCL, QUERY_DDL, QUERY_DML, TABLE | 全ての監査ログを出力 |
| server_audit_excl_users | 全ユーザを対象 | |
| server_audit_incl_users | 全ユーザを対象 | |
| server_audit_logging | 1 | 監査ログの有効化 |
| server_audit_logs_upload | 1 | <-New CloudWatcg Logsへのアップロードを有効にします |
| aws_default_logs_role | arn:aws:iam::123456789012:role/aurora-audit | <-New 作成したIAM RoleのARN |

Auroraを起動します。起動時に作成したDBクラスタパラメータグループを設定します。
Auroraを起動したら、メニューのクラスターで起動したAuroraクラスタを選択して、IAM ロールの管理をクリックします。

作成したIAM Roleを設定して完了します。

CloudWatch Logsを確認するとロググループが作成されています。ロググループ名は/aws/rds/cluster/<Auroraクラスタ名>/auditとなります。

ログストリームは<Auroraインスタンス名>.audit.log.X.YYYY-MM-DD-HH-MI.0.Xの形式で出力されるようです。

監査ログの監視設定
log2snsのlogs2sns.ymlを使用します。log2snsについては、こちらのエントリーを御覧ください。
今回はログイン失敗を監視したいので、パラメータを以下で設定しました。
| パラメータ | 設定内容 | 備考 |
|---|---|---|
| FilterPattern | /,FAILED_CONNECT,/ | 監視する正規表現 |
| FilterPatternExcluded | /$^/ | 監視を除外する正規表現 |
| MailSubject | Aurora Login Failure | メールのタイトル |
| NotifyTopicName | AuroraAuditNotifyTopic | SNSトピックの名前 |

log2snsのCloudFormationスタックを作成したら、作成したSNSトピックにメール通知を登録します。
通知する
CloudWatch Logsで監査ログのロググループを選択して、Lambda サービスへのストリーミングの開始をクリックします。

log2snsのLambdaを選択します。

ログの形式をその他にします。今回は特にフィルタんリングを設定せずに先に進めます。

内容を確認してストリーミングを開始します。

Auroraのログインを失敗してみます。存在しないユーザFAILUSERでログインを試みますが、ログインに失敗します。
$ mysql -u FAILUSER -p -h mycluster-audit.cluster-a1b2c3d4e5f6.ap-northeast-1.rds.amazonaws.com Enter password: ERROR 1045 (28000): Access denied for user 'FAILUSER'@'172.31.26.6' (using password: NO)
すると、こんなメールが届きます。FAILUSERユーザでFAILED_CONNECTになっていることが分かります。

さいごに
今までは監査ログはaws rds download-db-log-file-portionコマンドで定期的にダウンロードする必要があり、内容の差分も取れないので、監視が難しい状態でした。CloudWatch Logsへ出力できるようになって監視や長期保存が簡単に行えるようになりました。
今後はAurora以外のDBエンジンや、監査ログ以外のログもCloudWatch Logsへ出力できるようになってくれたら、より監視が楽になるのでアップデートを期待しています!







