CLI 소유권 관리: 셀프 호스팅 지갑을 위한 master, owner, session 명령어
요약
WAIaaS에서 제공하는 AI 에이전트용 셀프 호스팅 지갑의 3단계 소유권 모델과 CLI 관리 방법을 설명합니다. master, owner, session 계층을 통해 에이전트의 자율성과 보안을 동시에 확보하는 아키텍처를 다룹니다.
핵심 포인트
- AI 에이전트의 자율적 트랜잭션을 위한 3단계 권한 모델 제공
- master: 시스템 관리 및 초기 설정용 계층
- owner: 자금 주권 및 트랜잭션 승인용 계층
- session: 에이전트가 실제 사용하는 제한적 권한 계층
- Docker를 이용한 간편한 셀프 호스팅 환경 구축 가능
당신의 키, 당신의 서버, 당신의 규칙: WAIaaS에서의 CLI 소유권 관리
AI 에이전트의 지갑 인프라를 셀프 호스팅한다는 것은 개인 키(private keys)를 제3자에게 절대 넘겨주지 않는다는 것을 의미합니다. WAIaaS는 여러분의 자체 머신에서 누가 무엇을 제어할지를 정확하게 관리할 수 있는 완전한 CLI를 제공합니다. 실제 자금을 이동하는 자율 에이전트(autonomous agent)의 서명 키(signing keys)를 호스팅 서비스에 맡길 수 있을지 스스로 질문해 본 적이 있다면, 왜 이것이 중요한지 이미 알고 계실 것입니다. 이 포스트에서는 WAIaaS의 3단계 소유권 모델과 이를 자체 하드웨어에서 실행할 수 있게 해주는 CLI 명령어에 대해 알아봅니다.
AI 에이전트에게 키 수탁(Key Custody)이 다른 문제인 이유
인간을 위해 셀프 호스팅 지갑을 운영하는 것은 이미 잘 알려진 패턴입니다. 하지만 AI 에이전트를 위해 운영하는 것은 더 어려운 문제입니다. 에이전트는 자율적으로 작동해야 하기 때문입니다. 트랜잭션(transaction)을 보낼 때마다 멈춰서 사용자에게 비밀번호를 물어볼 수는 없습니다. 동시에, 에이전트에게 모든 것에 대한 무제한적인 서명 권한(signing authority)을 부여해서도 절대 안 됩니다.
호스팅형 Wallet-as-a-Service 제품들은 수탁(custody)을 자신들의 서버로 중앙화하여 이 문제를 해결합니다. 이는 편의성을 위해 주권(sovereignty)을 맞바꾸는 것입니다. 여러분은 API 키를 받고, 그들이 키를 보유하며, 여러분은 그들의 인프라, 보안 관행, 그리고 가동 시간(uptime)을 신뢰해야 합니다. 많은 사용 사례에서 이는 괜찮습니다. 하지만 프라이버시가 중요하거나, 규제 노출(regulatory exposure)이 중요하거나, 혹은 단순히 제3자가 에이전트의 자금을 동결하는 것을 원치 않는 무언가를 구축하고 있다면, 셀프 호스팅이 정답입니다. 이는 암호화폐 버전의 자체 이메일 서버 운영과 같지만, WAIaaS는 단 한 번의 Docker 명령어로 이를 진정으로 실용적으로 만들어 줍니다.
자율적이면서도 안전한 에이전트 지갑을 작동하게 하는 아키텍처는 3단계 소유권 모델입니다: 시스템 관리를 위한 master 계층, 자금 주권을 위한 owner 계층, 그리고 에이전트 자체를 위한 session 계층입니다. 각 계층은 서로 다른 권한, 서로 다른 인증(auth) 방식, 그리고 서로 다른 CLI 명령어를 가집니다.
세 가지 계층: Master, Owner, Session
CLI 명령어를 살펴보기 전에, 각 계층(tier)의 용도가 무엇인지 이해하는 것이 도움이 됩니다.
masterAuth는 시스템 관리자(system administrator) 역할입니다. Argon2id로 해싱된 비밀번호를 사용하며, 지갑 생성, 세션 생성, 정책 설정, 그리고 데몬(daemon) 자체를 관리하는 데 사용됩니다. 이를 WAIaaS 데몬에 대한 root 액세스라고 생각하면 됩니다. 즉, 일반적인 에이전트(agent) 운영 중이 아니라, 초기 설정 단계나 구성을 변경해야 할 때 사용합니다.
ownerAuth는 자금 주권(fund sovereignty) 계층입니다. SIWS (Sign-In With Solana) 또는 SIWE (Sign-In With Ethereum) 서명을 사용하며, 이는 귀하가 독립적으로 제어하는 지갑과 연결되어 있음을 의미합니다. 소유자(owner)는 대기 중인 트랜잭션을 승인하고, WalletConnect를 통해 연결하며, 킬 스위치(kill switch)를 작동시킬 수 있습니다. 결정적으로, 소유자는 마스터(master) 비밀번호가 유출되더라도 제어권을 복구할 수 있습니다.
sessionAuth는 AI 에이전트가 실제로 사용하는 것입니다. 이는 설정 가능한 TTL(Time To Live), 최대 갱신 횟수(max renewals), 그리고 절대 수명(absolute lifetime)을 가진 JWT (HS256)입니다. 에이전트는 마스터 또는 소유자 자격 증명(credentials)에 절대 접근할 수 없으며, 언제든지 취소(revoke)할 수 있는 세션 토큰(session token)만을 보유합니다.
이러한 분리는 보안의 기초입니다. 에이전트는 자신의 권한을 상승(escalate)시킬 수 없으며, 지갑 자체에 영향을 주지 않고도 세션 토큰을 회수할 수 있습니다.
CLI 설치하기
CLI는 셀프 호스팅(self-hosted) WAIaaS 설치를 관리하기 위한 주요 도구입니다:
npm install -g @waiaas/cli
설치가 완료되면, 데몬의 생명주기(lifecycle)부터 백업 및 복구에 이르기까지 모든 것을 다루는 20개의 명령어에 접근할 수 있습니다.
설정하기: init, start, 그리고 set-master
아무것도 없는 상태에서 데몬을 실행하기까지 가장 빠른 경로:
waiaas init # 데이터 디렉토리 + config.toml 생성
waiaas start # 데몬 시작 (첫 실행 시 마스터 비밀번호 입력 요청)
만약 완전히 자동화된 첫 부팅(unattended first boot)을 원한다면 — 이는 대화형으로 비밀번호를 입력할 수 없는 홈랩(homelab) 서버나 Docker 환경에서 유용합니다 — 자동 프로비저닝(auto-provision)을 사용하세요:
waiaas init --auto-provision # 무작위 마스터 비밀번호(master password) 생성 → recovery.key에 저장
waiaas start # 비밀번호 입력 프롬프트 없음
자동 프로비저닝(auto-provision) 후에는 recovery.key에서 생성된 마스터 비밀번호를 가져와 안전한 곳에 보관한 다음, 다음과 같이 보안을 강화(harden)하세요:
waiaas set-master # 마스터 비밀번호를 직접 선택한 값으로 변경
# 새 비밀번호가 작동하는 것을 확인한 후:
# recovery.key 삭제 — 더 이상 필요하지 않음
set-master 명령어는 "편의를 위해 자동 생성된 상태"에서 "사용자가 의도적으로 선택하고 제어하는 상태"로 넘어가는 지점입니다. 프로덕션 배포(production deployment) 시 이 단계를 건너뛰지 마세요.
소유자 관리 (Owner Management): owner connect, owner disconnect, owner status
소유자(owner) 계층은 자금에 대한 개인의 주권(sovereignty)이 존재하는 곳입니다. 소유자를 연결한다는 것은 지갑 주소(Solana 또는 EVM)를 WAIaaS 데몬(daemon)에 연결하여, 사용자가 제어하는 지갑을 통해 트랜잭션을 승인하고 킬 스위치(kill switch)를 실행할 수 있음을 의미합니다.
waiaas owner connect # 지갑 주소를 자금 소유자(fund owner)로 연결
waiaas owner status # 어떤 주소가 소유자로 연결되어 있는지 확인
waiaas owner disconnect # 소유자 연결 해제
소유자가 연결되면, 정책 임계값(policy thresholds)을 초과하는 고액 트랜잭션은 진행을 위해 소유자의 서명(signature)이 필요합니다. 사용자는 휴대폰의 WalletConnect, Telegram 서명 채널, 또는 push-relay 서명 채널을 통해 이를 승인할 수 있으며, 총 세 가지의 서명 채널이 지원됩니다.
소유자 연결은 킬 스위치에 접근하는 방법이기도 합니다. 에이전트 세션(agent session)이 예상치 못한 방식으로 동작할 경우, 소유자는 마스터 비밀번호 없이도 승인을 취소할 수 있습니다. 이는 의도된 설계입니다. 즉, 팀 내에서 두 역할(master와 owner)을 서로 다른 사람이 맡을 수 있음을 의미하며, 누군가 마스터 비밀번호를 탈취하더라도 정책 임계값을 초과하는 트랜잭션에 대해서는 소유자의 서명 없이는 자금을 사용할 수 없음을 의미합니다.
세션 관리 (Session Management): session prompt 및 세션 API
세션 (Sessions)은 AI 에이전트에게 전달하는 것입니다. 세션은 범위가 지정된 JWT (JSON Web Token)입니다. 에이전트는 세션 토큰으로 인증하며, 이 토큰은 TTL (Time To Live, 유효 기간), 최대 갱신 횟수, 그리고 절대적인 수명 상한선을 가집니다.
session prompt 명령어는 세션 상호작용을 관리하기 위한 CLI 인터페이스입니다:
waiaas session prompt
프로그래밍 방식으로 세션을 생성하는 경우(에이전트를 연결할 때 흔히 발생하는 상황), REST API를 사용하세요:
# 먼저, 지갑을 생성합니다 (masterAuth 필요)
curl -X POST http://127.0.0.1:3100/v1/wallets \
-H "Content-Type: application/json" \
...
두 번째 호출에서 반환된 세션 토큰을 에이전트의 환경 변수에 설정합니다. 에이전트는 마스터 비밀번호나 소유자 자격 증명(owner credentials)에 전혀 접근하지 않고도 잔액 확인, 트랜잭션 전송, DeFi 액션 실행 등 모든 작업에 이 토큰을 사용합니다:
# 에이전트가 세션 토큰으로 수행하는 작업:
curl http://127.0.0.1:3100/v1/wallet/balance \
-H "Authorization: Bearer wai_sess_eyJhbGciOiJIUzI1NiJ9..."
만약 에이전트가 해킹(compromised)당한다면, 해당 세션을 취소(revoke)하면 됩니다. 지갑과 그 자금은 온전하게 유지됩니다. 소유자 연결 또한 유지됩니다. 적절한 제약 조건을 설정하여 새로운 세션을 생성하고 계속 진행하면 됩니다.
Quickset: 한 번에 전체 환경 구축하기
설치부터 "Claude가 지갑을 보유한 상태"까지 최대한 빠르게 도달하고 싶은 사용자를 위해, quickset은 한 번의 명령으로 지갑과 MCP (Model Context Protocol) 세션을 생성합니다:
waiaas quickset --mode mainnet
이것은 "보안 모델을 이해했으니, 실제로 작동하는 것을 보고 싶다"는 사용자를 위한 명령어입니다. 명령이 완료되면 Claude Desktop의 설정 파일에 붙여넣을 MCP 구성 JSON을 받게 되며, 또는 다음과 같이 자동 등록할 수도 있습니다:
waiaas mcp setup --all # Claude Desktop에 모든 지갑을 자동 등록
그 후, Claude는 잔액 확인, 토큰 전송, 15개의 통합 프로토콜에 걸친 DeFi 작업, NFT 운영, 트랜잭션 시뮬레이션 (transaction simulation) 등 45개의 MCP 도구를 사용할 수 있게 됩니다. 이 모든 과정은 귀하의 서버에서, 귀하의 키를 사용하여, 셀프 호스팅된 데몬 (daemon)을 통해 이루어집니다.
백업 및 복구: backup create, backup list, backup inspect, restore
셀프 호스팅은 귀하가 직접 백업을 책임져야 함을 의미합니다. CLI가 이 기능을 지원합니다:
waiaas backup create # 현재 데몬 상태의 백업 생성
waiaas backup list # 사용 가능한 모든 백업 목록 표시
waiaas backup inspect # 특정 백업의 내용 검사
...
이 부분은 호스팅 서비스가 백그라운드에서 대신 처리해 주는 영역입니다. 셀프 호스팅의 트레이드오프 (tradeoff)는 백업 책임을 직접 진다는 점입니다. 반대로 귀하에게 유리한 점은 데이터를 완전히 소유한다는 것입니다. 데이터는 귀하의 인프라를 절대 벗어나지 않습니다.
홈랩 (homelab) 또는 VPS 배포의 경우, 이러한 백업 명령어를 암호화된 백업을 콜드 스토리지 (cold storage)로 전송하는 예약된 작업 (scheduled job)과 결합하여 사용하십시오. 데몬의 데이터 디렉토리는 기본적으로 이름이 지정된 Docker 볼륨 (Docker volume)이므로, Docker 생태계의 백업 전략을 그대로 적용할 수 있습니다.
Docker에서 실행하기: 셀프 호스터를 위한 실용적인 경로
대부분의 셀프 호스터는 호스트에 Node.js를 직접 설치하기보다 Docker에서 WAIaaS를 실행하기를 원할 것입니다. Docker 이미지는 ghcr.io/minhoyoo-iotrust/waiaas:latest이며, 기본 포트 바인딩 (port binding)은 127.0.0.1:3100:3100입니다. 기본적으로 localhost에서만 접근 가능하도록 설정되어 있는데, 이는 올바른 기본 설정입니다.
# 세 개의 명령어로 클론 및 시작
git clone https://github.com/minhoyoo-iotrust/WAIaaS.git
cd WAIaaS
...
자동 프로비저닝 (auto-provision)을 포함한 무인 첫 부팅 (unattended first boot)의 경우:
docker run -d \
--name waiaas \
-p 127.0.0.1:3100:3100 \
...
프로덕션 배포 (production deployments)를 위해서는 환경 변수에 비밀번호를 넣는 것을 피하기 위해 시크릿 오버레이 (secrets overlay)를 사용하십시오:
mkdir -p secrets
echo "your-secure-password" > secrets/master_password.txt
chmod 600 secrets/master_password.txt
...
Docker 설정에는 기본적으로 헬스체크 (healthcheck) 기능이 포함되어 있으며, 루트가 아닌 사용자 (non-root user, UID 1001)로 실행됩니다. 또한 원할 경우 자동 이미지 업데이트를 위한 Watchtower를 지원합니다. 엔트리포인트 (entrypoint)는 자동 프로비저닝 (auto-provision) 및 Docker Secrets를 네이티브로 지원합니다.
종합하기: 실제 적용되는 소유권 모델 (Ownership Model)
셀프 호스팅 배포를 위해 이 세 가지 계층을 하나로 묶어주는 사고 모델은 다음과 같습니다:
-
당신은 마스터 비밀번호 (master password)를 보유합니다. 이를 사용하여 지갑을 생성하고, 세션을 생성하며, 정책을 구성합니다. 마스터 비밀번호는 드물게 사용하며, 자동화된 코드에서는 절대 사용하지 않습니다.
-
당신은 (개인 지갑을 통해) 소유자 (owner)로서 연결합니다. 이를 통해 이미 제어하고 있는 지갑에서 고액 거래를 승인하거나 킬 스위치 (kill switch)를 작동시킬 수 있는 권한을 갖게 됩니다.
-
**당신의 에이전트 (agent)**는 오직 세션 토큰 (session token)만을 보유합니다. 에이전트는 당신이 정의한 정책 제약 조건 내에서 작동합니다. 새로운 세션을 생성할 수 없고, 정책을 변경할 수 없으며, 다른 지갑에 접근할 수 없습니다.
-
**당신의 정책 (policies)**은 기본 거부 (default-deny) 원칙을 강제합니다. 토큰, 컨트랙트 (contract), 또는 수신자를 명시적으로 화이트리스트 (whitelist)에 추가하지 않았다면 거래는 차단됩니다. 정책 엔진은 21가지 정책 유형과 4가지 보안 계층 (INSTANT, NOTIFY, DELAY, APPROVAL)을 갖추고 있어, 당신이 수용할 수 있는 위험 허용도를 정확하게 표현할 수 있습니다.
-
당신의 서버는 데몬 (daemon)을 실행합니다. 키 (keys)는 절대 당신의 인프라를 벗어나지 않습니다.
이는 호스팅 방식의 대안과는 철학적일 뿐만 아니라 운영 측면에서도 유의미하게 다릅니다. 당신은 침해 사고 발생 시 영향 범위 (blast radius)를 제어합니다. 어떤 데이터가 어디에 기록될지 제어합니다. 가동 시간 (uptime)과 유지보수 시간을 제어합니다. 관리 인터페이스에 누가 접근할 수 있는지를 제어합니다.
빠른 시작 요약 (Quick Start Summary)
npm install -g @waiaas/cliwaiaas init --auto-provision && waiaas start- 마스터 비밀번호(master password) 가져오기:
cat ~/.waiaas/recovery.key waiaas quickset --mode mainnet— 지갑(wallets) 및 세션(sessions) 생성waiaas owner connect— 개인 지갑을 자금 소유자(fund owner)로 연결waiaas set-master— 마스터 비밀번호(master password)를 강화하고 recovery.key 삭제waiaas mcp setup --all— Claude Desktop 연결
다음 단계 (What's Next)
여기서 설명한 소유권 모델(ownership model)은 기초입니다. WAIaaS의 다른 모든 기능(DeFi 통합, NFT 지원, 크로스체인 브릿징(cross-chain bridging), x402 결제 프로토콜)은 이 모델 위에서 작동합니다. GitHub 저장소에서 전체 문서를 읽고 15개 패키지로 구성된 모노레포(monorepo)를 확인하는 것부터 시작하세요. 공식 사이트는 waiaas.ai를 방문하시기 바랍니다. 에이전트(agents)가 세션 토큰(session token)을 획득한 후 실제로 무엇을 할 수 있는지 더 깊이 알고 싶다면, 정책 엔진(policy engine)과 45개의 MCP 도구(tools)가 논리적인 다음 단계입니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기