1. 통제면은 단순한 DB 추가가 아니다
(1) 정책 vs 속도: 고위험 쓰기를 기본 차단하려는 제품과 CI의 항상 그린은 충돌합니다. 카테고리가 문서화되지 않으면 상태머신이 조용히 멈춥니다. (2) ClawHub: fail-closed는 “항상 최신 스킬”과 양립하기 어렵습니다. CLI 설치는 성공해도 런타임에서 정책이 거부하는 이중 실패가 납니다. (3) Gateway 인증: trusted proxy·혼합 토큰·트리거 축소 뒤 openclaw.json과 환경 변수의 이중 진실이 흔합니다. (4) 원격 Mac: SSH 세션의 openclaw logs가 launchd가 주입한 값과 다를 수 있습니다.
2. 증상 매트릭스(JSON 수정 전에 읽기)
| 신호 | 가설 | 첫 조치 |
|---|---|---|
| 승인 pending 무한 | 시맨틱 카테고리 미허용 | 카테고리 diff 출력, 읽기 전용 openclaw doctor |
| unsafe / blocked 설치 | 다이제스트 불일치 | allowlist·핀 확인; prod에서 force-unsafe 기본 금지 |
| 401 / device auth | 인증 v2 + 드리프트 | Docker·업그레이드 가이드로 env/JSON 수렴 |
| 채널은 살아 있으나 자식 태스크 침묵 | 트리거 축소 후 라우팅 오류 | openclaw channels probe 후 gateway·channel·tool 로그를 시간창으로 분리 |
3. 다섯 단계: 안전 롤아웃
- 스냅샷 + doctor:
~/.openclaw과 workspace를 보관하고 읽기 전용으로 기준선을 남깁니다. - OPENCLAW_* 단일화: launchd plist·Compose env·shell profile을 목록화하고 중복 export를 삭제합니다.
- 승인 표 분리: 디스크 쓰기·셸 실행·설정 변경을 분류하고 변경마다 티켓을 남깁니다.
- 스테이징 드릴: 최소 스킬 팩을 fail-closed로 검증하고 해시를 CMDB에 기록합니다.
- 증거 게이트: probe가 녹색이 될 때까지 모델 라우팅을 바꾸지 않으며 로그는 시간창으로 자릅니다.
4. 임계값(리뷰용)
gateway.auth.token에 복수 쓰기 경로가 남아 있으면 단일 진실로 줄일 때까지 P0 차단.- 정책 변경 후 24시간 이내 고위험 쓰기 리허설과 로그 발췌 아카이브—「테스트됨」의 근거.
- 원격 Mac에서 OPENCLAW_GATEWAY_PORT가 supervision과 여러 홉 어긋나면 supervision을 먼저 수정.
5. FAQ
Docker 토큰은 맞는데 401? 디바이스 인증 v2와 노드 트리거 한도를 업그레이드 가이드에 따라 겹쳐 점검합니다.
먼저 전역 승인? 격리된 스테이징만. 프로덕션은 fail-closed와 카테고리 allowlist로 점진 개방.
스킬 핀? 예. digest·태그·설치 명령을 동일 변경 티켓에 두고 공격 표면 감사 주기와 맞춥니다.
6. 미니 사례
CI가 매일 최신 스킬을 넣고 프로덕션 게이트웨이가 개발 노트북과 workspace를 공유하던 팀은 야간 승인 적체와 아침 silent deny를 겪었습니다. 스킬 설치를 스테이징 잡으로 옮겨 해시 고정, 승인 표를 위험도별로 분할, OPENCLAW_*는 launchd만 사용하고 셸 중복을 제거했습니다. PR 규칙: gateway.auth를 건드리면 Compose env 대조표도 갱신해야 머지.
7. 마무리: Linux VPS·Mac·MACGPU
한계: 범용 Linux VPS는 권한 모델과 데스크톱 인접 채널이 달라 정책을 코드화하지 않으면 스크립트가 빨리 부패합니다. 원격 Mac: 익숙한 launchd 감독과 재시작 패턴. MACGPU: 하드 구매 전 24/7 Gateway를 시험할 원격 Apple Silicon 노드를 낮은 마찰로 임대(CTA의 요금제·도움말, 로그인 없이 열람 가능). 최종 게이트: 업그레이드 후 24시간 안에 probe와 고위험 리허설을 끝내고 로그에 request id와 정책 버전을 남깁니다.
내부 리뷰 패키지에는 doctor 출력 외에 승인 정책 버전, 스킬 핀 목록, OPENCLAW_*가 담긴 plist 발췌, channels probe 성공 시각을 포함하세요. probe 없는 “수정 완료”는 야간 재배포에서 재발합니다. 단일 호스트에 쓰기 게이트웨이를 이중 기동하지 말고, 로그는 gateway/channel/tool 삼분할 후 시간창으로 상관시키는 규칙을 운영 문서에 박아 두면 사후 설명 비용이 줄어듭니다.
8. 운영 체크리스트
야간 배포 후 첫 출근 전에도 동일 절차를 밟습니다. 업그레이드 직후에는 LastExitStatus와 ThrottleInterval을 launchd 유닛에서 확인하고, 로그 디스크 사용량에 대한 회전·압축 정책을 점검하세요. Docker Compose와 혼용할 때는 컨테이너 내부의 127.0.0.1이 호스트와 다르다는 점을 설정에 명시적으로 적어 두어야 합니다. 장애 대응 시 request id 없이 “대략 재시작”만 반복하면 동일 증상이 재등장하므로, 재시작 전에 반드시 시간창을 좁힌 로그 샘플과 정책 버전을 남기십시오. on-call 체크리스트에 위 항목을 복사해 두면 신규 담당자도 같은 순서로 복구할 수 있습니다.