Lambda InvokeFunction IAM 권한 범위 점검

Lambda 호출 권한은 필요한 함수와 버전 또는 별칭의 ARN으로 제한하세요.

설명

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 형태를 항상 함께 허용할 필요는 없습니다.

참조