EventBridgeからのログをCloudWatch Logsにて受け取れなかったときに漏れていた設定(リソースポリシー)

EventBridgeからのログをCloudWatch Logsにて受け取れなかったときに漏れていた設定(リソースポリシー)

Clock Icon2025.07.03

こんにちは、ゲームソリューション部の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のログが出力されました。
sr-eventbridge-cloudwatch

最後に

今回は、EventBridgeからのログをCloudWatch Logsにて受け取れなかったときに漏れていた設定について(リソースポリシー)記事にしました。
どなたかの参考になると幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.