킬 스위치는 환경 전체 거부 게이트입니다. 작동은 의도적으로 저렴합니다 — admin 계층, 정족수 없음 — 합의를 기다리는 정지는 정지가 아니기 때문입니다. 재활성화는 의도적으로 비쌉니다: 이중 통제, 비상 유리 없음. 새벽 3시에 어느 방향에서든 갭을 발견하고 싶지 않을 것입니다.
비프로덕션 테넌트에서의 훈련이 정지 게이트가 모든 작동 심을 거부하고, 보류 중인 승인이 원자적으로 취소되며, 재활성화에 실제로 두 명의 서로 다른 인간이 필요함을 증명하는 유일한 안전한 방법입니다. 필요하기 전에 실행하세요.
전제 조건
- 비프로덕션 테넌트. 훈련은 실제 환경 전체 정지를 작동합니다. 스테이징이나 개발에서 실행하세요, 절대 프로덕션이 아닙니다.
- 최소 세 명의 인간 사용자. (1)
admin계층 작동자; (2)critical이중 통제 최저 기준을 충족하는 두 명의 서로 다른 재활성화 승인자 (editor이상); (3) 강제 사후 검토를 마감하는 관련 없는 사후 검토자 (editor이상). 사후 검토자는 작동자가 아닌 한 승인자와 겹칠 수 있습니다. - 테스트할 거버넌스된 작동 심 목록 — deploy apply, orchestration fire, voice open, model execution, budget spend, 배선한 모든 맞춤 표면.
단계 1: 킬 스위치 작동
작동자가 필수 사유 문자열과 함께 킬 스위치를 활성화합니다:
# API 호출 — 호스트, 포트 및 인증 헤더를 대체하세요.
curl -X POST https://<host>/v1/kill-switch/engage \
-H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{"reason": "scheduled quarterly drill"}'
작동은 의도적으로 저렴합니다: admin 계층, 사유, 승인 정족수 없음, 단계적 강화 없음, 비상 유리 없음. 정지 행이 단일 진실 소스가 됩니다. 모든 거버넌스된 작동 게이트는 각 작업마다 실시간으로 이를 확인하고 읽기 오류 시 기본 거부합니다.
작동과 동일한 트랜잭션에서 모든 보류 중인 범위 내 작동 승인이 취소됩니다 — 정지 전 의도가 환경이 복귀하는 순간 부여로 성숙할 수 없습니다. 타임스탬프를 기록하세요; 나중에 원장에서 확인합니다.
단계 2: 거부 확인
킬 스위치가 작동된 상태에서 환경에 배선된 모든 거버넌스된 작동을 시도합니다. 각각 거부를 반환해야 합니다.
테스트할 작동 심:
| 심 | 시도할 것 | 예상 결과 |
|---|---|---|
| Deploy | 유효한 플랜으로 POST /v1/deploy/apply | 거부됨 |
| Orchestration | POST /v1/orchestration/fire | 거부됨 |
| Voice | POST /v1/voice/open | 거부됨 |
| Model execution | 거버넌스된 경로를 통한 모든 추론 또는 모델 호출 | 거부됨 |
| Budget spend | 예산 게이트에 대한 모든 지출 작업 | 거부됨 |
환경에 프로비저닝된 모든 심을 테스트하세요. 거버넌스 코어를 통해 배선된 맞춤 작동 표면이 있으면 그것도 포함하세요.
여전히 작동해야 하는 것도 확인하세요:
정지는 에이전트 환경을 중단하며 거버넌스하는 제어는 중단하지 않습니다. 거버넌스 작업은 사용 가능한 상태를 유지합니다:
- 접근 맵 읽기 —
GET /v1/access-map은 정상적으로 반환되어야 합니다. - 감사 원장 보기 —
GET /v1/audit/export는 방금 생성한 작동 이벤트를 포함하여 원장을 반환해야 합니다. - 승인 목록 — 승인 큐는 읽을 수 있어야 합니다; 이전에 보류 중이던 승인은 취소됨으로 표시되어야 합니다.
작동 심이 거부 이외의 것을 반환하거나 거버넌스 작업이 차단되면 훈련을 중단하고 조사하세요. 킬 스위치에 갭이 있습니다.
단계 3: 환경 재활성화
재활성화는 절대 일방적이지 않습니다. critical 계층에서 새로운 이중 통제 승인이 필요합니다: 두 명의 서로 다른 인간, 전환 시 구조적으로 재검증. 재활성화에 대한 비상 유리 경로는 의도적으로 없습니다 — “환경이 정지된 상태로 유지”가 안전한 상태입니다.
작동자(또는 모든 admin)가 재활성화를 요청합니다:
curl -X POST https://<host>/v1/kill-switch/re-enable \
-H "Authorization: Bearer <admin-token>" \
-H "Content-Type: application/json" \
-d '{"reason": "drill complete, restoring estate"}'
이것은 critical 계층 승인 요청을 생성합니다. 두 명의 승인자 — 각각 서로 다른 인간, 시스템 토큰을 사용하지 않는 — 가 POST /v1/approvals/<request-id>/decide를 통해 {"decision": "approve"}로 승인해야 합니다. 이중 통제 최저 기준은 서버 측에서 시행됩니다: 중복 결정자 방지가 한 사람이 두 번 계산되는 것을 방지하고, 시스템 토큰은 거부됩니다(인간 보증 없음). 정책 계층이 다운그레이드되더라도 구조적 최저 기준이 유지됩니다 — critical 작업은 한 명의 승인자로 통과할 수 없습니다. 두 승인이 모두 완료되면 환경이 재활성화됩니다.
단계 4: 복원 확인
단계 2의 모든 작동 시도를 반복합니다. 각각 이제 성공해야 합니다(허용됨 또는 일반 승인 흐름으로 라우팅됨). 재활성화 후에도 거부되는 심이 있으면 재활성화가 완전히 전파되지 않은 것입니다 — 훈련을 서명하기 전에 조사하세요.
단계 5: 사후 검토 마감
관련 없는 인간에 의한 강제 사후 검토는 다음 킬 스위치 작동이 가능하기 전에 구조적으로 필요합니다. 검토자는 작동자가 아닌 사람이어야 합니다:
curl -X POST https://<host>/v1/kill-switch/post-review \
-H "Authorization: Bearer <reviewer-token>" \
-H "Content-Type: application/json" \
-d '{"notes": "drill verified: all seams denied, re-enable required dual-control, restoration confirmed"}'
이 검토가 마감될 때까지 후속 킬 스위치 작동이 차단됩니다. 이것은 설계에 의한 것입니다 — 감시를 회피하기 위해 작동을 쌓을 수 없습니다.
원장에서 확인할 사항
훈련 후 감사 원장을 내보내고 전체 추적을 확인합니다:
olivares audit export --format json --since <drill-start-timestamp>
원장에는 순서대로 다음이 포함되어야 합니다:
- 작동 이벤트 — admin, 사유(“scheduled quarterly drill”), 타임스탬프, 작동 세션의 보증 수준.
- 승인 취소 — 작동과 동일한 트랜잭션에서 취소된 모든 보류 중인 범위 내 승인.
- 거부 이벤트 — 정지 중 거부된 각 작동 시도에 하나씩.
- 재활성화 요청 —
critical계층의 승인 요청. - 두 승인 결정 — 승인자당 하나, 각각 서로 다른 인간 신원을 명시.
- 재활성화 이벤트 — 환경 복원.
- 사후 검토 이벤트 — 관련 없는 검토자, 그들의 메모, 마감 타임스탬프.
모든 레코드는 체인 무결성 필드(seq, prev_hash, hash, sig)를 포함합니다. 누락되거나 순서가 맞지 않는 항목은 원장에 갭이 있음을 의미합니다 — 실제 사고에서 신뢰하기 전에 조사하세요.
빈도
훈련을 분기별로 실행하세요. 킬 스위치는 최후의 방어선입니다; 갭이 있으면 사고 중이 아닌 예정된 시간에 발견하고 싶을 것입니다. 다른 연속성 연습(백업 복원, 장애 조치, 비상 유리 활성화)과 함께 운영 캘린더에 훈련을 추가하세요.
환경이 실질적으로 변경되면 — 새 작동 심 배선, 새 테넌트 프로비저닝, 정책 엔진 교체 — 새 표면을 다루기 위해 예정 외 훈련을 실행하세요.