API 보안 게이트웨이 도입 2026, 인증·요율 제한·로그 운영 기준

API 보안 게이트웨이 도입은 게이트웨이 제품 하나를 사는 문제가 아니라 공개 엔드포인트, 파트너 호출, 내부 서비스 호출을 어떤 경계에서 끊을지 정하는 보안 설계다.
검색자가 이 키워드를 찾는 순간은 보통 API 호출이 늘었거나, 파트너 연동이 열렸거나, 인증 로직이 서비스마다 흩어져 사고 대응이 어려워진 때다.
먼저 볼 것은 제품명보다 인증 책임, 요율 제한 책임, 로그 보존 책임, 백엔드 비공개화 가능성, 그리고 호출량이 늘 때의 공식 과금 구조다.
- 외부 공개 API는 HTTPS, 토큰 검증, 객체 단위 권한 확인, 호출량 제한, 감사 로그가 한 묶음으로 설계돼야 한다.
- 게이트웨이는 인증과 트래픽 제어를 중앙화하지만, 주문 ID나 테넌트 ID 같은 객체 권한은 백엔드가 다시 확인해야 한다.
- Google Cloud API Gateway는 월 0~2백만 호출 0달러, 2백만~10억 호출 구간 100만 호출당 3달러, 10억 초과 100만 호출당 1.5달러를 공식 가격표에 둔다.
- AWS API Gateway는 HTTP API와 REST API의 호출 단가, 데이터 전송, 캐시, PrivateLink 같은 부가 항목이 갈라지므로 PoC 호출량으로만 연간 예산을 잡으면 빗나간다.
이 글이 필요한 사람
- 모바일 앱, 파트너사, 외부 SaaS가 같은 백엔드 API를 호출해 인증 정책이 흩어진 플랫폼 팀
- API 키 유출, 과다 호출, 크리덴셜 스터핑, 테넌트 경계 오류를 로그로 추적해야 하는 보안팀
- Google Cloud API Gateway나 Amazon API Gateway를 검토하지만 공식 과금 항목과 운영 책임을 분리하지 못한 구매 담당자
- WAF만으로 API 권한 문제까지 해결된다고 착각해 출시 게이트가 느슨해진 서비스 오너
도입 전 30초 판단표
| 상황 | 게이트웨이 도입 판단 | 먼저 확인할 증거 | 보류 조건 |
|---|---|---|---|
| 파트너 API가 외부에 열림 | 도입 검토 | 파트너별 키, 토큰 issuer, 호출량 한도, 429 응답 정책 | 파트너 식별자 없이 공용 키 하나로 호출하는 구조 |
| 마이크로서비스별 인증 코드가 다름 | 중앙 관문 필요 | OpenAPI 명세, 인증 실패 로그, 서비스별 미들웨어 목록 | 객체 권한까지 게이트웨이로만 처리하려는 설계 |
| 모바일 앱 호출량이 급증함 | 요율 제한부터 설계 | 분당 호출량, 피크 시간, 캐시 가능 응답, 데이터 전송량 | 호출량 예측 없이 무료 구간만 보고 출시 |
| 내부 API만 존재함 | 선별 도입 | VPC 경계, PrivateLink, IAM 호출 주체, 감사 로그 요구 | 외부 공개 계획과 규제 요구가 모두 없음 |
이 조건이면 검토 우선순위는 공개 API, 파트너 API, 관리자 기능 API, 비용을 유발하는 고빈도 API 순서가 맞다.
이 경우는 보류해야 한다는 신호도 분명하다.
OpenAPI 명세가 없고 소유 팀도 불명확한 상태에서 게이트웨이부터 붙이면 라우팅 표만 늘고 권한 결함은 그대로 남는다.
API 보안 게이트웨이가 실제로 맡아야 하는 범위
Google Cloud 문서는 API Gateway가 백엔드 서비스 앞에서 일관된 REST API 접근 경로를 제공하고, gcloud 빠른 시작에서 API 키로 비인가 접근을 막는 흐름을 제시한다.
AWS 문서는 REST API 접근 제어 수단으로 리소스 정책, IAM 권한, VPC 엔드포인트 정책, Lambda authorizer, Amazon Cognito, CORS, 클라이언트 인증서, AWS WAF, 사용량 계획을 분리한다.
| 통제 범위 | 게이트웨이에 둘 항목 | 백엔드에 남길 항목 | 감사 질문 |
|---|---|---|---|
| 전송 구간 | HTTPS 강제, 공개 엔드포인트 축소, 백엔드 라우팅 | 서비스 내부 mTLS와 네트워크 정책 | 평문 호출이나 우회 도메인이 남아 있는가 |
| 인증 | API 키, JWT 형식, issuer, audience, 만료 시간 검증 | 사용자 상태, 세션 종료, 고위험 행위 재인증 | 토큰 검증 실패가 로그에 남는가 |
| 권한 | 관리자 경로 차단, 메서드 allowlist, 클라이언트별 route 허용 | 객체 ID와 테넌트 ID의 실제 소유권 확인 | 다른 테넌트 주문 ID를 넣었을 때 403이 나는가 |
| 남용 방지 | rate limit, quota, burst 제한, 429 응답 | 업무 흐름 순서 검증과 재시도 정책 | 봇 호출이 비용을 밀어 올릴 때 알림이 오는가 |
| 관측성 | route, status, latency, consumer hash, config version 기록 | 도메인 이벤트와 결제·정산 상태 기록 | 원본 키와 개인정보가 로그에 남지 않는가 |
게이트웨이는 문 앞의 통제 지점이고, 업무 권한은 여전히 서비스 내부 데이터와 결합해서 판단해야 한다.
OWASP API Security 2023의 Broken Object Level Authorization 항목은 사용자가 넘긴 ID가 데이터 접근 함수에 들어갈 때 객체 단위 권한 확인을 고려하라고 설명한다.
그래서 주문, 계정, 정산, 의료, 교육, 내부 관리자 API는 게이트웨이 통과 뒤에도 서비스가 한 번 더 소유권을 확인해야 한다.
공식 가격표로 보는 과금 항목
비용 표는 벤더 비교의 전부가 아니지만 예산 회의에서는 호출 수, 데이터 전송, 사설 연결, 캐시, 백엔드 실행 비용을 분리해야 한다.
Google Cloud API Gateway 공식 가격표는 월별 결제 계정 기준 API 호출 수와 데이터 전송량을 나눠 제시한다.
여기서의 API pricing은 LLM의 입력 토큰과 출력 토큰 단가가 아니라 gateway request, response, data transfer 단가라는 점을 분리해서 읽어야 한다.
| 공식 출처 | 공개 숫자 | 예산에서 따로 볼 항목 | 실무 해석 |
|---|---|---|---|
| Google Cloud API Gateway pricing | 월 0~2M API calls는 $0.00, 2M~1B는 $3.00 per million, 1B+는 $1.50 per million | API 호출량과 리전 간 데이터 전송 | 무료 구간은 PoC 판단용이고, 파트너 연동이 늘면 호출량 구간을 월별로 다시 잡아야 한다 |
| Google Cloud data transfer pricing | North America·Europe 0~10,240GiB는 $0.105/GiB, Asia Pacific 0~10,240GiB는 $0.12/GiB | 대용량 응답, 파일 다운로드, 리전 간 이동 | 게이트웨이 단가보다 응답 크기가 더 큰 비용 변수가 될 수 있다 |
| AWS API Gateway pricing | 신규 고객 free tier는 REST 1M calls, HTTP 1M calls, WebSocket 1M messages, 750,000 connection minutes per month for up to 12 months | 무료 기간 종료 후 호출 단가와 백엔드 비용 | 무료 구간을 운영 예산으로 착각하면 출시 뒤 비용 차이가 커진다 |
| AWS HTTP API example | 432M requests 예시는 $418.8, 평균 $0.97 per million으로 계산됨 | 분당 호출량, 요청 크기, 데이터 전송 | 대량 호출 API는 REST와 HTTP API 선택이 바로 예산 차이가 된다 |
| AWS REST API example | 5M REST calls는 $17.50, 14.3GB data transfer는 $1.29, 합계 $18.79 예시가 제시됨 | REST 기능 요구와 전송량 | 관리 기능이 필요할수록 단가와 운영 복잡도를 함께 봐야 한다 |
| AWS Private API example | 720 hours × $0.01/AZ/hr = $7.20, 15.7GB × $0.01/GB = $0.16, API charge 포함 합계 $24.86 예시 | PrivateLink, VPC endpoint, AZ 수 | 내부망 보호를 선택하면 API 호출 외 네트워크 항목이 붙는다 |
가격 의사결정은 월 호출 수 하나로 끝나지 않는다.
인증 실패와 429 응답도 호출로 잡히는지, 대용량 응답이 전송량을 밀어 올리는지, 사설 엔드포인트가 시간 단위 요금을 만드는지 같이 봐야 한다.
이 조건이면 PoC에서 최소 7일의 실제 요청 로그를 뽑아 p50, p95, p99 호출량과 응답 크기를 따로 집계하는 편이 안전하다.
실전 도입 순서: 명세, 게이트웨이, 검증, 롤백
도입은 콘솔에서 리소스를 만드는 일보다 명세와 실패 테스트를 먼저 고정하는 일이 더 중요하다.
Google Cloud 빠른 시작은 프로젝트 선택, 결제 활성화, gcloud 설치, 필수 서비스 활성화, API 생성, API config 생성, gateway 배포 순서로 안내한다.
- API 소유 팀과 데이터 등급을 먼저 확정하고, 공개·파트너·내부 엔드포인트를 분리한다.
- OpenAPI 명세에 route, method, backend address, 인증 방식, 응답 코드, 401·403·429 처리 기준을 적는다.
- Google Cloud라면 apigateway.googleapis.com, servicemanagement.googleapis.com, servicecontrol.googleapis.com 같은 필수 서비스를 활성화한다.
- gcloud api-gateway apis create API_ID로 API 리소스를 만들고, api-configs create 단계에서 OpenAPI spec과 backend auth service account를 연결한다.
- AWS라면 리소스 정책, IAM, Lambda authorizer, Cognito, usage plan, API key, AWS WAF 연결 중 어떤 조합을 쓸지 API 유형별로 나눈다.
- 배포 전에는 정상 호출보다 실패 호출을 먼저 테스트하고, 다른 테넌트 ID·만료 토큰·과다 호출·허용되지 않은 HTTP method를 확인한다.
- 운영 전환 시 이전 config ID, DNS 롤백, 백엔드 직접 호출 차단, 로그 대시보드, 알림 기준을 릴리스 체크리스트에 묶는다.
# openapi-gateway.yml
# Google Cloud API Gateway의 OpenAPI 기반 구성 흐름을 참고한 검토용 뼈대다.
# SERVICE_URL, issuer, audience, backend identity는 운영 환경 값으로 치환한다.
openapi: 3.0.4
info:
title: partner-api-gateway
version: 1.0.0
x-google-api-management:
backends:
partner_backend:
address: https://SERVICE_URL
pathTranslation: APPEND_PATH_TO_ADDRESS
protocol: http/1.1
x-google-backend: partner_backend
paths:
/v1/orders/{orderId}:
get:
summary: Read order with tenant boundary check
parameters:
- name: orderId
in: path
required: true
schema:
type: string
security:
- bearerAuth: []
responses:
'200':
description: Authorized order response
'401':
description: Missing or invalid authentication
'403':
description: Tenant or object-level authorization failed
'429':
description: Rate limit exceeded
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
스켈레톤은 바로 붙여 넣는 배포 파일이 아니라 검토용 기준선이다.
공식 문서에서 지원하는 OpenAPI 확장, 서비스 계정 권한, 리전, 백엔드 인증 방식은 조직 환경에 맞춰 다시 확인해야 한다.
인증·권한·요율 제한을 분리해서 설계하기
OWASP REST Security Cheat Sheet는 안전한 REST 서비스가 HTTPS만 제공해야 하며, 비공개 REST 서비스는 각 엔드포인트에서 접근 제어를 수행해야 한다고 설명한다.
같은 자료는 JWT 검증에서 issuer, audience, expiration, not before 같은 claim 확인을 강조하고, API 키만으로 민감하거나 고가치 리소스를 보호하지 말라고 경고한다.
| 통제 항목 | 권장 배치 | 실패 테스트 | 통과 기준 |
|---|---|---|---|
| API 키 | 저위험 파트너 식별과 quota 추적에 사용 | 키 없이 호출, 폐기된 키 호출, 초과 호출 | 401 또는 403, 초과 시 429, 키 원문 로그 없음 |
| JWT | 사용자 문맥과 권한 claim 검증에 사용 | issuer 변경, audience 불일치, exp 만료, alg none | 모두 실패하고 실패 사유가 감사 로그에 남음 |
| 객체 권한 | 백엔드 서비스에서 테넌트·소유권 확인 | 다른 사용자의 orderId 호출 | 게이트웨이 통과 후 백엔드가 403 반환 |
| HTTP method 제한 | 게이트웨이와 백엔드 allowlist 이중 적용 | GET 전용 경로에 PUT·DELETE 호출 | 405 또는 403으로 차단 |
| 요율 제한 | 클라이언트·route·tenant별 한도 분리 | 분당 burst와 장시간 반복 호출 | 429 반환, 알림 생성, 백엔드 CPU 방어 |
이 경우는 게이트웨이만 믿으면 안 된다.
JWT가 유효해도 사용자가 특정 주문이나 정산 건을 볼 권한이 있는지는 백엔드의 데이터 권한 확인이 결정한다.
반대로 모든 검증을 백엔드에만 두면 유출된 키와 과다 호출을 앞단에서 끊지 못해 장애와 청구 리스크가 커진다.
로그·알림·개인정보 처리 기준
API 보안 게이트웨이는 사고가 났을 때 어느 소비자, 어느 route, 어느 config 버전에서 문제가 시작됐는지 재현할 수 있어야 한다.
다만 Authorization 헤더, API 키 원문, 주민등록번호, 계좌, 이메일 같은 식별자는 로그에 남기면 보안 통제가 사고 원인이 된다.
- access log에는 route, method, status, latency, client hash, gateway config version, backend status를 남긴다.
- 보안 이벤트에는 인증 실패율, 403 급증, 429 급증, 특정 tenant의 비정상 호출량, deprecated route 호출을 분리한다.
- 비용 알림은 정상 트래픽 증가와 공격성 트래픽 증가를 구분하도록 2단계 임계값을 둔다.
- 개인정보와 키 원문은 저장하지 않고, 필요한 경우 해시·마스킹·토큰화 후 보존 기간을 별도로 둔다.
- 운영 대시보드는 보안팀만 보는 화면과 서비스 오너가 보는 장애 화면을 나눈다.
CISA CPG는 조직이 위험을 줄이는 기본 보안 관행을 우선순위로 잡도록 돕는 기준선으로 볼 수 있다.
NIST CSF의 Govern, Identify, Protect, Detect, Respond, Recover 흐름에 맞추면 게이트웨이 운영도 구매 항목이 아니라 통제 수명주기로 관리된다.
실무 시나리오 1: 파트너 주문 API를 여는 경우
실무 시나리오 1은 커머스 회사가 파트너에게 주문 조회 API를 여는 상황이다.
이 조건이면 파트너별 API 키만으로는 부족하고, JWT issuer와 audience 검증, 파트너별 route allowlist, tenant ID와 주문 ID의 백엔드 소유권 확인을 같이 둬야 한다.
파트너가 분당 한도를 초과하면 429를 반환하고, 영업 담당자에게는 장애가 아니라 계약 한도 초과 알림으로 보이게 만들어야 한다.
보류 기준은 명확하다.
파트너가 공용 키를 공유하고 있고, 주문 ID가 순차 증가하며, 백엔드 직접 호출 도메인이 살아 있다면 게이트웨이 오픈보다 키 재발급과 도메인 차단이 먼저다.
실무 시나리오 2: 사내 관리자 API를 통합하는 경우
실무 시나리오 2는 사내 관리자 도구가 여러 백엔드를 직접 호출하던 구조를 게이트웨이로 모으는 경우다.
이 경우는 SSO, MFA, 관리자 기능별 권한, 감사 로그, 승인 흐름을 IAM과 함께 설계해야 한다.
게이트웨이는 관리자 route와 method를 제한하고, 백엔드는 실제 기능 권한과 데이터 범위를 다시 확인해야 한다.
운영팀은 배포 직후 24시간 동안 401, 403, 429, 5xx를 따로 보며 권한 누락과 과도한 차단을 분리해야 한다.
검토용 정책·점검 스켈레톤
아래 템플릿은 구매 요청서와 보안 검토 회의에서 같은 질문을 반복하기 위한 기준선이다.
# api-gateway-security-review.yml
# 목적: API 보안 게이트웨이 도입 전 인증, 호출량, 백엔드 노출, 로그 책임을 한 장으로 검토한다.
# 실제 배포 전에는 Google Cloud, AWS, OWASP, 사내 표준 문서를 다시 확인한다.
api_scope:
owner_team: payments-platform
public_endpoints: 18
partner_endpoints: 7
internal_endpoints: 42
sensitive_data_classes:
- account_identifier
- order_history
- settlement_status
gateway_controls:
transport:
require_https: true
backend_private_access_review: required
authentication:
consumer_api_key: allowed_for_low_risk_only
jwt_required_for_user_context: true
issuer_allowlist: required
audience_check: required
token_expiry_check: required
authorization:
object_level_check_location: backend_service
admin_function_allowlist: required
tenant_id_cross_check: required
abuse_control:
default_rate_limit: 600_requests_per_minute_per_client
burst_limit: documented_per_endpoint
response_for_throttle: 429
logging:
access_log_fields:
- route
- method
- status
- latency_ms
- consumer_id_hash
- gateway_config_version
do_not_log:
- raw_authorization_header
- api_key_value
- personal_identifier
release_gate:
openapi_spec_lint: pass
auth_negative_tests: pass
rate_limit_test: pass
rollback_config_id: previous_active_config
CI에 넣을 점검 스크립트는 실제 벤더 API를 호출하기보다 OpenAPI 명세와 운영 표준의 누락을 잡는 용도로 시작하는 편이 안전하다.
#!/usr/bin/env python3
# api_gateway_preflight.py
# 실제 호출 전 점검용 스켈레톤이다.
# 토큰, 키, 계정 ID를 넣지 말고 CI 변수와 비밀 저장소를 사용한다.
required_routes = ["/v1/orders/{orderId}", "/v1/settlements", "/v1/partners/callback"]
required_controls = ["https", "issuer", "audience", "expiry", "rate_limit", "access_log"]
openapi = load_openapi("openapi-gateway.yml")
missing = []
for route in required_routes:
if route not in openapi.paths:
missing.append(f"missing route: {route}")
for route, methods in openapi.paths.items():
for method, spec in methods.items():
if method.lower() not in {"get", "post", "put", "patch", "delete"}:
continue
controls = collect_controls(spec)
for control in required_controls:
if control not in controls:
missing.append(f"{route} {method}: {control} not documented")
if missing:
raise SystemExit("
".join(missing))
print("preflight passed: gateway controls documented")
이 스크립트는 의도적으로 추상화한 뼈대라서 사내 OpenAPI 파서와 표준 필드 이름에 맞춰 구현해야 한다.
핵심은 배포 파일을 만들기 전에 route, 인증, 요율 제한, 로그 필드가 문서로 남아 있는지 자동으로 막는 것이다.
구매·보안·운영팀이 나눠 볼 체크리스트
| 담당 | 확인 항목 | 증거 | 결정 기준 |
|---|---|---|---|
| 구매 | 월 호출 수와 데이터 전송량 | 최근 7~30일 access log, 피크 추정치 | 무료 구간 제외 후 12개월 예산 산정 |
| 보안 | 인증·권한·키 관리 | issuer allowlist, key rotation, 401·403 테스트 | API 키 단독 보호는 저위험 route로 제한 |
| 플랫폼 | OpenAPI와 배포 롤백 | config ID, 이전 버전, DNS 전환 계획 | 10분 이상 config 전파 지연을 릴리스 계획에 반영 |
| 서비스 오너 | 업무 흐름 권한 | 테넌트 ID, orderId, admin 기능 테스트 | 게이트웨이 통과 뒤 백엔드 403 테스트 통과 |
| 운영 | 로그와 알림 | 429, 5xx, latency, consumer hash 대시보드 | 개인정보·키 원문 로그 0건 |
구매팀은 단가표를 보고, 보안팀은 권한 실패 테스트를 보고, 플랫폼팀은 롤백 가능성을 봐야 한다.
세 팀이 같은 표를 보지 않으면 게이트웨이는 “도입했다”는 상태만 남고 실제 위험은 서비스 코드 안에 계속 숨는다.
자주 묻는 질문
API 보안 게이트웨이 도입과 WAF 도입은 같은 일인가요?
아니다.
WAF는 일반적인 웹 공격과 우회 시도를 줄이는 통제이고, API 보안 게이트웨이는 인증, 권한, route, quota, backend 연결, API별 감사 로그를 더 세밀하게 다룬다.
API 키만 있으면 파트너 API를 열어도 되나요?
저위험 식별과 호출량 추적에는 쓸 수 있지만 민감 데이터와 관리자 기능에는 API 키 단독 보호를 쓰면 안 된다.
요율 제한은 게이트웨이에만 두면 충분한가요?
외부 남용을 앞단에서 끊는 데는 필요하지만 업무 흐름 순서와 객체 권한은 백엔드에서 다시 확인해야 한다.
Google Cloud와 AWS 중 무엇이 더 저렴한가요?
호출 유형, 월 호출 수, 응답 크기, 사설 연결, 백엔드 서비스, 캐시 요구가 달라 단순 비교는 위험하다.
도입 전에 꼭 해야 하는 실패 테스트는 무엇인가요?
만료 토큰, 다른 audience, 다른 테넌트 객체 ID, 허용되지 않은 method, quota 초과, 백엔드 직접 호출을 반드시 실패시켜야 한다.
기존 API Gateway 완전 가이드와 이 글의 차이는 무엇인가요?
이 글은 API Gateway 개념 설명이 아니라 보안 관문 도입 시 공식 가격, 권한 경계, 로그, 롤백, 실패 테스트를 실무 검토표로 묶는 데 초점을 둔다.
출처와 확인일
- Google Cloud — API Gateway documentation (확인일: 2026-07-25)
- Google Cloud — Secure traffic to a service with API Gateway and gcloud (확인일: 2026-07-25)
- Google Cloud — API Gateway pricing (확인일: 2026-07-25)
- AWS Docs — Control and manage access to REST APIs in API Gateway (확인일: 2026-07-25)
- AWS — Amazon API Gateway pricing (확인일: 2026-07-25)
- OWASP — OWASP Top 10 API Security Risks 2023 (확인일: 2026-07-25)
- OWASP — REST Security Cheat Sheet (확인일: 2026-07-25)
- CISA — Cross-Sector Cybersecurity Performance Goals (확인일: 2026-07-25)
- NIST — Cybersecurity Framework (확인일: 2026-07-25)
확인일은 2026-07-25이며, 클라우드 가격표와 보안 기능은 리전, 계정, 계약, 출시 시점에 따라 바뀔 수 있다.
이 글은 일반적인 기술·보안 검토 자료이며, 규제 산업의 최종 보안 설계와 계약 판단은 공식 문서, 내부 보안팀, 법무, 전문가 검토를 기준으로 확정해야 한다.






댓글
댓글 쓰기