• S3
  • AWS
Come posso fare dei backup di un mio bucket s3 amazon 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.


Vorrei fare un backup tramite aws backup, come fare?

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

  1. Vai su AWS Backup nella console
  2. Clicca su Backup plansCreate backup plan
  3. 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

  1. In Resource assignmentsAssign resources
  2. Nome dell’assignment (es. “S3-bucket-backup”)
  3. Resource selection:
  • Scegli Include specific resource typesS3
  • 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 BackupJobs 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:

  1. AWS BackupProtected resources
  2. Seleziona il bucket
  3. Scegli un recovery point
  4. 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 PlanResource assignments e controlla quale ruolo IAM è associato (probabilmente AWSBackupDefaultServiceRole).

2. Aggiungi i permessi mancanti

Opzione A: Via Console IAM

  1. Vai su IAMRoles
  2. Cerca il ruolo usato (es. AWSBackupDefaultServiceRole)
  3. Clicca su Add permissionsAttach policies
  4. 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:

  1. Nel ruolo IAM, vai su Trust relationships
  2. 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 BackupJobsCreate 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!