EventBridgeからのログをCloudWatch Logsにて受け取れなかったときに漏れていた設定(リソースポリシー)
こんにちは、ゲームソリューション部のsoraです。
今回は、EventBridgeからのログをCloudWatch Logsにて受け取れなかったときに漏れていた設定について(リソースポリシー)書いていきます。
※タイトルで結論がわかるようにあえてネタバレしています。
事象
Terraformにて以下のようにCloudWatch Logsのロググループを作成して、EventBridgeのターゲットとして指定していました。
# CloudWatch Logs ロググループ
resource "aws_cloudwatch_log_group" "eventbridge_logs" {
name = "/aws/eventbridge/inspector-automation"
retention_in_days = 7
tags = {
Name = "EventBridge-Inspector-Logs"
}
}
しかし、EventBridgeが呼び出されるような処理が発生しても、ターゲットとしているCloudWatch Logsにログが出力されませんでした。
IAM周りの権限不足を疑ったものの、そもそもEventBridgeのターゲットをCloudWatch Logsに指定したときに、ロールの指定はありません。
原因
CloudWatch Logsにてリソースポリシーを確認すると何も設定されていませんでした。(これがデフォルト)
$ aws logs describe-resource-policies | jq '.resourcePolicies[] | select(.policyDocument | contains("/aws/eventbridge/inspector-automation"))'
# ⇒何も表示されない
EventBridgeでは、EC2やLambdaのように権限を付与するものではないため、リソースポリシー側で許可する必要があります。
今までTerraformを使ってロググループを作成したりしていてこの件に引っかからなかったのは、ログ出力元にIAMロールなどで権限付与可能なリソースを使うことが多かったためだと思います。
例えば、EC2インスタンスからCloudWatch Logsにログを出力する場合、CloudWatch Logsに出力可能な権限を付与したインスタンスプロファイルを作成・設定することで出力できていたからです。
改善策
Terraformにて以下のようにCloudWatch Logsのリソースポリシーを明示的に記載して、EventBridgeからのログを許可します。
# CloudWatch Logs ロググループ
resource "aws_cloudwatch_log_group" "eventbridge_logs" {
name = "/aws/eventbridge/inspector-automation"
retention_in_days = 7
tags = {
Name = "EventBridge-Inspector-Logs"
}
}
# ★リソースポリシーの設定を追加
resource "aws_cloudwatch_log_resource_policy" "eventbridge_logs_policy" {
policy_name = "EventBridgeLogsPolicy"
policy_document = templatefile("${path.module}/policies/cloudwatch-logs-resource-policy.json", {
log_group_arn = aws_cloudwatch_log_group.eventbridge_logs.arn
})
}
外部ファイルで記載しているポリシーは以下です。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EventBridgeLogsPolicy",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "${log_group_arn}:*"
}
]
}
こうすることで、EventBridgeのログが出力されました。
最後に
今回は、EventBridgeからのログをCloudWatch Logsにて受け取れなかったときに漏れていた設定について(リソースポリシー)記事にしました。
どなたかの参考になると幸いです。