← 목록
기타 2026-07-30 4KB 읽기 4분

크라우니클라우드 관리 사이드카(:9662) 실인증 게이트

개요

cloud.crowny.org가 무인증 공개 상태(누구나 노드/서비스/jimin 계정 데이터 열람)였던 문제를 닫았다. :9662 사이드카의 전 라우트(/api/health 제외)에 Bearer 세션토큰 검증을 강제했다.

무엇을 했는지

  • /Users/ef/crowny-services/클라우드관리.한선: 서비스서버.한선(:9611) 717~800행 세션토큰 검증 로직을
CM_ 접두로 이식 — CM_시크릿초기화(data/auth/.secret 로드, 생성은 :9611 몫), CM_세션서명, CM_인증헤더추출, CM_소유자ver조회, CM_인증확정(owner.exp.ver.sig 파싱→화이트리스트→exp→ver→sig). X-Crowny-Owner 폴백 완전 제거. CM_요청처리에서 /api/health만 무인증, 그 외는 CM_인증확정 실패 시 401 {"error":"auth_required"}.
  • /Users/ef/crowny-services/public/cloud/index.html: 로그인 게이트 뷰 추가(토큰 없으면 대시보드 대신 로그인 카드).
토큰은 localStorage.crownyCloudToken, 로그인/가입은 동일 오리진 :9611 /api/auth/login·/api/auth/register (게이트웨이 /cloudapi 접두 없이). 모든 /cloudapi fetch에 Authorization: Bearer 헤더, 401 응답 시 토큰 삭제+로그인 뷰 복귀. 로그아웃 버튼 추가.
  • 동반 파일: /Users/ef/crowny-services/public/cloud/index.한선 — 프론트 인증 흐름(토큰 파싱/헤더/401 처리/
로그인·가입 바디) 한선씨 명세(프론트는 브라우저 전용 JS라 실행 대체 불가, 계약 문서화 목적).

검증 (실측)

  1. curl 무토큰 GET :9662/api/node401 {"error":"auth_required"}
  2. :9611 /api/auth/register cloudtest/test1234! → {"ok":true,"owner":"cloudtest"}/api/auth/login → 토큰 발급
  3. 유효 토큰으로 GET /api/node200 {"addr":...,"cpu":...}
  4. 잘못된 sig 토큰 → 401 {"error":"auth_required"}
  5. 게이트웨이 경유 https://cloud.crowny.org/cloudapi/api/node 무토큰 → 401
  6. 크라우니AI검증.sh shot으로 http://127.0.0.1:9611/cloud/ 렌더 확인 — 로그인 카드 정상 표시(크림/골드 토큰)
  7. 디자인이식.sh diff crowny-cloud → 판정=티 점수=100 신규색=0 (첫 시도 타 → 임의 치수/그림자 값을 기존
모달카드 스타일(max-width:440px, box-shadow 0 18px 50px rgba(32,24,18,.25))로 교체해 통과)

컴파일

hanseonc_high 클라우드관리.한선 STRICT 0경고. 9662 재기동(launchctl kickstart -k gui/501/org.crowny.cloudapi).

잔여 이슈

  • 프론트 401 자동로그아웃은 폴링 중 발생 시에도 즉시 처리되나, 폴백 UX(재로그인 유도 토스트)는 없음 — 향후 개선 여지.
  • /api/tier, /api/chain 등 모듈 내부의 ?owner= 쿼리 파싱은 이번 범위 밖(토큰 owner가 CM_요청처리의 소유자
인자로는 우선하지만, 각 모듈이 자체적으로 쿼리 owner를 또 읽는 부분은 손대지 않음 — 스펙 문서에 반영된 대로 "각 모듈 핸들에 넘기는 소유자 인자"만 토큰 owner로 확정됨).

이어진 ②③ 마감 (같은 날, 본세션 실측)

  • 교차소유자 우회 수리: ①직후 본세션 재검증에서 발견 — 유효 토큰으로 ?owner=jimin 조회 시 타인 데이터 노출(체인/tier/snapshot). 3모듈 모두 쿼리 owner 무시, 토큰 확정 소유자만 사용으로 수리. cloudtest 토큰→jimin 조회=자기 데이터만 반환 실측.
  • ② 체인 실구동: 시드 12.5 제거(신규 계정 0), 장부 owner 컬럼 분리, 체인기록(owner,…) 시그니처, :9611 /api/anchor 실앵커(해시체인) 연동 — 앵커기록.psv seq=1의 anchor 해시가 :9611 head와 정확 일치 실측. 백업 시 +0.4가 실제 소유자 귀속.
  • ③ 지표 정직화: mem 산식 (active+wired+compressed)/hw.memsize — 99% 고정→75~77% 실값. uplink 추정식(20+cpu/4) 폐기→netstat 비루프백 델타/1Gbps %, 소수2자리(awk — VM 정수나눗셈 절단 회피). 40MB 다운로드 중 2.17% 실측(이론 2.2% 일치).
  • 함정 기록: VM 정수 나눗셈 자연반올림 → 소량 트래픽 % 절단. 비율 계산은 셸 awk 소수 산출로.