- S3
- AWS
Ci sono diversi approcci per fare backup di un bucket S3, a seconda delle tue esigenze:
1. S3 Replication (soluzione nativa AWS)
La più robusta per backup continui:
- Cross-Region Replication (CRR): replica i dati in un’altra regione AWS
- Same-Region Replication (SRR): replica nella stessa regione ma in un altro bucket
Vantaggi: automatico, quasi real-time, gestisce versioning
# Configurazione via CLI
aws s3api put-bucket-replication \
--bucket source-bucket \
--replication-configuration file://replication.json
2. AWS Backup
Servizio gestito per backup schedulati:
- Backup point-in-time
- Retention policies configurabili
- Ripristino semplificato
3. Sync manuale/schedulato con AWS CLI
Soluzione più flessibile e economica:
# Backup completo
aws s3 sync s3://bucket-sorgente s3://bucket-backup
# Con cron per backup schedulati
0 2 * * * aws s3 sync s3://bucket-sorgente s3://bucket-backup --delete
4. Versioning S3 + Lifecycle Policies
Attiva il versioning sul bucket originale:
aws s3api put-bucket-versioning \
--bucket nome-bucket \
--versioning-configuration Status=Enabled
Poi configura lifecycle policies per archiviare versioni vecchie in Glacier/Deep Archive.
5. Backup su storage locale/esterno
# Download locale
aws s3 sync s3://bucket-sorgente /path/locale/backup
# Con rclone (più flessibile per altri cloud)
rclone sync s3:bucket-sorgente /backup/locale
Cosa ti conviene?
- Budget limitato + backup occasionali: sync schedulato con CLI
- Dati critici: S3 Replication + Versioning
- Compliance/retention: AWS Backup con policy di retention
- Backup multi-cloud: rclone verso altro provider
Che tipo di dati hai nel bucket e con che frequenza cambiano? Così ti suggerisco la soluzione più adatta.
Ecco come configurare AWS Backup per il tuo bucket S3:
1. Prerequisiti
Prima di tutto, verifica che il bucket abbia il versioning abilitato (obbligatorio per AWS Backup):
aws s3api put-bucket-versioning \
--bucket nome-tuo-bucket \
--versioning-configuration Status=Enabled
2. Dalla Console AWS
Step 1: Crea un Backup Plan
- Vai su AWS Backup nella console
- Clicca su Backup plans → Create backup plan
- Scegli tra:
- Start with a template (es. Daily backups)
- Build a new plan (personalizzato)
Step 2: Configura il piano
- Backup frequency: Daily, Weekly, Monthly
- Backup window: orario di inizio (es. 02:00 AM)
- Retention period: quanto tempo conservare i backup (es. 30 giorni)
- Transition to cold storage: opzionale, per costi ridotti dopo X giorni
Step 3: Assegna le risorse
- In Resource assignments → Assign resources
- Nome dell’assignment (es. “S3-bucket-backup”)
- Resource selection:
- Scegli Include specific resource types → S3
- Seleziona il tuo bucket specifico
Step 4: IAM Role
AWS Backup crea automaticamente un ruolo IAM oppure puoi usarne uno esistente con i permessi necessari.
3. Via AWS CLI
# 1. Crea un Backup Vault (dove salvare i backup)
aws backup create-backup-vault --backup-vault-name my-s3-vault
# 2. Crea un Backup Plan
aws backup create-backup-plan --backup-plan file://backup-plan.json
File backup-plan.json:
{
"BackupPlanName": "S3-Daily-Backup",
"Rules": [
{
"RuleName": "DailyBackup",
"TargetBackupVaultName": "my-s3-vault",
"ScheduleExpression": "cron(0 2 * * ? *)",
"StartWindowMinutes": 60,
"CompletionWindowMinutes": 120,
"Lifecycle": {
"DeleteAfterDays": 30
}
}
]
}
# 3. Assegna il bucket al piano (usa l'ID del piano dal comando precedente)
aws backup create-backup-selection \
--backup-plan-id <BACKUP_PLAN_ID> \
--backup-selection file://selection.json
File selection.json:
{
"SelectionName": "S3BucketSelection",
"IamRoleArn": "arn:aws:iam::ACCOUNT_ID:role/service-role/AWSBackupDefaultServiceRole",
"Resources": [
"arn:aws:s3:::nome-tuo-bucket"
]
}
4. Verifica e Monitoraggio
- Vai su AWS Backup → Jobs per vedere i backup in esecuzione
- Controlla Protected resources per verificare che il bucket sia incluso
- Primo backup parte alla scheduled time configurata
5. Restore di un backup
Quando serve ripristinare:
- AWS Backup → Protected resources
- Seleziona il bucket
- Scegli un recovery point
- Restore → configura bucket di destinazione
Costi da considerare
- Storage dei backup (simile a S3 Standard)
- Possibilità di transition a cold storage per ridurre costi
- No costi per restore verso S3 (ma sì verso altre destinazioni)
Hai già il versioning attivo sul bucket o devo darti i dettagli anche per quello?
Ho questo errore:
IAM Role does not have sufficient permissions to execute the backup
Questo errore significa che il ruolo IAM non ha i permessi necessari per accedere al bucket S3. Ecco come risolvere:
1. Verifica il ruolo IAM utilizzato
Vai su AWS Backup → il tuo Backup Plan → Resource assignments e controlla quale ruolo IAM è associato (probabilmente AWSBackupDefaultServiceRole).
2. Aggiungi i permessi mancanti
Opzione A: Via Console IAM
- Vai su IAM → Roles
- Cerca il ruolo usato (es.
AWSBackupDefaultServiceRole) - Clicca su Add permissions → Attach policies
- Aggiungi la policy: AWSBackupServiceRolePolicyForS3Backup
Opzione B: Crea/Aggiorna policy personalizzata
Se la policy AWS non basta, aggiungi una inline policy al ruolo:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetInventoryConfiguration",
"s3:PutInventoryConfiguration",
"s3:ListBucketVersions",
"s3:ListBucket",
"s3:GetBucketVersioning",
"s3:GetBucketNotification",
"s3:PutBucketNotification",
"s3:GetBucketLocation",
"s3:GetBucketTagging"
],
"Resource": "arn:aws:s3:::nome-tuo-bucket"
},
{
"Effect": "Allow",
"Action": [
"s3:GetObjectAcl",
"s3:GetObject",
"s3:GetObjectVersionTagging",
"s3:GetObjectVersionAcl",
"s3:GetObjectTagging",
"s3:GetObjectVersion"
],
"Resource": "arn:aws:s3:::nome-tuo-bucket/*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets"
],
"Resource": "*"
}
]
}
3. Aggiungi Trust Relationship
Verifica che il ruolo abbia la trust relationship corretta:
- Nel ruolo IAM, vai su Trust relationships
- Deve contenere:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "backup.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
4. Via AWS CLI
# Crea il ruolo se non esiste
aws iam create-role \
--role-name AWSBackupServiceRoleForS3 \
--assume-role-policy-document file://trust-policy.json
# Attacca la policy AWS gestita
aws iam attach-role-policy \
--role-name AWSBackupServiceRoleForS3 \
--policy-arn arn:aws:iam::aws:policy/AWSBackupServiceRolePolicyForS3Backup
# Attacca la policy personalizzata (se necessaria)
aws iam put-role-policy \
--role-name AWSBackupServiceRoleForS3 \
--policy-name S3BackupPolicy \
--policy-document file://s3-backup-policy.json
5. Riprova il backup
Dopo aver aggiunto i permessi:
- Aspetta 1-2 minuti per la propagazione
- Vai su AWS Backup → Jobs → Create on-demand backup per testare subito
- Oppure aspetta il prossimo backup schedulato
6. Ulteriore troubleshooting
Se l’errore persiste, controlla anche:
# Verifica bucket policy - non deve bloccare AWS Backup
aws s3api get-bucket-policy --bucket nome-tuo-bucket
# Verifica se ci sono KMS encryption issues
aws s3api get-bucket-encryption --bucket nome-tuo-bucket
Se il bucket usa KMS encryption, il ruolo IAM ha bisogno anche di:
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:DescribeKey",
"kms:GenerateDataKey"
],
"Resource": "arn:aws:kms:REGION:ACCOUNT_ID:key/KEY_ID"
}
Prova ad attaccare la policy AWSBackupServiceRolePolicyForS3Backup al ruolo e fammi sapere se risolve!