(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【AWS】CloudWatch AlarmsにてLambdaが権限不足で実行されないエラー

スポンサーリンク

事象

CloudWatchのActionにて以下のような設定が"Actions enabled"になっているが

Type Description Config
Lambda When ALARM, invoke "xx" Lambda Function -

アラーム発動時にHistoryには以下のような失敗のログが表示される。

Date Type Description
xx Action Failed to execute action arn:aws:lambda:xx:function:xx. Received error: "CloudWatch Alarms is not authorized to perform: lambda:InvokeFunction on the resource because no resource-based policy allows the lambda:InvokeFunction action"
執筆時期情報
  • aws/amazon-cloudwatch-agent:v1.300032.3

原因/解決策

アラームアクションとしてLambdaを実行する場合、Lambdaのリソースポリシーを作成することでCloudWatch サービスプリンシパルによる関数の呼び出しを許可する必要がある。

具体的には実行するLambda側の"Configuration > Permissions"にて"Resource-based policy"から"Add permissions"を押下。

  • action : lambda:InvokeFunction
  • principal : lambda.alarms.cloudwatch.amazonaws.com

を選択して権限を作成する。

GUI上で設定可能

作成後は以下のようにリソースベースポリシー情報が表示され、CloudWatch Alarmsから実行が可能(Successfully executed action)となる。

Principal PrincipalOrgID Conditions Action
lambda.alarms.cloudwatch.amazonaws.com - None lambda:InvokeFunction


以下、補足です。

補足

リソースベースポリシーによって「誰がリソースにアクセスできるのか」「どのようなアクションを実行できるか」が指定できます。
公式ドキュメントを見ると以下のようなAWS CLIの実行が例として記載があるのでprincipalの値を参考にしました。

$ aws lambda add-permission \
--function-name my-function-name \
--statement-id AlarmAction \
--action 'lambda:InvokeFunction' \
--principal lambda.alarms.cloudwatch.amazonaws.com \
--source-account xx \
--source-arn arn:aws:cloudwatch:us-east-1:xx:alarm:alarm-name

ちなみにGUI上でもSource ARNは指定することができ、今回でいうところの特定のアラームに呼び出し元を制限することも可能です。

以上、ご参考ください。