API Gateway의 Lambda 호출 범위 점검

API Gateway가 Lambda를 호출할 수 있는 범위를 필요한 스테이지, 메서드와 경로로 제한하세요.

설명

API Gateway에 부여한 Lambda 호출 권한의 source_arn이 넓으면 의도하지 않은 스테이지나 메서드에서도 함수를 호출할 수 있습니다. 이 권한은 API Gateway 서비스의 함수 호출을 허용하며, API 클라이언트의 인증이나 인가를 대신하지 않습니다.

잠재적 영향

  • 다른 API 경로가 같은 함수를 호출하도록 연결되면 의도하지 않은 실행이 허용될 수 있습니다.
  • 클라이언트 접근 통제도 부족하면 함수 오남용과 실행 비용 증가로 이어질 수 있습니다.

해결 방법

source_arn을 필요한 API의 스테이지, HTTP 메서드와 리소스 경로로 제한하세요. API 메서드의 인증과 인가도 별도로 구성하고, 승인된 요청은 성공하며 불필요한 경로의 호출은 거부되는지 확인하세요.

예시

Lambda 호출 권한의 발췌입니다. 참조하는 API와 함수는 별도로 구성하세요. 아래 prod, GET, orders는 실제 배포 스테이지와 메서드, 경로로 바꾸세요.

변경 전

hcl
resource "aws_lambda_permission" "example" {
  statement_id  = "AllowAPIGatewayInvoke"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.example.function_name
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.example.execution_arn}/*/*"
}

변경 후

hcl
resource "aws_lambda_permission" "example" {
  statement_id  = "AllowAPIGatewayInvoke"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.example.function_name
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.example.execution_arn}/prod/GET/orders"
}

변경 후에는 prod 스테이지의 GET /orders에 호출 범위를 한정합니다. 이 변경만으로 해당 API에 사용자 인증이 설정되지는 않습니다.

참조