Amazon ES ドメインのログを Cloudwatch Logs に吐く
基本的には、以下のドキュメントの通りに常識的に設定すれば OK
https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-createdomain-configure-slow-logs.html
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/elasticsearch_domain
Terraform で吐き先の CloudWatch ロググループを作りつつ、aws_elasticsearch_domain の log_publishing_options を適当に設定する。
ただしこのままでは、このロググループにログを送れる権限を誰にもつけていないため、許可を与える必要がある。ここでミソなのは、Amazon ES ドメインに許可を与えるのではなく、CloudWatch Logs サービスそのものに与える必要がある、という点。これはリソースベースのポリシで制御する。ドキュメント
たとえば以下のように設定すると、Amazon ES のサービス全体から特定のロググループにログを送信できるようになる。Principal に es.amazonaws.com を指定しているため。クロスアカウントでのアクセス制御にも使えそう。
code:json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "es.amazonaws.com"
},
"Action": [
"logs:PutLogEvents",
"logs:PutLogEventsBatch",
"logs:CreateLogStream"
],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:log-group:/aws/aes/domains/suteki-na-domain/application-logs:*"
}
]
}
権限まわりの設定で「?」となったので、ここにメモしておいた。
#AWS