Come si fa

Lavorare con i bucket S3, B2 e R2 dal Mac

7 min di lettura

In molti flussi di lavoro l’object storage ha preso il posto del server FTP. I siti statici si pubblicano in un bucket, i backup finiscono su Backblaze B2, le immagini escono da Cloudflare R2 perché non fa pagare il traffico in uscita. Parlano tutti la stessa lingua: l’API che Amazon ha disegnato per S3.

Il Mac però non ha un modo integrato per aprire un bucket. «Connessione al server» del Finder non sa cosa sia S3, e le console web vanno bene per un file, ma diventano un supplizio con una cartella di trecento. Questa guida spiega cosa serve per collegarsi dal Mac: endpoint e chiavi, la riga di comando, un client grafico.

Cosa serve: un endpoint e una coppia di chiavi

Ogni servizio compatibile S3 chiede le stesse tre cose:

  • Endpoint — l’indirizzo del server, che di solito contiene la regione.
  • Access Key ID — la metà pubblica della chiave, una specie di nome utente.
  • Secret Access Key — la metà privata, mostrata una sola volta quando crei la chiave. Va custodita come una password.

Gli endpoint dei servizi più diffusi:

ServizioFormato dell’endpointEsempio
Amazon S3s3.<regione>.amazonaws.coms3.eu-south-1.amazonaws.com
Backblaze B2s3.<regione>.backblazeb2.coms3.eu-central-003.backblazeb2.com
Cloudflare R2<account-id>.r2.cloudflarestorage.com1a2b3c….r2.cloudflarestorage.com
Wasabis3.<regione>.wasabisys.coms3.eu-south-1.wasabisys.com
MinIO (in casa)il tuo host e la portanas.local:9000

Backblaze mostra l’endpoint nella scheda di ogni bucket. Cloudflare lo mostra in R2 ▸ il tuo bucket ▸ Impostazioni, e su R2 la regione è sempre auto. Su B2 «keyID» e «applicationKey» sono l’Access Key ID e la Secret Access Key con un altro nome.

Crea una chiave che arrivi solo dove serve. Tutti questi servizi permettono di limitare una chiave a un solo bucket, alcuni anche in sola lettura. Una chiave che vede solo il bucket dei backup non può svuotare per sbaglio quello di produzione, e se finisce nelle mani sbagliate il danno resta circoscritto.

Le cartelle sono un’illusione, e conta saperlo

Un bucket non ha cartelle. Contiene oggetti, ciascuno con una chiave completa come sito/assets/logo.png. Console e client disegnano le cartelle spezzando le chiavi sulla /. Funziona bene, finché non si arriva ai punti in cui l’illusione cede:

  • Rinominare una cartella significa copiare e cancellare ogni oggetto con quel prefisso. Un client può farlo per te, ma su una cartella grande sono molte richieste, non un’operazione istantanea.
  • Le cartelle vuote non esistono da sole: i client creano un oggetto vuoto che finisce con / perché la cartella resti visibile.
  • Niente permessi in stile Unix. Non c’è chmod: l’accesso si governa con le policy del bucket e i permessi della chiave, non con i bit dei file.
  • La data di modifica è la data di caricamento. Non si può dare a un oggetto la data del file originale, e questo pesa sulla sincronizzazione: si confronta per dimensione o per data di caricamento, non per «stessa data che ho sul disco».

Nulla di tutto questo è un difetto del client: l’object storage funziona così.

Opzione 1: la AWS CLI

Lo strumento a riga di comando di Amazon funziona con ogni servizio compatibile S3, non solo con AWS. Si installa con Homebrew (brew install awscli), si inseriscono le chiavi con aws configure e poi si indica l’endpoint giusto:

# Elenca i bucket
aws s3 ls --endpoint-url https://s3.eu-central-003.backblazeb2.com

# Carica un file
aws s3 cp fattura.pdf s3://mio-bucket/fatture/ --endpoint-url https://s3.eu-central-003.backblazeb2.com

# Rispecchia una cartella locale nel bucket (cancella di là ciò che non c'è più in locale)
aws s3 sync ./public s3://mio-sito --delete --endpoint-url https://<account-id>.r2.cloudflarestorage.com

Per Amazon S3 l’opzione --endpoint-url si può omettere. Per script e pipeline è lo strumento giusto. L’opzione --delete di sync è pericolosa esattamente quanto sembra: prima provala con --dryrun.

L’altro classico è rclone (brew install rclone). Parla S3 e altri quaranta servizi e può montare un bucket come disco con rclone mount. Su macOS però il mount richiede macFUSE o un ripiego via NFS, e un bucket montato si comporta male con le app che salvano spesso o che si aspettano un accesso casuale veloce.

Opzione 2: un client grafico

Per il lavoro di tutti i giorni (trascinare dentro una cartella, controllare cosa c’è, cancellare una build vecchia) un client a due pannelli è più rapido che scrivere percorsi. In Upstream S3 è un protocollo come FTP o SFTP: il bucket si apre negli stessi due pannelli dei tuoi server, con la stessa coda di trasferimento.

Passo per passo

  1. Crea una chiave limitata — nella console del servizio crea una chiave d’accesso limitata al bucket che ti serve, e copia la Secret Access Key prima di chiudere la finestra.
  2. Aggiungi un sito con il protocollo S3 — in Upstream premi ⌘N e scegli S3. Nel campo Endpoint metti l’endpoint (per esempio s3.eu-south-1.amazonaws.com), come utente l’Access Key ID e come password la Secret Access Key, che finisce nel Portachiavi di macOS.
  3. Se la chiave vede un solo bucket, entra direttamente lì — una chiave limitata a un bucket spesso non può elencarli tutti. Imposta il bucket come cartella remota (per esempio /mio-bucket) e il sito si aprirà già al suo interno.
  4. Collegati — la radice mostra i bucket, ogni bucket si apre come una cartella, e da lì trascini i file dentro e fuori dal Finder come con qualunque server. La regione viene letta dall’endpoint; se un bucket sta in un’altra regione, l’app la ricava dalla risposta del server e rifirma la richiesta.
  5. Usa gli stessi strumenti dei server — la coda di trasferimento, la sincronizzazione con l’anteprima e il caricamento automatico al salvataggio funzionano anche sui bucket.

I file grandi salgono in parti da 8 MB: se la connessione cade si perde una parte, non l’intero caricamento, e i download interrotti riprendono da dove si erano fermati. L’accesso a S3 fa parte di Upstream FULL, che puoi provare gratis per 7 giorni.

Domande frequenti

Il Finder del Mac può collegarsi ad Amazon S3?

No. «Connessione al server» del Finder supporta SMB, NFS, AFP e FTP in sola lettura, non S3. Per sfogliare un bucket servono la console web, uno strumento a riga di comando come la AWS CLI o rclone, oppure un client che parli S3.

Backblaze B2 è compatibile con gli strumenti S3?

Sì. B2 ha un’API compatibile S3: usa l’endpoint indicato nella scheda del bucket (s3.<regione>.backblazeb2.com), il keyID come Access Key ID e l’applicationKey come Secret Access Key. La master application key dell’account non funziona con l’API S3: crea una application key separata.

Che regione si usa per Cloudflare R2?

auto. R2 non ha regioni nel senso di AWS: agli strumenti che ne chiedono una va data auto, con l’endpoint <account-id>.r2.cloudflarestorage.com.

Perché non posso cambiare i permessi dei file su S3?

Perché gli oggetti non hanno permessi Unix. Chi può leggere o scrivere lo decidono la policy del bucket, i permessi della chiave e, su AWS, le ACL o le impostazioni di accesso pubblico. Un client che ti dice che chmod non è supportato ha ragione.

Perché la sincronizzazione crede che tutti i file del bucket siano cambiati?

Perché la data dell’oggetto è quella del caricamento, non quella del file originale, e gli strumenti che confrontano le date vedono tutto come più nuovo o più vecchio. Confronta per dimensione, oppure lascia che lo strumento ricordi cosa ha caricato — vedi come la sincronizzazione decide cosa è cambiato.

S3 può sostituire SFTP?

Per conservare e distribuire file, spesso sì: costa meno, è più affidabile e cresce senza un server da gestire. Non lo sostituisce quando ti serve un vero file system su un server: eseguire PHP, modificare file di configurazione sul posto, impostare permessi. Lì serve ancora SFTP.

Upstream — il client FTP, SFTP e S3 nativo per macOS

Una coda di trasferimento che puoi mettere in pausa, riprendere e riordinare, sincronizzazione delle cartelle con anteprima dry-run, caricamento automatico, bucket S3 come cartelle e credenziali nel Keychain di macOS. Gratis, chiavi SSH incluse, senza abbonamento.