- POST/PATCH/deactivate/activate /v1/admin/daemons — admin-only daemon CRUD (REQ-053)
- GET/PUT/DELETE /v1/daemons/{daemon_id}/credential — user-owned scoped credential management (REQ-052)
- Owner re-assignment auto-invalidates BrokerCredential via update_daemon_owner() (REQ-053 AC-4)
- Deactivation auto-revokes service tokens via revoke_tokens_by_daemon_id() (REQ-022 reuse, REQ-053 AC-6)
- DELETE /v1/admin/daemons/{id} → 405 (hard delete not provided, REQ-053 AC-8)
- All responses exclude app_key/app_secret; Fernet encryption at rest (REQ-054)
- Service-token → 403 on credential endpoints (REQ-052 AC-10)
- Admin ownership scope enforced: admin cannot write other user's credential (REQ-052 AC-9)
- REQ-051 regression: 4 service-token guard tests pass (REQ-054 AC-7)
- 44 new tests, 565 total passed (521 baseline + 44 new), 0 failures
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
2.3 KiB
2.3 KiB
BAT-022 — daemon CRUD admin API + self-service 인증정보 관리 API
- Batch ID: BAT-022
- Profile: standard
- Status: in-progress
- Discovery: dcy-011
- Included REQ: REQ-052, REQ-053, REQ-054
- Folder: docs/batches/bat-022_20260628_daemon-crud-self-service-credential-api/
- Created: 2026-06-28
Summary
dcy-011(daemon admin CRUD + 사용자 self-service 브로커 인증정보 관리 API)을 portfolio-hub에 구현한다.
- REQ-052: user-token + 소유 스코프 인증정보 set/rotate/delete + 메타데이터 GET (
/v1/daemons/{daemon_id}/credential) - REQ-053: admin 데몬 생성·owner 할당·변경·(비)활성화 (
/v1/admin/daemons) - REQ-054: 모든 관리 API 응답/로그에 app_key/app_secret 평문 미포함(보안 격리) + REQ-051 회귀 PASS
dcy-010 자산(BrokerCredential 모델, Fernet 암호화, upsert/delete 메서드) 재사용. CLI와 동일 repo 메서드 공유.
Included REQ
| REQ | 제목 | Type | 의존 |
|---|---|---|---|
| REQ-052 | 사용자 소유 스코프 인증정보 관리 HTTP API | Interface | dcy-010 자산(BrokerCredential, Fernet) |
| REQ-053 | admin 데몬 CRUD HTTP API | Interface | Daemon 모델, REQ-022(service token revoke) |
| REQ-054 | 인증정보 관리 보안 격리 | Non-Functional | REQ-052, REQ-053, REQ-051 |
DoR (진입 조건)
- REQ-052/053/054 전건 Approved 상태 확인
- dcy-011 confirmed Discovery 확인(OQ-1/OQ-2 Deferred → design 단계 해소)
- 구현 대상 파일 존재 확인: app/repositories/postgres.py, app/domain/models.py, app/core/auth.py, app/core/encryption.py
- dcy-010 자산 존재 확인: BrokerCredential PK (daemon_id, broker), upsert_broker_credential, list_broker_credentials, delete_broker_credential
DoD (완료 조건)
- REQ-052 AC-1~10 테스트 통과
- REQ-053 AC-1~12 테스트 통과
- REQ-054 AC-1~7 테스트 통과 (caplog 비노출, 응답 secret 부재, REQ-051 회귀)
- 기존 521 테스트 회귀 없음
- draft-batch-verification 문서에 AC별 evidence 기록
비가역 결재 게이트
- DB 마이그레이션: 신규 DDL 없음. 기존 ensure_schema() + postgres.py 메서드 확장으로 처리 (비가역 없음).
- HTTP API 계약 신설: trex-web dcy-009가 소비 예정. 이 batch는 계약 신설이므로 기존 소비자에 영향 없음(호환 깨짐 없음).