説明
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 形式を許可する必要はありません。