Initial vault-backup project

- R2 백업 스크립트 (Raft 스냅샷 + fallback)
- 경로 기반 백업 스크립트
- 환경변수 템플릿
- README 문서

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-30 22:09:45 +09:00
commit 750f8ac241
5 changed files with 375 additions and 0 deletions

98
README.md Normal file
View File

@@ -0,0 +1,98 @@
# Vault Backup to Cloudflare R2
HashiCorp Vault 시크릿을 Cloudflare R2에 자동 백업하는 도구
## 구조
```
vault-backup/
├── scripts/
│ ├── vault-backup-r2.sh # 전체 백업 (Raft 스냅샷 + fallback)
│ └── vault-backup-mcp.sh # 경로 기반 백업
├── docs/
├── old-backups/ # 기존 로컬 백업
├── .env.example # 환경변수 예제
└── README.md
```
## 요구사항
- `curl`, `jq`, `aws` CLI
- Cloudflare R2 API 토큰
- Vault 접근 토큰
## 설정
### 1. 환경변수 설정
```bash
cp .env.example .env
vi .env
```
### 2. R2 API 토큰 생성
1. [Cloudflare Dashboard](https://dash.cloudflare.com) → R2
2. **Manage R2 API Tokens****Create API Token**
3. 권한: `Object Read & Write`
4. 버킷: `vault-backup`
### 3. Account ID 확인
Cloudflare Dashboard → 우측 하단 **Account ID** 복사
## 사용법
### 수동 백업
```bash
source .env
./scripts/vault-backup-r2.sh
```
### 자동 백업 (Cron)
```bash
# 매일 새벽 3시 백업
0 3 * * * cd ~/vault-backup && source .env && ./scripts/vault-backup-r2.sh >> logs/backup.log 2>&1
```
### 특정 이름으로 백업
```bash
./scripts/vault-backup-r2.sh my-custom-backup-name
```
## 백업 방식
| 스크립트 | 방식 | 용도 |
|----------|------|------|
| `vault-backup-r2.sh` | Raft 스냅샷 우선, 실패시 시크릿 export | 전체 백업 |
| `vault-backup-mcp.sh` | 지정된 경로만 백업 | 선택적 백업 |
## 환경변수
| 변수 | 설명 | 기본값 |
|------|------|--------|
| `VAULT_ADDR` | Vault 서버 주소 | - |
| `VAULT_TOKEN` | Vault 인증 토큰 | - |
| `R2_ACCOUNT_ID` | Cloudflare Account ID | - |
| `R2_ACCESS_KEY` | R2 Access Key ID | - |
| `R2_SECRET_KEY` | R2 Secret Access Key | - |
| `R2_BUCKET` | R2 버킷 이름 | `vault-backup` |
| `RETENTION_DAYS` | 백업 보존 기간 (일) | `30` |
## 복원
```bash
# R2에서 다운로드
aws s3 cp s3://vault-backup/vault-snapshot-YYYYMMDD-HHMMSS.snap ./restore.snap \
--endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com
# Vault 복원 (Raft)
vault operator raft snapshot restore restore.snap
```
## 라이선스
MIT