Questa pagina descrive come completare una migrazione semplice da Amazon Simple Storage Service (Amazon S3) a Cloud Storage. In una migrazione semplice, utilizzi gli strumenti e le librerie esistenti per generare richieste REST autenticate ad Amazon S3 per inviare richieste autenticate a Cloud Storage.
Esegui la migrazione da Amazon S3 a Cloud Storage in uno scenario di migrazione semplice
Per inviare richieste a Cloud Storage, devi completare i seguenti passaggi:
x-amz-project-id quando effettui richieste per creare ed elencare i bucket.Nei tuoi strumenti o nelle tue librerie esistenti, apporta le seguenti modifiche:
- Modifica l'endpoint della richiesta in modo da utilizzare l'endpoint della richiesta API XML di Cloud Storage.
- Sostituisci la chiave di accesso e la chiave segreta di Amazon Web Services (AWS) con l'ID di accesso e il secret di Cloud Storage corrispondenti (chiamati collettivamente chiave HMAC di Cloud Storage).
Assicurati che le intestazioni
x-amz-utilizzino valori Cloud Storage supportati. Ad esempio,x-amz-storage-classdeve utilizzare una delle classi di archiviazione di Cloud Storage disponibili.Quando utilizzi l'API XML di Cloud Storage in uno scenario di migrazione semplice, specificando l'identificatore della firma
AWSnell'intestazioneAuthorization, Cloud Storage sa che deve aspettarsi le intestazionix-amz-*e la sintassi XML ACL di Amazon S3 nella tua richiesta. Cloud Storage elabora le intestazionix-amz-*che hanno un equivalentex-goog-*, come quelle elencate nella tabella delle intestazioni, ed elabora l'intestazionex-amz-decoded-content-length.
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 saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Go.
Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Java
Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Java.
Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Python
Per saperne di più, consulta la documentazione di riferimento dell'API Cloud Storage Python.
Per eseguire l'autenticazione in Cloud Storage, configura le Credenziali predefinite dell'applicazione. Per saperne di più, vedi Configura l'autenticazione per le librerie client.
Prima di eseguire gli esempi di codice, imposta la variabile di ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN su s3nsapis.fr.
Specifica un'intestazione del progetto
Nelle richieste che richiedono di specificare un progetto, utilizza l'intestazione x-amz-project-id.
Tieni presente che Amazon S3 non ha progetti, quindi, a seconda degli strumenti o delle librerie client che utilizzi, l'opzione per specificare un'intestazione x-amz-project-id potrebbe non essere disponibile.
Utilizza le chiavi HMAC
Per utilizzare l'API XML di Cloud Storage in uno scenario di migrazione semplice, utilizza 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. Tuttavia, in alternativa puoi utilizzarne una associata a un account utente.
Esegui l'autenticazione in uno scenario di migrazione semplice
Utilizza l'intestazione Authorization
Per le operazioni in uno scenario di migrazione semplice che richiedono l'autenticazione, includi un'intestazione della richiesta Authorization, proprio come faresti 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 uno scenario di migrazione semplice, devi solo modificare l'intestazione per utilizzare l'ID di accesso HMAC di Cloud Storage e assicurarti che il valore Signature allegato sia calcolato con la chiave segreta 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 della firma che stai utilizzando. L'utilizzo di
AWS4-HMAC-SHA256indica che stai utilizzando una firma HMAC V4 e che intendi inviare intestazionix-amz-*. Puoi anche utilizzareGOOG4-HMAC-SHA256, che indica che stai utilizzando una firma HMAC V4 e intendi inviare intestazionix-goog-*, oGOOG4-RSA-SHA256, che indica che stai utilizzando una firma RSA V4 e intendi inviare intestazionix-goog-*.GOOG-ACCESS-ID: l'ID di accesso identifica l'entità che effettua e firma la richiesta. In una migrazione semplice, sostituisci l'ID chiave di accesso di Amazon Web Services (AWS) che utilizzi per accedere ad Amazon S3 con l'ID di accesso HMAC di Cloud Storage. L'ID di accesso HMAC di Cloud Storage inizia con
GOOG.CREDENTIAL_SCOPE: l'ambito delle credenziali, come definito nella firma. In una migrazione semplice, non è necessario modificare l'ambito delle credenziali se utilizzi
AWS4-HMAC-SHA256per il valore ALGORITHM.SIGNED_HEADERS: un elenco separato da punti e virgola dei nomi delle intestazioni che devono essere incluse per firmare questa richiesta. Tutte le intestazioni devono essere in minuscolo e ordinate per codice carattere.
Ecco un esempio di stringa di intestazione firmata in stile Amazon S3:
content-type;host;x-amz-date
In una migrazione semplice, non è necessario apportare modifiche alla stringa dell'intestazione firmata.
SIGNATURE: la firma che consente l'autenticazione della richiesta. In una migrazione semplice, sostituisci le informazioni della chiave di accesso AWS con le informazioni della chiave HMAC di Cloud Storage equivalente.
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 predefinito public-read 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.s3nsapis.fr 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.s3nsapis.fr 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 da firmare corrispondente 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 nella seconda riga del messaggio viene visualizzata una stringa vuota.
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 della firma, che indica a Cloud Storage di aspettarsi una sintassi ACL che utilizza la sintassi XML ACL di Amazon S3. Devi assicurarti che le ACL di Amazon S3 che utilizzi siano mappate al modello di ACL di Cloud Storage. Ad esempio, se i tuoi strumenti e le tue librerie utilizzano la sintassi ACL di Amazon S3 per concedere l'autorizzazione WRITE del bucket, devono concedere anche l'autorizzazione READ del bucket perché le autorizzazioni di Cloud Storage sono concentriche. Non è necessario specificare entrambe le autorizzazioni WRITE e READ quando concedi l'autorizzazione WRITE utilizzando la sintassi di Cloud Storage.
Cloud Storage supporta la sintassi ACL di Amazon S3 nei seguenti scenari:
- In una richiesta a Cloud Storage per recuperare gli ACL (ad esempio, una richiesta
GETObject oGETBucket), Cloud Storage restituisce la sintassi ACL di Amazon S3. - In una richiesta a Cloud Storage per applicare le ACL (ad esempio, una richiesta
PUTObject oPUTBucket), Cloud Storage prevede di ricevere la sintassi delle ACL di Amazon S3.
L'intestazione Authorization in uno scenario di migrazione semplice utilizza AWS per l'identificatore della firma, ma con l'ID di accesso HMAC di Cloud Storage.
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 le ACL di un oggetto.
GET europe/france/paris.jpg?acl HTTP/1.1 Host: my-travel-maps.storage.s3nsapis.fr 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 utilizzando 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 le ACL per un oggetto. L'esempio mostra un corpo della richiesta con la sintassi ACL di Amazon S3.
PUT europe/france/paris.jpg?acl HTTP/1.1
Host: my-travel-maps.storage.s3nsapis.fr
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>example-service-account@example-project.s3ns.iam.gserviceaccount.com</EmailAddress>
</Grantee>
<Permission>FULL_CONTROL</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
Infine, in uno scenario di migrazione semplice, puoi anche utilizzare 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-*. Anche se è possibile, ti consigliamo di scegliere una migrazione completa per sfruttare 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.