개요
OpenClaw 게이트웨이는 세 가지 소스에서 시크릿(API 키, 인증 정보 등)을 로드한다. 활성화 시점에 즉시 해석(eager resolution)하고, 리로드 시 원자적 교체(atomic swap)를 수행하여 안전한 시크릿 관리를 제공한다.
시크릿 소스
1. 환경 변수 (Environment Variables)
가장 일반적인 방식. .env 파일 또는 시스템 환경 변수에서 로드한다.
{
"secrets": {
"OPENAI_API_KEY": "${OPENAI_API_KEY}",
"TELEGRAM_TOKEN": "${TELEGRAM_BOT_TOKEN}"
}
}
2. 파일 JSON 포인터 (File Pointers)
JSON/YAML 파일 내 특정 경로의 값을 시크릿으로 사용한다.
{
"secrets": {
"DB_PASSWORD": {
"file": "/etc/openclaw/secrets.json",
"pointer": "/database/password"
}
}
}
3. 실행 명령 (Executable Commands)
외부 시크릿 매니저(Vault, AWS Secrets Manager 등)에서 값을 조회하는 명령을 실행한다.
{
"secrets": {
"VAULT_TOKEN": {
"exec": "vault kv get -field=token secret/openclaw"
}
}
}
즉시 해석 (Eager Resolution)
시크릿은 게이트웨이 활성화 시점에 즉시 해석된다. 런타임 중 지연 로딩(lazy loading)하지 않는다.
게이트웨이 시작
│
▼
모든 시크릿 소스 해석
│
▼
런타임 스냅샷 생성
│
▼
에이전트가 스냅샷에서 시크릿 참조
원자적 교체 (Atomic Swap)
설정 리로드 시 새로운 시크릿 세트를 구성한 후, 기존 세트와 원자적으로 교체한다.
- 리로드 중에도 기존 시크릿이 유효
- 새 시크릿 해석 완료 후 한 번에 전환
- 부분 업데이트 없음 (all-or-nothing)
활성 표면 필터링 (Active-Surface Filtering)
비활성화된 채널의 시크릿은 로드하지 않는다.
{
"channels": {
"telegram": { "enabled": false },
"discord": { "enabled": true }
}
}
위 설정에서 Telegram 관련 시크릿(TELEGRAM_BOT_TOKEN 등)은 해석되지 않는다. 불필요한 시크릿 노출을 방지하고 시작 시간을 단축한다.
런타임 스냅샷
해석된 시크릿은 런타임 스냅샷으로 메모리에 보관된다. 에이전트의 핫 패스(hot-path)에서 빠르게 접근할 수 있다.
- 파일 시스템이나 외부 서비스 재조회 없음
- 메모리 내 읽기 전용 접근
- 프로세스 종료 시 메모리에서 제거
관리 워크플로우
시크릿 변경은 감사 → 설정 → 적용 3단계로 진행한다.
1. 감사 (Audit)
현재 시크릿 상태를 확인한다. 값은 마스킹되어 표시된다.
openclaw secrets list
Name | Source | Status
------------------|---------|--------
OPENAI_API_KEY | env | active
TELEGRAM_TOKEN | env | active
DB_PASSWORD | file | active
VAULT_TOKEN | exec | error
2. 설정 (Configure)
시크릿을 추가하거나 수정한다.
openclaw configure --section secrets
3. 적용 (Apply)
변경사항을 게이트웨이에 적용한다.
openclaw reload
원자적 교체가 수행되어 새로운 시크릿이 즉시 활성화된다.
안전 정책
단방향 안전 (One-Way Safety)
시크릿 변경은 항상 전진(forward-only)한다. 롤백 백업을 생성하지 않는다.
- 이전 시크릿 값은 메모리에서 즉시 제거
- 파일 시스템에 이전 값을 저장하지 않음
- 롤백이 필요하면 원본 소스(환경 변수, Vault 등)에서 복원
이 정책은 시크릿이 불필요하게 디스크에 남아 노출되는 위험을 방지한다.