와일드카드 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 서비스로 한정합니다.

참조