# req-021: release 검증 credential matrix 및 token provenance 운영 절차 - Status: Approved - Type: Documentation - Priority: High - Owner: repository-maintainers ## Intent - release 검증에 사용하는 credential의 용도, 발급 주체, 보관 위치, 폐기 절차가 정의되지 않으면 smoke 재현성이 없어지고 secret leakage 위험이 높아진다. - public/no-auth, read service-token, trade-write service-token, admin auth context 4개 credential 관점의 matrix를 문서화하고, daemon-aware CLI/API를 token provenance 확인 canonical path로 명시한다. ## Requirement - README.md Production Operator Runbook 또는 연결된 운영 문서는 아래 credential matrix를 명시해야 한다. - **public/no-auth**: `GET /health`, `/docs`, `/openapi.json`. 인증 불필요. 배포 직후 공개 smoke에 사용. - **read service-token**: `GET /v1/assets`, `GET /v1/user_info`. 환경 단위 운영 credential. 발급: admin context로 `POST /auth/service-tokens` 후 existing `daemon_id`에 binding. 보관: `/opt/portfoliohub/.env` 또는 동일 접근 통제 하 운영 절차. 공동 소유자: release approver / repository-maintainers. - **trade-write service-token**: `POST /v1/assets/{asset_id}/ledger/trades`. 환경 단위 운영 credential. 발급: admin context로 `POST /auth/service-tokens` 후 existing `daemon_id`에 binding. 보관: read token과 동일 정책. 공동 소유자: release approver / repository-maintainers. - **admin auth context**: `POST /auth/service-tokens`. 운영자 개인 소유. 공유 금지. 발급: steady-state는 `/auth/login` 경유 DB-issued session, break-glass는 env token. - release 문서에는 name, token_prefix, permission, `daemon_id`, `runtime_id`, issued_at, revoked_at만 기록하고 raw token값은 기록하지 않는다. - 운영자는 `pfhub service-token list`, `pfhub service-token issue`, `pfhub service-token rotate`, `pfhub user get`, `GET /v1/user_info`를 token provenance 확인 canonical support path로 사용한다. 각 명령의 출력 필드(name, token_prefix, token_id, user_id, permission, `daemon_id`, created_at, last_used_at, revoked_at, `runtime_id`)를 provenance 확인 기준으로 명시한다. - rotate 또는 재발급 이후에는 `daemon_id` 불변과 `runtime_id` 갱신 여부를 함께 대조해야 한다. ## Acceptance Criteria 1. Given README.md 또는 연결된 운영 문서가 존재할 때, When 운영자가 credential matrix를 참조할 때, Then public/read/trade-write/admin 4개 credential의 용도, 발급 주체, 보관 위치, 공동 소유 역할과 daemon binding 전제가 구분되어 기술되어 있어야 한다. 2. Given release 문서(docs/releases/*.md)가 존재할 때, When smoke evidence를 기록할 때, Then name, token_prefix, permission, `daemon_id`, `runtime_id`, issued_at, revoked_at 필드만 남기고 raw token 값은 포함되지 않아야 한다. 3. Given 운영자가 service-token provenance를 확인할 때, When `pfhub service-token list`를 실행할 때, Then name, permission, `daemon_id`, created_at, last_used_at, revoked_at 필드가 출력되고, `GET /v1/user_info`의 `runtime_id`, `daemon_id`와 대조해 배포된 토큰의 provenance를 재현 가능하게 확인할 수 있어야 한다. 4. Given admin auth context가 필요한 smoke를 수행할 때, When 운영자가 credential matrix를 따를 때, Then admin context는 개인 소유로 취급되고 read/trade-write token은 release approver 역할과 공동 소유 형태로 관리되는 것이 문서에 명시되어 있어야 한다. 5. Given 운영자가 rotate 또는 재발급 후 provenance를 재확인할 때, When `pfhub service-token rotate` 또는 issue 결과를 검토할 때, Then `daemon_id`는 유지 또는 요청한 binding 값으로 확인되고 `runtime_id`는 새 값으로 대조 가능해야 한다. ## Impacted Area - Docs: `README.md` — credential matrix 항목 및 daemon-aware token provenance CLI 절차 추가/보강 - Modules: `app/api/v1_user_info.py` (`runtime_id`, `daemon_id` 반환 확인), `app/cli/commands/service_tokens.py` (issue/list/rotate 출력 필드 확인) - Tests: 없음 (문서화 중심 REQ) ## Notes - NFR-1 (raw credential 비노출): 이 REQ의 핵심 제약. AC-2에 명시. - FR-4와 FR-2를 통합한 REQ. token provenance 확인 수단과 credential matrix는 운영자가 같은 맥락에서 참조하므로 분리 시 중복이 발생한다. - `runtime_id`는 service-token rotate 후 변경되고 `daemon_id`는 유지되므로, 문서에는 두 식별자의 역할 차이를 함께 명시해야 한다. - daemon provisioning 자체는 별도 관리 경로로 수행하고, provenance 절차는 binding 결과 확인에 집중한다. - Source Discovery: dcy-005 FR-2, FR-4; dcy-006 FR-5, FR-6 ## Change Log ### CHG-20260513-01 - Date: 2026-05-13 - Author: repository-maintainers #### Change Summary - token provenance REQ를 daemon-aware support path와 `daemon_id` evidence 필드 기준으로 보강 #### Intent - dcy-006은 issue/list/rotate와 `/v1/user_info`가 모두 `daemon_id`를 노출하고, release provenance도 `runtime_id` 단독이 아니라 daemon binding을 함께 추적하도록 요구한다. 기존 Approved 본문은 runtime_id 중심이라 운영 절차 기준이 불완전하다. #### Acceptance Criteria Delta - Added: - AC-5: rotate/re-issue 후 `daemon_id`/`runtime_id` 대조 절차 - Updated: - AC-1~3: daemon binding 전제와 `daemon_id` evidence 필드 반영 - Removed: - none #### Impacted Area Delta - Docs: - `README.md` credential matrix / provenance 절차 - Modules: - `app/api/v1_user_info.py`, `app/cli/commands/service_tokens.py` - Tests: - none (문서화 중심 REQ) #### Delivery Trace Delta - Batches: - BAT-009 (release-candidate; REL-005 confirmed input) — README provenance 절차와 release evidence field 정의를 daemon-aware 기준으로 재검토해야 함 - Releases: - REL-005 (confirmed) — 배포 전 daemon-aware provenance field와 rotate invariant를 반영하도록 scope 재검토 필요 #### Revalidation Impact - Reverification Needed: yes - Existing Implementation Invalidated: no - Status Recommendation: keep-current - Follow-up Action: BAT-009 구현/verification 전에 README와 release evidence 템플릿을 daemon-aware 필드 기준으로 조정한다. #### Validation Plan - README.md와 release evidence 예시가 `daemon_id`, `runtime_id`, rotate invariant를 모두 설명하는지 코드 리뷰로 확인한다. - REQ-005, REQ-007, REQ-012 문구와 provenance 절차가 식별자 역할 측면에서 일관적인지 대조한다. ### CHG-20260512-02 - Date: 2026-05-12 - Author: repository-maintainers #### Change Summary - Status: Proposed → Approved (confirm-req 게이트 통과) #### Intent - 필수 필드, AC, Notes blocker 없음 확인 후 승인 전환 #### Acceptance Criteria Delta - Added: 없음 - Updated: 없음 - Removed: 없음 #### Impacted Area Delta - Docs: 없음 - Modules: 없음 - Tests: 없음 #### Delivery Trace Delta - Batches: none - Releases: none #### Revalidation Impact - Reverification Needed: no - Existing Implementation Invalidated: no - Status Recommendation: keep-current - Follow-up Action: none #### Validation Plan - 승인 전환만 수행, 추가 검증 불필요 ### CHG-20260512-01 - Date: 2026-05-12 - Author: repository-maintainers #### Change Summary - REQ 초안 생성 (dcy-005 FR-2, FR-4 통합 기반) #### Intent - release 검증 credential matrix 및 token provenance 확인 절차 문서화 요구사항 정의 #### Acceptance Criteria Delta - Added: - AC-1~4 초안 생성 #### Impacted Area Delta - Docs: - README.md credential matrix 및 token provenance 절차 - Modules: - 없음 (문서화 중심) - Tests: - 없음 #### Delivery Trace Delta - Batches: - none (미배정) - Releases: - none #### Revalidation Impact - Reverification Needed: no - Existing Implementation Invalidated: no - Status Recommendation: keep-current - Follow-up Action: none #### Validation Plan - README.md credential matrix 항목 구분 및 token provenance CLI 절차 존재 확인 - release 문서 기록 정책 준수 여부 확인