Files
obsidian/infra/vault.md
kappa 2356b86d36 obsidian: 정본 문서에서 히스토리/인시던트 분리 완료
15개 정본 문서에서 날짜별 변경이력, 인시던트 기록, 폐기된 구현 상세를
history/ 디렉토리로 분리. 정본은 현재 상태만 기술하는 백서 형태로 정리.
각 정본에 history 위키링크 추가.

분리된 history 파일 12건:
- apisix git push 500, k3s postgresql migration, apisix→traefik 전환
- netbis DDoS 공격, gitea 이전/분리, usb 2.5g hang + NFS hard mount
- supabase→patroni, apisix etcd 통합/분리, anomaly-detect 재설계
- patroni failover incident, zlambda nixos migration, ops-agents setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 12:09:21 +09:00

66 lines
3.5 KiB
Markdown

---
title: Vault 시크릿 관리
updated: 2026-03-12
tags: [infra, vault, security]
---
## K3s 배포
HashiCorp Vault v1.21.2, K3s에 HA Raft 3노드로 배포 (Helm chart hashicorp/vault 0.32.0). namespace: vault. 스토리지: Longhorn 10Gi PVC. Unseal key 5개 (threshold 3), 키 파일: ~/vault-keys.json
## 접근
- UI/API: https://hcv.inouter.com
- 트래픽 흐름: BunnyCDN (pull zone: inouter, ID 5316471) → SafeLine WAF → [[apisix]] (라우트 hcv-inouter-com) → K3s Traefik (192.168.9.134/140/214:443) → vault-active:8200
- K3s Ingress: vault-ui (class traefik, TLS wildcard-inouter-com-tls)
- APISIX upstream: hcv-inouter-com (roundrobin, 3노드 443)
## Root Token
Vault root token은 만료 없음 (TTL: 0s)
## 접근 정책
접근 정책: infra-read(읽기 전용), infra-admin(읽기/쓰기)
## 시크릿 구조 (KV v2)
카테고리별 정리:
| 카테고리 | 경로 | 내용 |
|----------|------|------|
| infra/ | apisix, argocd, cert-manager, cf-tunnel-manager, google/eab, k8s/infra-tool, safeline, ssh, ssh/id_ed25519, tailscale | 인프라 서비스 |
| cloud/ | alibaba, aws, backblaze, backblaze/restic, bunnycdn, cloudflare, cloudflare/r2, linode, vultr, zenlayer | 클라우드 프로바이더 |
| database/ | postgres, redis, bunnydb/cs-blocklist | DB |
| apps/ | gitea, gitea/registry, myapp, n8n, nocodb, telegram-ai-support, waf-saas | 자체 앱/서비스 |
| ai/ | brave, context7, google/drive-mcp, openai, openrouter, pinecone, testsprite, vertex | AI/LLM API |
| messaging/ | discord/bot, discord/nocodb-webhook, mailgun/api-key, mailgun/smtp, telegram | 메시징/알림 |
| company/ | bank, info, ironclad, korbit, koreaexim, popbill | 회사/비즈니스 |
| product/ | irondesk/ton-wallet, irondesk/tron | 제품 관련 |
| domain/ | globalping, maxmind, namecheap, namecheap/api, namecheap/api-server, namecheap/deposit-api, namecheap/registrant | 도메인/DNS |
| auth/ | api-keys/openai, api-keys/stripe, google/ca/external-account-key, google/ca/service-account | 인증 |
## SSH CA (Signed Certificates)
Vault SSH Secrets Engine (ssh-client-signer/) 활성화. CA 키: ed25519. 역할: admin (allowed_users: root,kaffa,admin, TTL 8h, max 24h).
CA 등록 완료 서버:
- [[infra-hosts|apisix-osaka]] (100.108.39.107) — root
- [[infra-hosts|incus-jp1]] (100.109.123.1) — kaffa
- [[infra-hosts|incus-kr1]] (100.84.111.28) — kaffa
- [[infra-hosts|incus-kr2]] (100.119.109.41) — kaffa
- [[zlambda]] (100.78.51.18, 구 sandbox-tokyo) — root **[2026-04-08 NixOS 재설치 후 미등록, 재등록 필요]**
- [[infra-hosts|jump-seoul]] (100.120.61.54) — admin
미등록: safeline-osaka (응답 없음)
자동화: ~/.ssh/vault-sign.sh가 인증서 만료 시 자동 재발급 (vault CLI 기반). 인증서에 root,kaffa,admin principals 포함. ~/.ssh/config에 Match exec로 연동. `ssh apisix-osaka` 등 일반 SSH처럼 사용 가능.
## MCP 서버
vault-mcp-server v0.2.0 (hashicorp/vault-mcp-server:0.2.0 Docker 이미지). K3s vault namespace에 Deployment로 배포. streamable-http 모드, 엔드포인트: https://hcv.inouter.com/mcp. 내부 통신: vault-active.vault.svc.cluster.local:8200. token은 Secret vault-mcp-token에 저장. Claude Code MCP 설정: type http, url https://hcv.inouter.com/mcp. K3s Ingress vault-mcp가 /mcp 경로를 vault-mcp-server Service(8080)로 라우팅. 로컬 바이너리도 /usr/local/bin/vault-mcp-server에 설치됨.
## 관련 서비스
[[cert-manager]], [[gitea]], [[irondesk]] 등에서 Vault 시크릿을 참조