API Gateway REST API 인증 구성 점검

보호할 REST API 메서드에 적절한 인증을 연결하고 실제 권한 검사를 확인하세요.

설명

REST API의 보호 대상 메서드에 유효한 인증과 인가가 없다면 의도하지 않은 호출자가 기능을 사용할 수 있습니다. Authorizer 리소스가 없어도 IAM 인증이나 다른 통제가 적용될 수 있으므로 실제 메서드 설정을 확인해야 합니다.

Lambda 또는 Cognito Authorizer를 선언하는 것만으로 메서드가 보호되지는 않습니다. 해당 REST API를 참조하고 메서드의 authorization과 authorizer_id를 맞게 설정해야 합니다.

잠재적 영향

  • 인증 구조 약화: 호출자 검증을 중앙에서 통제하기 어렵습니다.
  • 잘못된 공개 범위: 원래 보호해야 할 API가 느슨하게 열릴 수 있습니다.
  • 운영 일관성 저하: API마다 다른 인증 방식이 섞여 관리가 복잡해집니다.

해결 방법

  • 서비스 목적에 맞는 인증을 선택하세요. Authorizer를 사용한다면 대상 REST API를 참조하는 aws_api_gateway_authorizer를 구성하세요.
  • Lambda Authorizer는 메서드에 CUSTOM, Cognito는 COGNITO_USER_POOLS와 해당 authorizer_id를 설정하세요. 필요한 호출 권한도 구성하세요.
  • Authorizer와 메서드 권한 설정이 함께 동작하는지 배포 전에 검증하세요.

예시

API와 Lambda Authorizer의 연결만 보여 주는 발췌입니다. Lambda, 호출 역할과 메서드 설정은 생략했습니다. 첫 예시에서 참조하는 demo API는 별도 리소스로 가정합니다.

변경 전

hcl
resource "aws_api_gateway_authorizer" "demo" {
  name                   = "demo"
  rest_api_id            = aws_api_gateway_rest_api.demo.id
  authorizer_uri         = aws_lambda_function.authorizer.invoke_arn
  authorizer_credentials = aws_iam_role.invocation_role.arn
}

resource "aws_api_gateway_rest_api" "demo2" {
  name = "auth-demo"
}

변경 후

hcl
resource "aws_api_gateway_authorizer" "demo" {
  name                   = "demo"
  rest_api_id            = aws_api_gateway_rest_api.demo.id
  authorizer_uri         = aws_lambda_function.authorizer.invoke_arn
  authorizer_credentials = aws_iam_role.invocation_role.arn
}

resource "aws_api_gateway_rest_api" "demo" {
  name = "auth-demo"
}

설명:

  • 변경 전: Authorizer는 존재하지만 다른 REST API를 참조하고 있어 대상 API를 보호하지 못합니다.
  • 변경 후: Authorizer가 표시된 REST API를 참조합니다. 메서드에도 인증 유형과 Authorizer를 연결한 뒤 허용·거부 요청을 검증해야 합니다.

참조