Questa pagina descrive come completare una semplice migrazione da Amazon Simple Storage Service (Amazon S3) a Cloud Storage. Con una semplice migrazione, puoi utilizzare gli strumenti e le librerie esistenti per generare richieste REST autenticate ad Amazon S3 per inviare invece richieste autenticate a Cloud Storage.
Se non hai mai utilizzato Cloud Storage e non utilizzerai direttamente l'API, valuta la possibilità di utilizzare la console Google Cloud per configurare e gestire i trasferimenti. La console Google Cloud fornisce un'interfaccia grafica per Cloud Storage che ti permette di eseguire molte delle attività di archiviazione utilizzando solo un browser, compresa la migrazione dei dati da Amazon S3 a Cloud Storage.
Se vuoi che Cloud Storage archivi un backup dei tuoi dati Amazon S3, valuta l'utilizzo dei trasferimenti basati sugli eventi, che utilizzano le notifiche degli eventi Amazon S3 per mantenere automaticamente sincronizzato un bucket Cloud Storage con l'origine Amazon S3.
Eseguire la migrazione da Amazon S3 a Cloud Storage in un semplice scenario di migrazione
Per effettuare richieste a Cloud Storage, devi completare i seguenti passaggi:
- Imposta un progetto Google Cloud predefinito.
- Recupera una chiave HMAC (Hash-based Message Authentication Code).
Apporta le seguenti modifiche negli strumenti o nelle librerie esistenti:
- Modifica l'endpoint della richiesta in modo che utilizzi l'endpoint di richiesta API XML di Cloud Storage.
- Sostituisci l'accesso e la chiave segreta di Amazon Web Services (AWS) con l'ID di accesso e il secret corrispondenti per Cloud Storage (collettivamente chiamati chiave HMAC Cloud Storage).
Assicurati che le intestazioni
x-amz-
utilizzino valori Cloud Storage supportati. Ad esempio,x-amz-storage-class
deve utilizzare una delle classi di archiviazione Cloud Storage disponibili.Quando utilizzi l'API XML di Cloud Storage in un semplice scenario di migrazione, se specifichi l'identificatore della firma
AWS
nell'intestazioneAuthorization
, consenti a Cloud Storage di sapere che le intestazionix-amz-*
e la sintassi XML di Amazon S3 ACL nella richiesta sono previste. Cloud Storage elabora le intestazionix-amz-*
che hanno un equivalentex-goog-*
, come quelle elencate nella tabella delle intestazioni.
Dopo aver apportato queste modifiche, puoi iniziare a utilizzare gli strumenti e le librerie esistenti per inviare richieste HMAC a Cloud Storage.
Ad esempio, i seguenti esempi mostrano come elencare i bucket Cloud Storage utilizzando l'SDK Amazon S3:
Go
Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go di Cloud Storage.
Per eseguire l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Java
Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java di Cloud Storage.
Per eseguire l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Python
Per maggiori informazioni, consulta la documentazione di riferimento dell'API Python di Cloud Storage.
Per eseguire l'autenticazione in Cloud Storage, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Imposta un progetto predefinito
Per utilizzare Cloud Storage in uno scenario di migrazione semplice, ti consigliamo di impostare un progetto predefinito, che Cloud Storage utilizza per eseguire determinate operazioni, ad esempio il servizio GET
o il bucket PUT
. Se non imposti un progetto predefinito, devi specificare un'intestazione di progetto in determinate richieste.
Per impostare un progetto predefinito:
- Apri la pagina Impostazioni di Cloud Storage nella console Google Cloud.
- Seleziona la scheda Interoperabilità.
Fai clic su Imposta PROJECT-ID come progetto predefinito nella sezione Progetto predefinito per l'accesso interoperabile.
Se il progetto è già quello predefinito, vedrai PROJECT-ID è il progetto predefinito per l'accesso interoperabile.
Questo è ora il tuo progetto predefinito. Puoi modificare il progetto predefinito in qualsiasi momento scegliendo un altro progetto e seguendo questi passaggi.
In alternativa, specifica un'intestazione di progetto
Anziché impostare un progetto predefinito o in aggiunta a farlo, puoi utilizzare l'intestazione x-amz-project-id
nelle singole richieste che richiedono di specificare un progetto.
- Una richiesta che utilizza
x-amz-project-id
utilizza il progetto specificato nell'intestazione, anche se esiste già un progetto predefinito.
L'intestazione x-amz-project-id
è utile quando:
- Stai lavorando con più progetti.
- Le richieste vengono effettuate da un account di servizio associato a un altro progetto, perché gli account di servizio utilizzano il progetto padre come progetto predefinito.
Tieni presente che Amazon S3 non ha progetti, pertanto, a seconda degli strumenti o delle librerie client in uso, specificare un'intestazione x-amz-project-id
potrebbe non essere un'opzione. In questo caso, devi impostare un progetto predefinito.
Utilizza chiavi HMAC
Per utilizzare l'API XML di Cloud Storage in uno scenario di migrazione semplice, usa le chiavi HMAC (Hash-based Message Authentication Code) di Cloud Storage per le credenziali. In genere, devi creare una chiave HMAC associata a un account di servizio. In alternativa, puoi utilizzarne una associata a un account utente.
Autenticazione in uno scenario di migrazione semplice
Utilizzare l'intestazione Authorization
Per le operazioni in uno scenario di migrazione semplice che richiede l'autenticazione, includi un'intestazione della richiesta Authorization
proprio come fai per le richieste ad Amazon S3. La sintassi dell'intestazione Authorization
per una richiesta Amazon S3 è:
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
In un semplice scenario di migrazione, devi modificare solo l'intestazione per utilizzare l'ID di accesso HMAC di Cloud Storage e assicurarti che il valore Signature
che colleghi venga calcolato con la chiave secret HMAC di Cloud Storage:
Authorization: ALGORITHM Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Le parti dell'intestazione Authorization
sono:
ALGORITHM: l'algoritmo e la versione di firma che stai utilizzando. L'utilizzo di
AWS4-HMAC-SHA256
indica che stai utilizzando una firma HMAC V4 e intendi inviare le intestazionix-amz-*
. Puoi anche utilizzareGOOG4-HMAC-SHA256
, per indicare che stai utilizzando una firma HMAC V4 e intendi inviare intestazionix-goog-*
.GOOG-ACCESS-ID: l'ID accesso identifica l'entità che effettua e firma la richiesta. Con una semplice migrazione, sostituisci l'ID della chiave di accesso di Amazon Web Service (AWS) che utilizzi per accedere ad Amazon S3 con il tuo ID di accesso HMAC Cloud Storage. L'ID accesso HMAC di Cloud Storage inizia con
GOOG
.CREDENTIAL_SCOPE: l'ambito delle credenziali, come definito nella firma. In una semplice migrazione, non è necessario modificare l'ambito delle credenziali se utilizzi
AWS4-HMAC-SHA256
come valore ALGORITHM.SIGNED_HEADERS: un elenco separato da punto e virgola di nomi di intestazioni che devono essere inclusi per firmare questa richiesta. Tutte le intestazioni devono essere minuscole e ordinate per codice carattere.
Un esempio di stringa di intestazione firmata in stile Amazon S3 ha il seguente aspetto:
content-type;host;x-amz-date
In una semplice migrazione, non è necessario apportare modifiche alla stringa dell'intestazione firmata.
SIGNATURE: la firma che consente di autenticare la richiesta. Con una semplice migrazione, sostituisci le informazioni della chiave di accesso AWS con le informazioni della chiave HMAC Cloud Storage equivalenti.
Esempio di richiesta di autenticazione
I seguenti esempi caricano un oggetto denominato /europe/france/paris.jpg
in un bucket denominato my-travel-maps
, applicano l'ACL public-read
predefinito e definiscono un'intestazione dei metadati personalizzata per i revisori. Ecco la richiesta a un bucket
in Amazon S3:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.s3.amazonaws.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Ecco la richiesta per un bucket in Cloud Storage:
PUT europe/france/paris.jpg HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Mon, 11 Mar 2019 23:46:19 GMT Content-Length: 888814 Content-Type: image/jpg x-amz-acl: public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer: joe,jane Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/20190311/us-east-1/s3/aws4_request, SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-date;x-amz-meta-reviewer, Signature=SIGNATURE
Ecco la richiesta canonica corrispondente creata per questa richiesta:
PUT /europe/france/paris.jpg content-length:888814 content-type:image/jpg host:my-travel-maps.storage.googleapis.com x-amz-acl:public-read x-amz-date:20190311T192918Z x-amz-meta-reviewer:joe,jane content-length,content-type,host,x-amz-acl,x-amz-date,x-amz-meta-reviewer 82e3da8b3f35989512e8d428add7eca73ab0e5f36586e66fbad8e1051343cbd2
Ecco la stringa-segno corrispondente che è stata creata per questa richiesta:
AWS4-HMAC-SHA256 20190311T192918Z 20190311/us-east-1/s3/aws4_request 73918a5ff373d7a03e406fbf9ea35675396b06fca2af76c27a5c451fa783ef65
Questa richiesta non ha fornito un'intestazione Content-MD5, quindi viene visualizzata una stringa vuota nella seconda riga del messaggio.
Controllo dell'accesso in uno scenario di migrazione semplice
Per supportare migrazioni semplici, Cloud Storage accetta gli ACL prodotti da Amazon S3. In uno scenario di migrazione semplice, utilizzi AWS
come identificatore
di firma, che indica a Cloud Storage di aspettarsi la sintassi ACL utilizzando
la sintassi XML ACL di Amazon S3. Devi assicurarti che gli ACL Amazon S3 che utilizzi vengano mappati al modello ACL di Cloud Storage. Ad esempio, se gli strumenti e le librerie utilizzano la sintassi ACL di Amazon S3 per concedere l'autorizzazione WRITE
al bucket, devono concedere anche l'autorizzazione READ
al bucket perché le autorizzazioni di Cloud Storage sono concentriche. Non è necessario specificare sia l'autorizzazione WRITE
sia l'autorizzazione READ
quando concedi l'autorizzazione WRITE
utilizzando la sintassi di Cloud Storage.
Cloud Storage supporta la sintassi ACL Amazon S3 nei seguenti scenari:
- In una richiesta a Cloud Storage per recuperare gli ACL (ad esempio un oggetto
GET
o una richiesta di un bucketGET
), Cloud Storage restituisce la sintassi Amazon S3 ACL. - In una richiesta a Cloud Storage per applicare ACL (ad esempio, un oggetto
PUT
o una richiesta di un bucketPUT
), Cloud Storage si aspetta di ricevere la sintassi ACL Amazon S3.
L'intestazione Authorization
in uno scenario di migrazione semplice utilizza AWS
per l'identificatore della firma, ma con il tuo ID di accesso Google.
Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
L'esempio seguente mostra una richiesta GET
a Cloud Storage per restituire gli ACL per un oggetto.
GET europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534
La risposta alla richiesta include l'ACL che utilizza la sintassi ACL di Amazon S3.
<?xml version='1.0' encoding='UTF-8'?> <AccessControlPolicy> <Owner> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490 </ID> <DisplayName>OwnerName</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='CanonicalUser'> <ID>00b4903a972faa8bcce9382686e9129676f1cd6e5def1f5663affc2ba4652490</ID> <DisplayName>UserName</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
L'esempio seguente mostra una richiesta PUT
a Cloud Storage per impostare gli ACL per un oggetto. L'esempio mostra il corpo di una richiesta con sintassi
ACL di Amazon S3.
PUT europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.googleapis.com Date: Thu, 21 Feb 2019 23:50:10 GMT Content-Type: application/xml Content-Length: 337 X-Amz-Date: 20190221T235010Z Authorization: AWS4-HMAC-SHA256 Credential=GOOGMC5PDPA5JLZYQMHQHRAX/20190221/region/s3/aws4_request, SignedHeaders=host;x-amz-date, Signature=29088b1d6dfeb2549f6ff67bc3744abb7e45475f0ad60400485805415bbfc534 <?xml version='1.0' encoding='utf-8'?> <AccessControlPolicy> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="AmazonCustomerByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
Infine, in uno scenario di migrazione semplice, puoi utilizzare anche l'identificatore della firma GOOG1
nell'intestazione Authorization
. In questo caso, devi utilizzare la sintassi ACL di Cloud Storage e assicurarti che tutte le intestazioni x-amz-*
vengano modificate in x-goog-*
. Sebbene ciò sia possibile, ti consigliamo di scegliere una migrazione completa per utilizzare tutti i vantaggi di Cloud Storage.
Supporto per la compatibilità dell'API XML con Amazon S3
Per discussioni sull'interoperabilità dell'API XML, consulta Stack Overflow utilizzando il tag google-cloud-storage.
Passaggi successivi
- Pianifica una migrazione da Amazon S3.
- Trasferisci i tuoi dati in Cloud Storage da origini esterne, come Amazon S3 e Archiviazione BLOB di Microsoft Azure, utilizzando Storage Transfer Service.
- Crea trasferimenti basati su eventi che utilizzano le notifiche di eventi Amazon S3 per mantenere sincronizzato un bucket Cloud Storage con Amazon S3.