Object Storage에 파일을 올리고 URL을 공개하면 URL 노출 = 파일 접근 허용이라는 심각한 보안 문제가 발생한다.
DB 저장: { path: "https://pub-xxxx.r2.dev/models/building/tileset.json" }
↓
이 URL을 아는 누구나 tileset 전체를 다운로드 가능
지도 타일 데이터는 구조적 취약점이 있다.
tileset.json (진입점) → 내부 참조 b3dm, glb 수천 개 자동 열거 가능
↓
URL 하나만 알면 전체 데이터셋 복제 가능
위협 유형
위협
설명
실제 피해
무단 데이터 복제
tileset.json → 전체 트리 자동 탐색·다운로드
지적재산권 침해, GIS 자산 유출
Hotlinking
타 사이트가 우리 URL 직접 embed해서 사용
R2/S3 Egress 비용 전가
Denial of Wallet
봇의 대량 요청 → 스토리지 Egress 비용 폭증
비용 피해
경쟁사 크롤링
자동화 스크립트로 전체 에셋 수집
비즈니스 피해
무단 서비스 구축
우리 데이터를 그대로 사용한 경쟁 서비스 등장
비즈니스·법적 피해
보안 기술 분류
업계에서 사용되는 보안 기술은 접근 제어와 인증 두 레이어로 나뉜다.
flowchart TD
A[지도 타일 보안 기술] --> B[접근 제어 레이어<br/>누가 요청할 수 있나]
A --> C[인증 레이어<br/>요청자가 권한이 있나]
B --> B1[HTTP Referrer 제한]
B --> B2[CORS 정책]
B --> B3[IP 화이트리스트]
B --> B4[Rate Limiting]
C --> C1[API Key]
C --> C2[JWT Token]
C --> C3[Signed URL<br/>Presigned / HMAC]
C --> C4[OAuth 2.0]
C --> C5[Proxy 서버 패턴]
C --> C6[Zero Trust<br/>Access / Tunnel]
보안 기술별 특성 비교
기술
보안 수준
3D Tiles 적합성
권장 용도
API Key + Proxy
중간~높음
✅ 완전 호환
대부분 서비스의 기본 구성
JWT + Proxy
높음
✅ 완전 호환
사용자 인증 기반 서비스
OAuth 2.0
매우 높음
✅
엔터프라이즈·공공기관
Presigned URL
중간
❌ 부적합
단일 파일 다운로드
HMAC Signed URL
중간
✅ 호환
헤더 설정 불가 환경 (iframe 등)
Referrer 제한
낮음
✅ (보조)
보조 수단
CORS
낮음
✅ (보조)
보조 수단
IP 화이트리스트
낮음~중간
✅
서버 간 통신 전용
Cloudflare Tunnel
매우 높음
✅ (내부 전용)
내부 개발·스테이징 환경
⚠️ 단일 기술만 사용하는 것은 권장하지 않는다. 복수 레이어를 조합하는 **심층 방어(Defense in Depth)**가 업계 표준이다.
주요 서비스별 보안 방식
Cesium ion
Access Token + Allowed URLs + Asset ID 제한 3중 구조를 사용한다.
flowchart TD
A[클라이언트 요청] --> B{Access Token<br/>유효?}
B -->|No| E[401 Unauthorized]
B -->|Yes| C{Allowed URL<br/>도메인 일치?}
C -->|No| E
C -->|Yes| D{Asset ID<br/>접근 권한?}
D -->|No| E
D -->|Yes| F[타일 데이터 제공]
클라이언트 측 OAuth 2.0 PKCE 사용 권장 (OAuth 2.1 RFC 9700에서는 필수이나, Cesium ion은 현재 의무화하지 않음)
네이버지도 API
네이버 클라우드 플랫폼(NCP)은 ncpKeyId + 웹 서비스 URL 등록 방식을 사용한다.
항목
내용
인증 파라미터
ncpKeyId (2025년 3월 20일 신규 ‘Maps’ 상품 출시와 함께 도입). 기존 ‘AI NAVER API’ 상품은 ncpClientId를 사용했으며 2025년 6월 30일까지 마이그레이션 완료 필요
도메인 제한
NCP 콘솔 Application에서 허용 URL 등록
요청 방식
URL 쿼리 파라미터 또는 헤더에 키 포함
제한 정책
2025년 7월 1일부로 구 ‘AI NAVER API’ 상품의 무료 이용량 전면 폐지, 전량 유료 과금 전환. 신규 ‘Maps’ 상품은 대표 계정 기준 Web/Mobile Dynamic Map 월 600만 건 무료 제공
Google Maps Platform
API Key + 사용 제한(Restrictions) 이중 구조를 사용한다.
제한 유형
적용 대상
설정 내용
HTTP Referrer
웹 클라이언트용 키
*.example.com/* 형식으로 도메인 패턴 등록
IP 주소
서버 API용 키
CIDR 형식으로 허용 IP 범위 등록
Android App
안드로이드용 키
SHA-1 인증서 지문 + 패키지명 등록
iOS App
iOS용 키
번들 ID 등록
Maps Tiles API는 2단계 구조를 사용한다.
API Key를 포함한 createSession POST 요청으로 세션 토큰 발급 (유효기간 약 2주)
이후 모든 타일 요청에 세션 토큰 + API Key 모두 필수 (?session=SESSION_TOKEN&key=API_KEY). 세션 토큰은 지도 설정(mapType, language, region 등)을 캡슐화하여 매 요청마다 반복 전송을 방지하는 역할
Mapbox
공개 토큰(pk.)과 비밀 토큰(sk.)을 엄격히 분리한다.
토큰 종류
접두사
사용 위치
특징
Public Token
pk.
클라이언트 (브라우저, 앱)
URL 제한 설정 필수
Secret Token
sk.
서버 전용
생성 시 1회만 표시, 재조회 불가
기타 서비스
서비스
주요 인증 방식
특이 사항
V-World
API Key (URL 쿼리 파라미터)
도메인 등록 + Key 발급 구조
AWS Location Service
AWS IAM + Cognito
API Key를 Android(패키지명 + SHA-1 인증서 지문) / iOS(번들 ID)로 제한 가능
Azure Maps
Microsoft Entra ID (OAuth 2.0) 권장
SAS 토큰, 구독 키 병행 지원(구독 키는 테스트/개발 외 비권장). Private Endpoint로 VNet 내 비공개 연결 가능(현재 Public Preview)
Esri ArcGIS Online
SAML/OIDC SSO, API Key, ArcGIS Login + MFA
에셋별 공유 권한 4단계: 비공개(소유자) → 그룹 → 조직 → 전체 공개
한국 공공기관 보안 방식
V-World (국가공간정보포털)
항목
내용
인증 방식
API Key (URL 쿼리 파라미터)
요청 형식
?key=인증키&domain=사용도메인
신청 절차
회원가입 → 사용 목적·URL 입력 신청 → 보안성 검토 후 승인
도메인 제한
신청 시 등록한 도메인에서만 유효
공개 범위
공개 API (별도 심사 후 비공개 고해상도 데이터 접근 가능)
기타 공공기관
기관
보안 방식
특이 사항
국토정보공사(LX)
API Key + 심사 절차
고정밀 항공사진·정밀도로지도 등 민간 활용 시 공간정보 보안심사 필수
공공데이터포털
API Key (data.go.kr 키 연계)
공공API 표준 방식
국토지리정보원
API Key + 유형별 접근 제어
국가기본도·정사항공영상 등 데이터 유형별 공개 수준 상이
한국 공공기관 보안 규정
규정
시행일
내용
행정안전부 공간정보 보안관리규정 (훈령 제377호)
2025-01-31
공간정보 취급 기관의 보안 관리 기준
국토지리정보원 국가공간정보 보안관리규정 (예규 제199호)
2024-05-01
국가기본도·항공사진 보안 기준
국가공간정보 보안관리 기본지침
상시
국가정보원 지침, 대외비
💡 공공기관 공간정보는 기본적으로 API Key + 도메인 제한 방식이 표준이며, 고정밀·보안 등급 데이터는 신청 심사를 통해 별도 관리한다.
업계 표준 요약
flowchart TD
A[업계 표준 보안 구조] --> B[기본 레이어<br/>모든 서비스 공통]
A --> C[고급 레이어<br/>엔터프라이즈·공공]
B --> B1[API Key 발급·관리]
B --> B2[도메인 제한 등록]
B --> B3[CORS + Referrer 설정]
B --> B4[Rate Limiting]
C --> C1[OAuth 2.0 / JWT]
C --> C2[Scope 최소 권한]
C --> C3[IP 화이트리스트<br/>서버 API 전용]
C --> C4[Proxy 서버 패턴]
C --> C5[정기 키 교체<br/>최소 90일 주기]