API Gateway 백엔드 클라이언트 인증서 설정 점검

HTTPS 백엔드가 API Gateway를 클라이언트 인증서로 검증하는 경우 스테이지와 백엔드를 함께 구성하세요.

설명

API Gateway 스테이지의 client_certificate_id는 API Gateway가 HTTPS 백엔드에 제시할 클라이언트 인증서를 지정합니다. 백엔드는 이 인증서를 검증해 신뢰하는 API Gateway 요청만 허용할 수 있습니다.

모든 스테이지에 이 방식이 필요한 것은 아닙니다. 백엔드가 다른 적절한 인증 방식을 사용하는지 확인하고, 클라이언트 인증서에 의존하는 경우 스테이지와 백엔드를 함께 구성하세요. API 호출자와 Gateway 사이의 TLS 설정과는 구분해야 합니다.

잠재적 영향

  • 백엔드가 요구하는 인증서를 제시하지 못하면 정상 요청이 실패할 수 있습니다.
  • 백엔드가 인증서를 검증하지 않고 다른 접근 통제도 부족하면 Gateway를 거치지 않는 요청을 허용할 수 있습니다.

해결 방법

  • 이 인증 방식이 필요한 경우 API Gateway에서 인증서를 생성하고 해당 ID를 client_certificate_id에 설정하세요.
  • HTTPS 백엔드에 유효한 서버 인증서를 구성하고, 신뢰할 Gateway 클라이언트 인증서를 검증해 다른 연결을 거부하도록 설정하세요.
  • 정상 연동과 승인되지 않은 연결의 거부를 시험하고 인증서 만료 전에 교체하세요. 교체 시 백엔드의 신뢰 설정도 함께 갱신해야 합니다.

예시

스테이지 설정만 비교하는 발췌입니다. REST API, 배포, HTTPS 연동과 백엔드 인증서 검증은 별도로 구성해야 합니다.

변경 전

hcl
resource "aws_api_gateway_stage" "example" {
  stage_name    = "prod"
  rest_api_id   = aws_api_gateway_rest_api.test.id
  deployment_id = aws_api_gateway_deployment.test.id
}

스테이지에 이 클라이언트 인증서를 지정하지 않았습니다. 백엔드가 해당 인증 방식을 요구하는지 확인해야 합니다.

변경 후

hcl
resource "aws_api_gateway_stage" "example" {
  stage_name            = "prod"
  rest_api_id           = aws_api_gateway_rest_api.test.id
  deployment_id         = aws_api_gateway_deployment.test.id
  client_certificate_id = var.api_gateway_client_certificate_id
}

api_gateway_client_certificate_id에는 실제 생성한 인증서의 ID를 전달하세요. 이 설정만으로 백엔드가 인증서를 신뢰하거나 검증하도록 구성되지는 않습니다.

참조