前書き
- そういう要件、あると思います
“監査ログ” is 何
ログオンしているユーザーや、データベースに対しての実行クエリなどが出力されるログ。セキュリティ要件の高い案件などはサイバー攻撃を食らった時に証跡が要りますよね。(データ抜かれたとか大丈夫だったかとか)そうしたデータベースアクティビティを記録しておくためのログです。
いざ有効化
例えば以下のようなrdsの定義があるとしましょう。
rds.tf
resource "aws_db_instance" "default" {
allocated_storage = 10
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t3.micro"
name = "mydb"
username = "foo"
password = "foobarbaz"
parameter_group_name = "default.mysql5.7"
skip_final_snapshot = true
enabled_cloudwatch_logs_exports = ["error", "general", "slowquery"]
}
enabled_cloudwatch_logs_exports
にaudit
を追加してやります。
(ちなみに上記の設定では、error、general、slowqueryのクエリログ がCloud Watchにエクスポートされるという設定になっています。)
resource "aws_db_instance" "default" {
allocated_storage = 10
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t3.micro"
name = "mydb"
username = "foo"
password = "foobarbaz"
parameter_group_name = "default.mysql5.7"
skip_final_snapshot = true
enabled_cloudwatch_logs_exports = ["error", "general", "slowquery", "audit"] // ここに追加
}
これで監査ログが取れるようになったぜ...。
ちょっとまちーな。
実はまだやることがあるんです。(そうなんです、自分もこれやらかしてログ取れてなかった経験があります。)
監査プラグインを有効にしてください。
公式にもちゃんと書いてありました。。。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/advanced-audit-rds-mysql-cloudwatch/
RDSではMariaDBの監査プラグインをサポートしているので、これを使います。
対応しているMySQLのverは要確認です。
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.MySQL.Options.AuditPlugin.html
下記のオプショングループのリソース定義があったとして、
rds.tf
resource "aws_db_option_group" "example" {
name = "option-group-test-terraform"
option_group_description = "Terraform Option Group"
engine_name = "sqlserver-ee"
major_engine_version = "11.00"
option {
option_name = "Timezone"
option_settings {
name = "TIME_ZONE"
value = "UTC"
}
}
option {
option_name = "SQLSERVER_BACKUP_RESTORE"
option_settings {
name = "IAM_ROLE_ARN"
value = aws_iam_role.example.arn
}
}
option {
option_name = "TDE"
}
}
以下のように MARIADB_AUDIT_PLUGIN
を入れてやります。
resource "aws_db_option_group" "example" {
name = "option-group-test-terraform"
option_group_description = "Terraform Option Group"
engine_name = "sqlserver-ee"
major_engine_version = "11.00"
option {
option_name = "Timezone"
option_settings {
name = "TIME_ZONE"
value = "UTC"
}
}
option {
option_name = "SQLSERVER_BACKUP_RESTORE"
option_settings {
name = "IAM_ROLE_ARN"
value = aws_iam_role.example.arn
}
}
option {
option_name = "TDE"
}
// 追加
option {
option_name = "MARIADB_AUDIT_PLUGIN"
}
}
これで、晴れてCloud Watchに監査ログが流れるようになりました。
デフォルトでは、/aws/rds/instance/{rdsの識別子}/audit
で保存期限は失効しない形で作成されるようでした。