Cloudflare Proxy가 내 Lambda ALB 통신을 조용히 깨뜨린 방법

발행: (2026년 3월 8일 AM 10:10 GMT+9)
8 분 소요
원문: Dev.to

Source: Dev.to

번역할 텍스트를 제공해 주시면 한국어로 번역해 드리겠습니다.

흐름 (수정 전)

flowchart LR
    Browser -->|①| CF1[Cloudflare Edge (api.hoge.com)]
    CF1 -->|②| Lambda
    Lambda -->|③ backend.hoge.com = Cloudflare IP| CF2[Cloudflare Edge (backend.hoge.com)]
    CF2 -->|❌ Error 1000| ALB

빠른 해결책

backend.hoge.com에 대해 Proxy OFF로 설정합니다.
장기 계획: Lambda → ALB 통신을 VPC 내부로 이동합니다.

오류

프론트엔드에서 API를 호출했을 때 403 Forbidden와 함께 다음과 같은 본문이 반환되었습니다:

Cloudflare Error 1000
DNS points to prohibited IP

API Gateway와 Lambda는 정상으로 보였으며, ECS 측에서는 로그가 없었으므로 ALB/WAF가 원인이 아니었습니다.

아키텍처

flowchart LR
    Browser -->|HTTPS| APIGW[API Gateway]
    APIGW --> Lambda
    Lambda -->|HTTPS backend.hoge.com| ALB
    ALB --> ECS
    ECS --> RDS

Lambda는 BFF(Backend‑for‑Frontend) 역할을 합니다. 백엔드는 ALB + ECS(레거시 제약)에서 실행됩니다. Lambda는 backend.hoge.com 도메인을 사용해 HTTPS로 ALB에 호출합니다.

문제 해결 단계

  1. 초기 의심 대상 – WAF 규칙, 보안‑그룹 제한, ECS 인증 로직, API‑Gateway 인증자.

  2. ECS 로그 없음 – 요청이 ALB에 도달하지 않았음을 나타냄.

  3. curl 테스트

    curl -v https://backend.hoge.com

    응답 헤더에 포함된 내용:

    server: cloudflare

    본문에 DNS points to prohibited IP가 포함되어 있어, Cloudflare 자체가 403을 반환하고 있음을 확인함.

  4. 문서 확인 – Cloudflare 오류 1000은 A 레코드가 Cloudflare 소유 IP를 가리키거나, 요청이 다른 역방향 프록시를 통해 라우팅되어 다시 Cloudflare에 도달할 때 발생합니다.

Source:

근본 원인

Cloudflare DNS 설정:

레코드프록시
api.hoge.comON
backend.hoge.comON
  • api.hoge.com의 프록시가 ON 상태였기 때문에, 브라우저 트래픽은 이미 Lambda에 도달하기 전에 Cloudflare Edge를 통과했습니다.
  • Lambda가 backend.hoge.com(프록시 ON)에 요청을 보냈을 때, 해당 도메인은 Cloudflare Anycast IP로 해석되어 요청이 다시 Cloudflare Edge로 들어가 루프가 발생했습니다.

루프 다이어그램

flowchart LR
    Browser -->|①| CF1[Cloudflare Edge (api.hoge.com)]
    CF1 -->|②| Lambda
    Lambda -->|③ backend.hoge.com = Cloudflare IP| CF2[Cloudflare Edge (backend.hoge.com)]
    CF2 -->|❌ Error 1000| ALB
    ALB --> ECS
    ECS --> RDS

왜 Error 1000인가?

Cloudflare는 루프가 감지되었거나 해석된 오리진 IP가 다음 중 하나에 해당할 때 Error 1000을 반환합니다:

  • Cloudflare 소유 IP 대역 (루프 방지)
  • RFC 1918 사설 주소 (10.x.x.x, 172.16.x.x, 192.168.x.x)
  • 루프백 주소 (127.0.0.1)

우리 경우 backend.hoge.com이 Cloudflare IP로 해석되었기 때문에, Cloudflare는 해당 요청을 자신에게 향한 것으로 판단하고 차단했습니다.

Fix #1 – 빠른 해결

backend.hoge.com에 대한 Proxy OFF를 설정합니다.

레코드Proxy
backend.hoge.comOFF

이제 DNS는 Cloudflare IP 대신 실제 원본 CNAME(ALB 도메인)을 반환하여 루프가 끊어집니다.

수정 후 흐름

flowchart LR
    Lambda -->|backend.hoge.com = ALB domain| ALB
    ALB --> ECS
    ECS --> RDS

요청이 다시 정상적으로 흐릅니다.

배운 점

Cloudflare는 DNS 그 이상이다

권한 있는 DNS, 리버스‑프록시, CDN, 그리고 WAF를 결합합니다. Proxy ON일 때 모든 트래픽은 원본에 도달하기 전에 Cloudflare Edge를 통해 라우팅됩니다.

  • 브라우저 트래픽에 적합 (DDoS 방어, 캐싱, WAF).
  • 원본이 Cloudflare 뒤에 있을 경우 서버‑간 통신에 문제가 발생할 수 있음.

Proxy ON과 OFF가 전체 트래픽 경로를 변경한다

flowchart LR
    subgraph Proxy_OFF
        C1[Client] -->|ALB domain| ALB1[ALB]
    end
    subgraph Proxy_ON
        C2[Client] --> CF[Cloudflare Edge] --> ALB2[ALB]
    end

사용 사례에 맞게 Proxy 설정 맞추기

사용 사례프록시
브라우저 → APION (CDN + WAF 이점)
서버 → 서버 (내부)OFF (루프 방지)

핵심 요약: 자체 인프라에서 호출될 모든 도메인에 대해 Cloudflare 프록시 설정을 항상 확인하세요. 간단한 “Proxy ON” 설정이 의도치 않게 요청 루프를 만들고 Cloudflare 오류 1000으로 나타날 수 있습니다.

빠른 해결책 (임시)

서버가 Proxy ON 도메인을 호출하고, 호출하는 서비스 자체가 Cloudflare 뒤에 있는 경우, Error 1000을 유발하는 루프가 발생할 위험이 있습니다.

Source:

장기적인 해결 방안

공용 DNS 이름을 통해 Lambda → ALB 트래픽을 라우팅하는 것은 작동하지만 이상적이지 않습니다.
이 통신을 VPC 내부로 이동하는 것이 올바른 해결책입니다.

flowchart LR
    Browser -->|HTTPS| APIGW[API Gateway]
    APIGW --> Lambda
    subgraph VPC
        Lambda -->|VPC‑internal| ALB
        ALB --> ECS
        ECS --> RDS
    end

이 마이그레이션을 진행할 때 유의할 점

  • Lambda는 VPC 내부에 배포되어야 합니다 (아직 배포되지 않았다면).
  • VPC 배치에 따른 콜드 스타트 영향은 현재 최소 수준이며, AWS가 크게 개선했습니다.
  • 보안 그룹Lambda → ALB 트래픽을 허용하는 명시적인 규칙이 필요합니다.

이 접근 방식은 내부 트래픽에 대한 Cloudflare 의존성을 없애고, 지연 시간을 줄이며, 네트워크 토폴로지를 단순화합니다.

왜 갑자기 깨졌나요?

Proxy ON 설정은 오랫동안 안정적이었는데, 왜 이제야 실패가 발생했을까요?

  • 변경 로그에서 Error 1000 감지 또는 프록시 동작에 대한 Cloudflare 공식 발표를 찾을 수 없었습니다.
  • “Error 1000이 갑자기 나타남”이라는 커뮤니티 보고는 보통 사용자 측 설정 변경(예: DNS 레코드 업데이트, 호스팅 측 IP 변경)으로 거슬러 올라갑니다.
  • 최근 실패를 설명할 수 있는 항목이 있는지 Cloudflare 감사 로그를 아직 검토 중입니다. 더 자세한 내용을 발견하면 이 글을 업데이트하겠습니다.

요약

  • 요청이 Proxy ON 도메인을 통과하고 그 요청이 이후에 또 다른 Proxy ON 도메인을 호출하면, Cloudflare가 루프를 생성하여 Error 1000이 발생합니다.
  • 서버‑간 통신의 경우, 내부 도메인에 대해 Proxy OFF 로 전환하거나 트래픽을 VPC 내부에만 유지하십시오.
0 조회
Back to Blog

관련 글

더 보기 »