본문으로 건너뛰기

개발팀 문서 접근 제어

문서 사이트는 애플리케이션 사용자 인증과 분리된 Cloudflare Pages 프로젝트로 배포하고, Cloudflare Access가 모든 요청을 인증합니다.

Developer
-> Cloudflare Access (GitHub organization/team + independent MFA)
-> eduboard-docs Pages
-> Docusaurus static assets

Access는 정적 파일이 전달되기 전에 동작하므로 Docusaurus 코드에서 문서 링크만 숨기는 방식보다 안전합니다.

권장 배포 경계

항목
Pages projecteduboard-docs
Production branchmain
Build commandnpm ci && npm run typecheck && npm run build
Build outputbuild
Production hostnamedocs.<company-domain>
Docusaurus URL variableDOCS_SITE_URL=https://docs.<company-domain>

문서 프로젝트는 Frontend 애플리케이션 Pages 프로젝트와 분리합니다. 문서 장애나 Access 정책 변경이 사용자용 애플리케이션 배포에 영향을 주지 않고, 호스트 전체에 단일 Access 정책을 적용할 수 있습니다.

1. GitHub 로그인 방법 등록

  1. GitHub에서 OAuth App을 생성합니다.
  2. Homepage URL은 https://<team-name>.cloudflareaccess.com으로 설정합니다.
  3. Authorization callback URL은 https://<team-name>.cloudflareaccess.com/cdn-cgi/access/callback으로 설정합니다.
  4. Cloudflare Zero Trust의 Integrations > Identity providers에서 GitHub를 추가합니다.
  5. GitHub 조직과 팀 정보를 읽을 수 있도록 OAuth App을 승인하고 연결 테스트를 실행합니다.

GitHub client secret은 Cloudflare에만 저장하고 저장소나 Pages 환경 변수에 넣지 않습니다.

2. Pages와 사용자 도메인 연결

  1. eduboard-docs Pages 프로젝트를 생성합니다.
  2. 위 표의 빌드 명령과 출력 디렉터리를 설정합니다.
  3. docs.<company-domain>을 Custom domain으로 연결합니다.
  4. Pages production 환경 변수 DOCS_SITE_URL에 최종 HTTPS 주소를 설정합니다.

로컬에서 직접 배포할 때는 다음 명령을 사용합니다.

npm run docs:deploy

3. 프로덕션 Access 정책

Zero Trust의 Access controls > Applications에서 Self-hosted 애플리케이션을 만들고 docs.<company-domain> 전체를 보호합니다.

권장 정책:

설정권장값
ActionAllow
IncludeGitHub organization의 개발 조직
RequireGitHub team의 문서 접근 팀
Login method등록한 GitHub IdP만 허용
Session duration8시간
Instant authentication활성화
App Launcher visibility조직 정책에 따라 선택

조직 전체가 문서를 봐야 한다면 Include에 GitHub organization만 사용합니다. 최소 권한이 필요하면 docs-readers 같은 전용 GitHub team을 Require 조건으로 추가합니다.

4. 독립 MFA

GitHub IdP는 Access의 IdP 기반 MFA method claim 강제 대상이 아니므로 Cloudflare Access의 independent MFA를 사용합니다.

  1. Access controls > Access settings에서 independent MFA를 활성화합니다.
  2. 피싱 방지를 위해 WebAuthn security key 또는 passkey를 허용합니다.
  3. 문서 애플리케이션 또는 정책에서 independent MFA를 필수로 설정합니다.
  4. MFA 재인증 시간을 문서 세션과 같거나 더 짧게 설정합니다.

이 설정은 GitHub 계정의 2FA 여부와 별개로 문서 접근 시 두 번째 인증을 강제합니다.

5. 우회 경로 차단

Custom domain만 보호하면 Pages 기본 도메인이나 preview URL로 문서를 우회할 수 있습니다.

  1. Pages 프로젝트 Settings > General에서 preview deployment Access policy를 활성화합니다.
  2. eduboard-docs.pages.dev 프로덕션 주소에도 별도 Access 애플리케이션을 적용합니다.
  3. *.eduboard-docs.pages.dev preview 주소가 같은 개발팀 정책을 사용하는지 확인합니다.
  4. custom domain, production pages.dev, preview URL을 시크릿 창에서 각각 테스트합니다.

모든 주소는 인증 전 문서 HTML, JavaScript, 검색 인덱스, source map을 반환하지 않아야 합니다.

6. Backend 문서 동기화

Backend 문서 원본은 ../Backend/docs에 유지합니다. Docs 저장소의 배포 가능한 복사본은 다음 명령으로 생성합니다.

npm run docs:sync
npm run docs:sync:check

기본적으로 DocsBackend 저장소가 같은 상위 디렉터리에 있다고 가정합니다. 다른 위치에서는 BACKEND_REPO_DIR을 지정합니다.

BACKEND_REPO_DIR=/path/to/Backend npm run docs:sync

docs/backend 파일은 생성 결과이므로 직접 수정하지 않습니다. Backend 문서를 변경한 커밋에는 동기화된 Docs 문서 변경도 함께 포함해야 합니다.

배포 후 검증

  • 허용된 GitHub team 사용자는 GitHub 로그인과 MFA 후 접근할 수 있습니다.
  • 조직에는 속하지만 허용 team이 아닌 사용자는 거부됩니다.
  • 조직 외부 GitHub 사용자는 거부됩니다.
  • 로그아웃 후 HTML과 정적 asset 직접 URL이 모두 다시 인증을 요구합니다.
  • production, pages.dev, preview deployment가 동일하게 보호됩니다.
  • Access audit log에 로그인 성공과 정책 거부 이벤트가 기록됩니다.

공식 문서