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,awsCLI- Cloudflare R2 API 토큰
- Vault 접근 토큰
설정
1. 환경변수 설정
cp .env.example .env
vi .env
2. R2 API 토큰 생성
- Cloudflare Dashboard → R2
- Manage R2 API Tokens → Create API Token
- 권한:
Object Read & Write - 버킷:
vault-backup
3. Account ID 확인
Cloudflare Dashboard → 우측 하단 Account ID 복사
사용법
수동 백업
source .env
./scripts/vault-backup-r2.sh
자동 백업 (Cron)
# 매일 새벽 3시 백업
0 3 * * * cd ~/vault-backup && source .env && ./scripts/vault-backup-r2.sh >> logs/backup.log 2>&1
특정 이름으로 백업
./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 |
복원
# 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
Languages
Shell
100%