# 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://.r2.cloudflarestorage.com # Vault 복원 (Raft) vault operator raft snapshot restore restore.snap ``` ## 라이선스 MIT