Saat banyak tim memakai satu infrastruktur backup, isolasi menjadi syarat keamanan. Episode ini menerapkan model multi-tenant: satu repository per tenant dan satu key per repo, isolasi credential, least privilege pada storage, serta audit akses berkala sebagai bagian dari hardening.

Episode 14 mengamankan satu repository. Tapi di perusahaan, satu infrastruktur backup melayani banyak tim: tim payments, tim web, tim data. Bila semua berbagi satu repository dan satu kunci, satu insiden keamanan di satu tim bisa membocorkan semuanya — atau satu kesalahan menghapus riwayat tim lain.
Episode ini adalah hardening untuk skala tim: model multi-tenant yang membatasi ledakan dampak.
Aturan emas: jangan pernah mencampur data dari tenant berbeda dalam satu repository. Alasan:
check dan prune satu tenant tidak memblokir tenant lain.Pada rest-server, setiap tenant mendapat path sendiri:
/srv/restic/
├── payments/
├── web/
└── data-platform/Client masing-masing menunjuk ke URL-nya:
restic -r rest:https://backup.example.com/payments backup /data
restic -r rest:https://backup.example.com/web backup /dataSelaras dengan aturan di atas, tiap repository punya repo key (password) sendiri — hasil alami karena setiap restic init menghasilkan master key baru. Jangan pernah memakai ulang passphrase antar tenant (kebijakan episode 13). Jika satu passphrase bocor, hanya satu tenant yang terdampak.
Buat user htpasswd berbeda untuk tiap tenant:
htpasswd -cb /etc/restic/htpasswd payments 'pass-payments'
htpasswd -cb /etc/restic/htpasswd web 'pass-web'Siapkan IAM user + policy terpisah yang hanya mengizinkan akses ke bucket sendiri:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "arn:aws:s3:::backup-web/*"
}
]
}Credential tiap tenant disimpan di secret manager masing-masing, bukan di satu tempat bersama.
Prinsipnya: beri izin paling minimal yang dibutuhkan tugas.
PutObject/GetObject/ListBucket untuk bucket-nya. Tidak butuh izin mengelola bucket (DeleteBucket, IAM).User=restic), direktori data chown ke user tersebut.Match User + ForceCommand (episode 14) agar user backup tidak bisa mengeksekusi shell umum.sudo chown -R restic:restic /srv/restic
sudo chmod 700 /srv/resticHardening tidak selesai tanpa observasi. Buat audit rutin:
DeleteObject — siapa yang menghapus, kapan.restic key list per repo; hapus kunci anggota yang keluar tim.restic -r rest:https://backup.example.com/payments key listWarning
Pemisahan repository memperbanyak jumlah password yang harus dikelola — jangan jadikan alasan untuk menyederhanakan ke "satu password semua repo". Gunakan secret manager dan naming yang jelas, bukan memendek proses keamanan.
restic key list, log akses, dan jejak DeleteObject.Di episode 16 selanjutnya kita memasuki ruang pemulihan: troubleshooting & recovery — debugging dengan RESTIC_DEBUG dan --verbose, kasus umum seperti repo lock, S3 timeout, dan password salah, simulasi bencana dengan restore, serta pemulihan dari repository corrupt.