원인: Grok-4-fast agentic 분석기가 더미 IP(1.1.1.1, 1.2.3.4 시퀀스), Cloudflare 엣지 IP(172.70.x), 자체 Linode IDC 대역(45.79.x)을 path-enumeration으로 오탐 ban. 같은 기간 hub 시나리오는 진짜 스캐너 1건(India SoloRDP)을 정확히 잡음. 작업: - infra/platform/anomaly-detect.md → deprecated stub - history/2026-04-25-anomaly-detect-removal.md 신규 (폐기 사유, 재가동 조건 정리) - crowdsec-safeline.md acquisition 다이어그램에서 anomaly-detect 분기 제거 - infra/compute/infra-hosts.md hp2 default 5→4 갱신 - infra/platform/_index.md, history/_index.md 인덱스 갱신 - infra/security/vault.md apps 목록에서 항목 제거 (apps/anomaly-detect 경로는 비어있음, 유지) 보존: - Vault secret/ai/openrouter (다른 서비스 공용 가능성) - Gitea kaffa/anomaly-detect repo (재구축 reference)
112 lines
6.8 KiB
Markdown
112 lines
6.8 KiB
Markdown
---
|
|
title: Vault 시크릿 관리
|
|
updated: 2026-04-15
|
|
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 v1)
|
|
|
|
⚠️ **KV v1** — 버전 관리 없음. 덮어쓰기 주의.
|
|
⚠️ **시크릿 읽을 때 모든 키를 확인할 것** — 한 경로에 여러 키가 있음 (예: cloudflare에 api_token과 global_api_key 둘 다 있음)
|
|
|
|
### 전수 목록 (2026-04-15 실측)
|
|
|
|
| 카테고리 | 경로 | 내용 |
|
|
|----------| ai/ | brave, context7, deepseek, google/drive-mcp, openai, openrouter, pinecone, testsprite, vertex |
|
|
| apps/ | cfb-manager, cf-multisite, discord, figma, gitea, gitea/registry, k3s, myapp, n8n, nocodb, ops-agents-ssh, outline, portainer, postgres, sftpgo, telegram-ai-support, trader, twilio, waf-saas (anomaly-detect 폐기 2026-04-25 — apps 경로는 비어있음, 유지) |
|
|
| auth/ | api-keys/openai, api-keys/stripe, github/oauth-gitea, google/ca/external-account-key, google/ca/service-account, google/oauth-gitea |
|
|
| cloud/ | alibaba, aws, backblaze, backblaze/restic, bunnycdn, cloudflare, cloudflare-netbis, cloudflare/r2, cloudflare/turnstile-crowdsec-captcha, cloudflare/turnstile-inouter-bunny, latitude, lightsail, linode, r2-gitea, r2-multisite, r2-sftpgo, supabase, vultr, zenlayer |
|
|
| company/ | bank, info, ironclad, korbit, koreaexim, popbill |
|
|
| database/ | bunnydb/cs-blocklist, postgres, redis |
|
|
| domain/ | globalping, maxmind, namecheap, namecheap/api, namecheap/api-server, namecheap/deposit-api, namecheap/registrant |
|
|
| infra/ | apisix, argocd, cert-manager, cf-tunnel-manager, crowdsec-bunny-bouncer, google/eab, ilo, k8s/infra-tool, mariadb, safeline, ssh, ssh/id_ed25519, tailscale, vault-sync |
|
|
| messaging/ | discord/bot, discord-brokkr, discord/claudechannel, discord-claude-code, discord/nocodb-webhook, discord/webhook-heimdall, discord/webhook-relay, mailgun/api-key, mailgun/smtp, telegram |
|
|
| openclaw/ | discord/main-bot, gateway/local, gitea/main, integrations/discord, oauth/gmail, runtime/test, test, tools/brave |
|
|
| product/ | irondesk/ton-wallet, irondesk/tron |
|
|
|
|
|
|
### 자주 사용하는 시크릿 (빠른 참조)
|
|
|
|
| 용도 | 경로 | 주요 키 | 주의사항 |
|
|
|------|------|---------|----------|
|
|
| **Cloudflare API** | `cloud/cloudflare` | `api_token` (제한), **`global_api_key`** (전체 권한), `email`, `account_id` | Rulesets/Firewall/Rate Limits는 `global_api_key`만 접근 가능 |
|
|
| BunnyCDN API | `cloud/bunnycdn` | `api_key` | |
|
|
| Gitea API | `apps/gitea` | `api_token`, `url`, `admin_password` | |
|
|
| Outline API | `apps/outline` | `api-key` (kappa), `brokkr-api-key` (에이전트) | |
|
|
| Portainer API | `apps/portainer` | `api_token`, `url` | |
|
|
| Turnstile (crowdsec) | `cloud/cloudflare/turnstile-crowdsec-captcha` | `sitekey`, `secret_key` | |
|
|
| Mailgun | `messaging/mailgun/api-key` | | |
|
|
| Discord 봇 | `messaging/discord/bot` | | |
|
|
| ops 에이전트 SSH | `apps/ops-agents-ssh` | `private_key`, `public_key` | |
|
|
|
|
## 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 서버
|
|
|
|
### 실 배포 (2026-04-15 정정)
|
|
|
|
vault-mcp-server v0.2.0 은 **jp1 Incus `vault` 컨테이너 (10.253.101.58) 단일 인스턴스**. systemd 유닛 `vault-mcp-server.service`로 streamable-http 모드 가동 (`--transport-host=0.0.0.0 --transport-port=8080 --mcp-endpoint=/mcp`). 같은 컨테이너에 HashiCorp Vault 본체(포트 8200)도 동일 프로세스 공간에 존재 → vault 백엔드는 `http://127.0.0.1:8200`.
|
|
|
|
> [!warning] 과거 문서 오류 정정 (2026-04-15)
|
|
> 이전 기록에 "K3s vault namespace Deployment 배포", "vault-active.vault.svc.cluster.local:8200" 이라 적혀 있었으나 실제와 다름. K3s 안에는 vault 파드/Deployment 없음. 상세: `history/2026-04-15-vault-mcp-duplicate-investigation.md`
|
|
|
|
### 접근 경로 (3가지, 모두 같은 jp1 프로세스로 수렴)
|
|
|
|
```
|
|
hcv.inouter.com → Traefik@K3s:443 → 10.253.101.58:8200 (Vault UI/API)
|
|
vault-mcp.inouter.com → Traefik@K3s:443 → 10.253.101.58:8080 (MCP)
|
|
http://10.253.101.58:8080/mcp (Tailscale 직결, kappa Claude 현행)
|
|
```
|
|
|
|
K3s `tools` 네임스페이스의 `vault-mcp` 는 **Pod 없는 리버스 프록시 파사드**: Service(selector 비움) + 수동 EndpointSlice가 10.253.101.58 로 고정 + IngressRoute 2개(hcv, vault-mcp). ArgoCD 앱 `argocd/vault-mcp`, Helm chart `kaffa/helm-charts charts/app` + `values/vault-mcp.yaml` (deployment 없는 ingress-only 렌더링).
|
|
|
|
### 주의
|
|
|
|
- **`hcv.inouter.com/mcp` 는 MCP 엔드포인트 아님** — Vault가 /mcp 경로를 UI(/ui/)로 307 리다이렉트. 외부 MCP hostname 필요하면 `vault-mcp.inouter.com/mcp` 사용.
|
|
- 외부 공개 경로는 BunnyCDN/Cloudflare 비경유 (Traefik wildcard cert 직접 TLS 종단). 내부 LAN/Tailscale 전용.
|
|
- kappa Claude MCP는 현재 `http://10.253.101.58:8080/mcp` (Tailscale 암호화 의존). 장기적으로 `https://vault-mcp.inouter.com/mcp` 로 이전 검토 가능 (Traefik TLS + wildcard cert 혜택).
|
|
|
|
### 재배포 자료
|
|
|
|
- Helm chart: `gitea.inouter.com/kaffa/helm-charts.git charts/app`
|
|
- values: `kaffa/helm-charts values/vault-mcp.yaml`
|
|
- jp1 컨테이너 내부 바이너리: `/usr/local/bin/vault-mcp-server`
|
|
- systemd: `/etc/systemd/system/vault-mcp-server.service`
|
|
|
|
## 관련 서비스
|
|
|
|
[[cert-manager]], [[gitea]], [[irondesk]] 등에서 Vault 시크릿을 참조
|