Cloudflare Tunnel과 Zero Trust Access 설정하기
(2026-05-20 기준)
로컬 환경이나 내부 네트워크에서 실행 중인 서비스를 외부에서 접근해야 하는 경우가 있습니다.
일반적으로는 공유기에서 포트포워딩을 설정하거나, 서버의 방화벽과 네트워크 설정을 직접 수정해야 합니다.
하지만 Cloudflare Tunnel을 사용하면 포트포워딩 없이 내부 서비스를 외부 도메인에 연결할 수 있습니다.
또한 Cloudflare Access를 함께 사용하면 특정 사용자만 접근할 수 있도록 인증 정책을 적용할 수 있습니다.
이번 글에서는 Cloudflare Tunnel을 생성하고, 로컬 애플리케이션을 연결한 뒤, Zero Trust Access 정책을 적용하는 과정을 정리합니다.
1. Cloudflare Tunnel 생성
먼저 Cloudflare 대시보드에 접속한 뒤 다음 경로로 이동합니다.
네트워크 → 터널 → 터널 생성
터널 생성 화면에서 터널 이름을 입력합니다.
이후 사용 중인 환경에 맞게 cloudflared 프로그램을 설치합니다.
Cloudflare는 운영체제와 실행 환경에 따라 설치 및 실행 명령어를 제공합니다.
대시보드에 표시되는 안내 명령어를 실행하면 cloudflared가 Cloudflare에 연결되고, 터널이 생성됩니다.
터널이 정상적으로 연결되면 Cloudflare 대시보드에서 해당 터널의 상태가 활성화된 것을 확인할 수 있습니다.
2. Tunnel에 연결할 애플리케이션 추가
터널 생성과 연결이 완료되었다면, 이제 어떤 애플리케이션을 외부에 공개할지 설정해야 합니다.
생성한 터널 상세 화면으로 이동한 뒤 다음 경로에서 애플리케이션을 추가합니다.
경로 추가 → 게시된 애플리케이션
여기에서 공개할 도메인을 설정합니다.
필요한 경우 다음 항목도 함께 설정할 수 있습니다.
- 서브도메인
- 경로
- 서비스 URL
이 중 서비스 URL은 Cloudflare Tunnel이 트래픽을 전달할 원본 서비스 주소입니다.
즉, 로컬 환경이나 내부 네트워크에서 접근 가능한 서비스 주소를 입력하면 됩니다.
예를 들어 로컬에서 다음 주소로 애플리케이션에 접근할 수 있다면,
http://localhost:3000
서비스 URL에도 동일하게 입력할 수 있습니다.
설정을 완료하면 Cloudflare가 해당 도메인으로 들어온 요청을 Tunnel을 통해 로컬 서비스로 전달합니다.
3. DNS 연결 확인
애플리케이션 설정을 완료한 뒤 Cloudflare의 DNS 레코드 화면으로 이동합니다.
Cloudflare Tunnel을 통해 연결된 도메인은 일반적인 IP 주소 기반 레코드가 아니라, Tunnel과 연결된 레코드 형태로 생성됩니다.
DNS 레코드가 정상적으로 생성되었다면, 설정한 도메인으로 접속했을 때 내부 서비스로 요청이 전달됩니다.
이 단계에서 정상 접속이 되지 않는다면 다음 항목을 확인해볼 수 있습니다.
- cloudflared가 정상 실행 중인지
- Tunnel 상태가 정상인지
- 서비스 URL이 로컬에서 실제로 접근 가능한 주소인지
- 도메인 또는 서브도메인 설정이 올바른지
- Cloudflare DNS 레코드가 정상적으로 생성되었는지
4. Cloudflare Access 설정
Tunnel만 설정하면 도메인을 아는 사용자는 서비스에 접근할 수 있습니다.
특정 사용자만 접근할 수 있도록 제한하려면 Cloudflare Zero Trust의 Access 기능을 사용해야 합니다.
Cloudflare 대시보드에서 Zero Trust로 이동합니다.
먼저 로그인 시 사용자에게 표시될 페이지를 설정합니다.
재사용 가능 구성 요소 → 사용자 설정 페이지 → 로그인 페이지에 액세스 → 관리
여기에서 다음 항목을 설정합니다.
- 조직 이름
- 머리글 텍스트
- 메시지
이 설정은 사용자가 Access 인증 화면에 진입했을 때 표시되는 로그인 페이지의 내용을 구성하는 단계입니다.
설정을 완료한 뒤 저장합니다.
5. Zero Trust 애플리케이션 생성
이제 어떤 서비스에 Zero Trust 정책을 적용할지 설정합니다.
다음 경로로 이동합니다.
액세스 제어 → 응용 프로그램 → 새 애플리케이션 만들기 → 자체 호스팅 및 프라이빗
여기에서 보호할 도메인을 입력합니다.
필요한 경우 다음 항목도 함께 입력할 수 있습니다.
- 하위 도메인
- 경로
이 설정은 Cloudflare Access가 어떤 주소에 대해 인증을 요구할지 결정합니다.
예를 들어 app.example.com을 보호 대상으로 설정하면, 사용자가 해당 도메인에 접근할 때 Cloudflare Access 인증 화면이 먼저 표시됩니다.
6. Access 정책 추가
애플리케이션을 생성한 뒤에는 어떤 사용자에게 접근을 허용할지 정책을 설정해야 합니다.
이번 설정에서는 특정 이메일 주소만 접근할 수 있도록 구성했습니다.
다음 경로에서 새 정책을 생성합니다.
Access 정책 → 새 정책 만들기 → 정책 규칙 → 이메일
정책 생성 화면에서 다음 항목을 입력합니다.
- 정책 이름
- 허용할 이메일 주소
- 작업: 허용
정책 규칙에서 이메일을 선택하고, 접근을 허용할 이메일 주소를 입력합니다.
작업은 허용으로 설정합니다.
이렇게 설정하면 지정한 이메일 주소로 인증한 사용자만 해당 애플리케이션에 접근할 수 있습니다.
정책 세션 지속 시간은 애플리케이션 세션 지속 시간과 동일하게 설정했습니다.
기본값은 하루로 보입니다.
설정을 완료한 뒤 정책을 저장합니다.
7. 인증 방식 설정
Cloudflare Access에서는 애플리케이션에 접근할 때 사용할 인증 방식을 선택할 수 있습니다.
쉽게 말해 사용자가 어떤 방식으로 로그인할지 정하는 단계입니다.
Cloudflare Access에서는 다음과 같은 다양한 ID 공급자를 사용할 수 있습니다.
- 이메일 인증
- GitHub
- One-time PIN
기본적으로 One-time PIN이라는 ID 공급자를 사용할 수 있습니다.
이번 설정에서는 별도의 외부 ID 공급자를 추가하지 않고, 기본 제공되는 One-time PIN만 사용했습니다.
사용 가능한 모든 ID 공급자 수락 옵션을 체크하면 현재 설정된 모든 로그인 방법을 사용할 수 있습니다.
이후 애플리케이션 이름과 세션 지속 시간을 설정하고 생성하면 Access 설정이 완료됩니다.
8. ID 공급자 추가
Google, GitHub와 같은 추가 로그인 방식을 사용하고 싶다면 별도로 ID 공급자를 추가할 수 있습니다.
다음 경로로 이동합니다.
통합 → ID 공급자
각 ID 공급자에서 발급받은 앱 ID, 클라이언트 암호 등의 값을 Cloudflare에 등록하면 됩니다.
예를 들어 Google 로그인을 사용하려면 Google Cloud Console에서 OAuth 애플리케이션을 생성한 뒤, 발급받은 클라이언트 ID와 클라이언트 Secret을 Cloudflare에 입력해야 합니다.
GitHub 로그인을 사용하는 경우에도 GitHub에서 OAuth App을 생성하고, 발급받은 값을 Cloudflare에 등록해야 합니다.
정리
Cloudflare Tunnel을 사용하면 포트포워딩 없이 내부 서비스를 외부 도메인에 연결할 수 있습니다.
여기에 Cloudflare Access를 함께 적용하면 특정 사용자만 서비스에 접근하도록 제한할 수 있습니다.
이번 설정에서는 다음 과정을 진행했습니다.
- Cloudflare Tunnel 생성
- cloudflared 설치 및 터널 연결
- Tunnel에 게시할 애플리케이션 추가
- DNS 연결 확인
- Cloudflare Zero Trust Access 설정
- 이메일 기반 접근 정책 추가
- One-time PIN 인증 방식 사용
간단한 내부 도구나 개인 프로젝트를 외부에서 접근해야 할 때 Cloudflare Tunnel은 편리한 선택지가 될 수 있습니다.
다만 외부에 서비스를 공개하는 설정이므로, Access 정책과 인증 방식을 반드시 함께 검토하는 것이 좋습니다.