📝

Lambdaトリガーのコンソール表示の制限事項

2022/08/09に公開

このページについて

Lambdaのトリガーのコンソール表示について確認した際、Lambdaコンソールの制限事項があったためメモしておきます。

先に結論

Lambdaのコンソール画面でのトリガー情報は、 リソースベースのポリシー情報 を元にトリガーを表示しています。
Lambdaのリソースベースのポリシーで ワイルドカードを使用してロググループを記述している場合、対象を一意に把握することができないためトリガーが正しく表示されません。

と言っても、どこの設定かよくわからないかもしれませんので、設定の流れも書いておきます。

CloudWatch Logs → Lambdaの設定

CloudWatch Logsのサブスクリプションフィルターを使って、Lambdaを呼び出す設定を入れます。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/Subscriptions.html

  • 対象のロググループのサブスクリプションフィルターからLambdaサブスクリプションフィルターを作成します。

  • 対象のLambdaを選択して、トリガーしたいログのパターンを設定します。

ちなみに、Lambdaトリガー側から設定を入れていくことも可能です。(どちらかの設定だけでOK)

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-services.html

CloudWatch Logsコンソールでの表示

Lambdaコンソールでの表示

Lambdaのリソースベースのポリシー

"AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:is55-test-log:*" で対象のロググループに絞られています。

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "InvokePermissionsForCWL11cf57e282abebcbc5c3a7c21794fa8b",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXX:function:is55-function",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "XXXXXXXXXX"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:is55-test-log:*"
        }
      }
    }
  ]
}

Lambdaトリガーの表示がされない場合

CloudWatch Logsサブスクリプションフィルターの設定自体は正しく設定できていても、コンソールの表示がLambdaとCloudWatch Logsで違いがあるケースがありました。

CloudWatch Logsコンソールでの表示

先ほどと変わらず。

Lambdaコンソールでの表示

しかし、Lambdaのトリガー設定には表示されていません。

Lambdaのリソースベースのポリシー

この時のポリシーは以下のように、 ロググループを特定せずワイルドカード指定 となっていました。
"AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:*"

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "InvokePermissionsForCWL11cf57e282abebcbc5c3a7c21794fa8b",
      "Effect": "Allow",
      "Principal": {
        "Service": "logs.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:ap-northeast-1:XXXXXXXXXX:function:is55-function",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "XXXXXXXXXX"
        },
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:logs:ap-northeast-1:XXXXXXXXXX:log-group:*"
        }
      }
    }
  ]
}

結論(再掲)

Lambdaのコンソール画面でのトリガー情報は、 リソースベースのポリシー情報 を元にトリガーを表示しています。
Lambdaのリソースベースのポリシーで ワイルドカードを使用してロググループを記述している場合、対象を一意に把握することができないためトリガーが正しく表示されません。

対策

単純に、ワイルドカードを使わずにロググループ名全体を記述することで、Lambdaコンソールでトリガーを正しく表示させることが可能となります。

しかし、Lambda関数が多くのロググループによって呼び出される場合、ポリシーに各ロググループのためのステートメントを記述されると、ポリシーのサイズが増加し、ポリシーサイズの上限に抵触する可能性があります。

https://zenn.dev/isseeeeey55/articles/ac8c5dd75bcca6

その懸念がある場合、ポリシーではそのままワイルドカード使い複数のロググループをまとめて許可し、実際にトリガーとなっているロググループの情報はCloudWatch Logsコンソール側で確認することになります。

GitHubで編集を提案
アイレット株式会社

Discussion