설명
IAM 정책에서 lambda:InvokeFunction을 지나치게 넓은 리소스에 허용하면 의도하지 않은 함수까지 호출할 수 있습니다. 함수 이름뿐 아니라 ARN의 리전, 계정과 버전·별칭 범위도 필요한 대상으로 제한해야 합니다.
잠재적 영향
- 승인되지 않은 함수 실행으로 기능이 오용되거나 비용이 증가할 수 있습니다.
- 새 함수나 별칭이 광범위한 패턴에 포함되면서 권한 범위가 의도보다 넓어질 수 있습니다.
해결 방법
실제 호출에 사용하는 함수, 버전 또는 별칭 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 형태를 항상 함께 허용할 필요는 없습니다.