ワイルドカード principal を使用する Lambda 呼び出し権限

Lambda の呼び出し権限には必要なサービスやアカウントを明示し、ソース条件も限定してください。

説明

aws_lambda_permission の principal = "*" は、プリンシパル自体では呼び出し元を限定しません。実際の許可には source_arn などの条件も適用されるため、ワイルドカードだけで誰でも関数を呼び出せるとは判断できません。

想定される影響

  • 他の条件による制限も不十分な場合、意図しない呼び出し元が関数を実行できます。
  • 呼び出しの繰り返しで費用が増えたり、関数の提供する機能が悪用されたりする可能性があります。

対処方法

principal に必要なサービスやアカウントだけを指定してください。サービスからの呼び出しでは source_arn と適用可能なソースアカウント条件を限定し、意図したイベントだけが関数を実行できることを確認してください。

例

関数とエイリアスを別途構成する呼び出し権限の抜粋です。EventBridge ルールの ARN は、実際のアカウント、リージョン、ルールに置き換えてください。

変更前

hcl
resource "aws_lambda_permission" "example" {
  statement_id  = "AllowExecutionFromCloudWatch"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.test_lambda.function_name
  principal     = "*"
  source_arn    = "arn:aws:events:eu-west-1:111122223333:rule/RunDaily"
  qualifier     = aws_lambda_alias.test_alias.name
}

変更後

hcl
resource "aws_lambda_permission" "example" {
  statement_id  = "AllowExecutionFromCloudWatch"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.test_lambda.function_name
  principal     = "events.amazonaws.com"
  source_arn    = "arn:aws:events:eu-west-1:111122223333:rule/RunDaily"
  qualifier     = aws_lambda_alias.test_alias.name
}

変更前にも特定のルールを指す source_arn 条件があります。変更後はその条件を維持し、プリンシパルを EventBridge サービスに限定します。

参考資料