Lambda InvokeFunction の IAM リソース範囲の確認

Lambda の呼び出し権限は、必要な関数、バージョン、エイリアスの ARN に限定してください。

説明

IAM ポリシーで lambda:InvokeFunction を広すぎるリソースに許可すると、意図しない関数まで呼び出せます。関数名だけでなく、ARN のリージョン、アカウント、バージョンやエイリアスも必要な対象に限定する必要があります。

想定される影響

  • 未承認の関数実行により、機能の不正利用や費用の増加につながる可能性があります。
  • 新しい関数やエイリアスが広いパターンに含まれ、意図せずアクセス範囲が増える可能性があります。

対処方法

実際の呼び出しに使用する関数、バージョン、エイリアスの ARN だけを許可してください。リージョンとアカウントを明示し、修飾なしと修飾付きの ARN を習慣的に両方追加しないでください。必要な呼び出しと拒否すべき呼び出しをテストしてください。

例

IAM ポリシーの抜粋です。ポリシーを使用する主体と他の適用可能な権限は別途確認し、例のリージョンとアカウントを実際の値に置き換えてください。

変更前

hcl
resource "aws_iam_policy" "example" {
  name = "policy"

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "lambda:InvokeFunction",
        ]
        Effect   = "Allow"
        Resource = [
          "arn:aws:lambda:us-east-1:123456789012:function:*:*"
        ]
      },
    ]
  })
}

変更後

hcl
resource "aws_iam_policy" "example" {
  name = "policy"

  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = [
          "lambda:InvokeFunction",
        ]
        Effect   = "Allow"
        Resource = [
          "arn:aws:lambda:us-east-1:123456789012:function:approved-function",
          "arn:aws:lambda:us-east-1:123456789012:function:approved-function:*"
        ]
      },
    ]
  })
}

変更後は関数名を approved-function に絞りますが、全バージョン・エイリアスを許可する :* は残ります。実際には必要な正確な ARN に限定してください。常に両方の ARN 形式を許可する必要はありません。

参考資料