- R2 백업 스크립트 (Raft 스냅샷 + fallback) - 경로 기반 백업 스크립트 - 환경변수 템플릿 - README 문서 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
99 lines
2.2 KiB
Markdown
99 lines
2.2 KiB
Markdown
# 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
|