En esta página, se describe cómo completar una migración simple de Amazon Simple Storage Service (Amazon S3) a Cloud Storage. En una migración simple, debes usar tus herramientas y bibliotecas existentes a fin de generar solicitudes REST autenticadas a Amazon S3 para enviar solicitudes autenticadas a Cloud Storage en su lugar.
Migra de Amazon S3 a Cloud Storage en una situación de migración simple
Para realizar solicitudes a Cloud Storage, debes completar los siguientes pasos:
x-amz-project-id
encabezado cuando realices solicitudes para crear y enumerar buckets.En las herramientas o bibliotecas existentes, realiza los siguientes cambios:
- Cambia el extremo de la solicitud para que use el extremo de solicitud a la API de XML de Cloud Storage.
- Reemplaza el acceso y la clave secreta de Amazon Web Services (AWS) por el ID de acceso y la clave secreta de Cloud Storage correspondientes (en conjunto, se denominan clave HMAC de Cloud Storage).
Asegúrate de que tus encabezados
x-amz-
usen valores admitidos por Cloud Storage. Por ejemplo,x-amz-storage-class
debería usar una de las clases de almacenamiento de Cloud Storage disponibles.Cuando usas la API de XML de Cloud Storage en una situación de migración simple, especificar el identificador de firma
AWS
en el encabezadoAuthorization
le permite a Cloud Storage esperar encabezadosx-amz-*
y LCA con sintaxis XML de Amazon S3 en tu solicitud. Cloud Storage procesa los encabezadosx-amz-*
que tienen unx-goog-*
equivalente, como los que se enumeran en la tabla de encabezados, y procesa el encabezadox-amz-decoded-content-length
.
Después de realizar estos cambios, puedes empezar a usar las herramientas y bibliotecas existentes para enviar solicitudes HMAC a Cloud Storage.
En los siguientes ejemplos, se muestra cómo mostrar una lista de los buckets de Cloud Storage mediante el SDK de Amazon S3:
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Go.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN
como s3nsapis.fr
.
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Java.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN
como s3nsapis.fr
.
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage Python.
Para autenticarte en Cloud Storage, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.
Antes de ejecutar muestras de código, configura la variable de entorno GOOGLE_CLOUD_UNIVERSE_DOMAIN
como s3nsapis.fr
.
Especifica el encabezado de un proyecto
En las solicitudes que requieren que especifiques un proyecto, usa el encabezado x-amz-project-id
.
Ten en cuenta que Amazon S3 no tiene proyectos, por lo que, según las herramientas o las bibliotecas cliente que uses, es posible que no se pueda especificar un encabezado x-amz-project-id
.
Usa claves HMAC
Para usar la API de XML de Cloud Storage en una situación de migración simple, usa las claves de código de autenticación de mensajes basado en hash (HMAC) de Cloud Storage para las credenciales. Por lo general, debes crear una clave HMAC asociada con una cuenta de servicio. Sin embargo, puedes usar una asociada con una cuenta de usuario.
Autentica en una situación de migración simple
Usa el encabezado Autorización
Para las operaciones en una situación de migración simple que requieren autenticación, incluye un encabezado de la solicitud Authorization
, como haces con las solicitudes a Amazon S3. La sintaxis del encabezado Authorization
para una solicitud de Amazon S3 es la siguiente:
Authorization: AWS4-HMAC-SHA256 Credential=AWS-ACCESS-KEY/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
En una situación de migración simple, solo cambia el encabezado para usar el
ID de acceso HMAC de Cloud Storage y asegúrate de que la Signature
que adjuntas
se calcule con la clave secreta HMAC de Cloud Storage:
Authorization: ALGORITHM Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
Las partes del encabezado Authorization
son:
ALGORITHM: El algoritmo de firma y la versión que usas. El uso de
AWS4-HMAC-SHA256
indica que usas una firma HMAC V4 y tienes la intención de enviar encabezadosx-amz-*
. También puedes usarGOOG4-HMAC-SHA256
, que indica que usas una firma HMAC V4 y deseas enviar encabezadosx-goog-*
, oGOOG4-RSA-SHA256
, que indica que estás usando una firma RSA V4 y que deseas enviar encabezadosx-goog-*
.GOOG-ACCESS-ID: El ID de acceso identifica la entidad que realiza y firma la solicitud. En una migración simple, reemplaza el ID de la clave de acceso de Amazon Web Service (AWS) que usas para acceder a Amazon S3 por el ID de acceso HMAC de Cloud Storage. El ID de acceso HMAC de Cloud Storage comienza con
GOOG
.CREDENTIAL_SCOPE: El permiso de la credencial, como se define en la firma. En una migración simple, no necesitas cambiar el permiso de la credencial si usas
AWS4-HMAC-SHA256
para tu valor ALGORITHM.SIGNED_HEADERS: Una lista de encabezados separados por punto y coma que se debe incluir para firmar esta solicitud. Todos los encabezados deben estar en minúscula y ordenados por código de caracteres.
Un ejemplo de una string de encabezado firmado de estilo Amazon S3 se ve como se muestra a continuación:
content-type;host;x-amz-date
En una migración simple, no es necesario realizar ningún cambio en la string de encabezado firmado.
SIGNATURE: La firma que permite autenticar la solicitud. En una migración simple, reemplaza la información de la clave de acceso de AWS por la información de la clave HMAC de Cloud Storage equivalente.
Solicitud de autenticación de muestra
En los siguientes ejemplos, se sube un objeto llamado /europe/france/paris.jpg
a un bucket llamado my-travel-maps
, se aplica la LCA predefinida public-read
y se define un encabezado de metadatos personalizado para los revisores. A continuación, se muestra la solicitud a un bucket en 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
A continuación, se muestra la solicitud de un bucket en 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
A continuación, se muestra la solicitud canónica que se creó para esta solicitud:
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
A continuación, se muestra la string para firmar que se creó en esta solicitud:
AWS4-HMAC-SHA256 20190311T192918Z 20190311/us-east-1/s3/aws4_request 73918a5ff373d7a03e406fbf9ea35675396b06fca2af76c27a5c451fa783ef65
Esta solicitud no proporcionó un encabezado Content-MD5, por lo que se muestra una string vacía en la segunda línea del mensaje.
Control de acceso en una situación de migración simple
Para admitir migraciones simples, Cloud Storage acepta las LCA producidas por Amazon S3. En una situación de migración simple, debes usar AWS
como identificador de firma, lo que le indica a Cloud Storage que espere la sintaxis de LCA con el uso de la sintaxis XML de Amazon S3 LCA. Debes asegurarte de que las LCA de Amazon S3 que usas se asignen al modelo LCA de Cloud Storage. Por ejemplo, si tus herramientas y bibliotecas usan la sintaxis de la LCA de Amazon S3 para otorgar permiso de WRITE
a un bucket, entonces también deben otorgar permiso de READ
al bucket, porque los permisos de Cloud Storage son concéntricos. No es necesario que especifiques ambos permisos de WRITE
y READ
cuando otorgas el permiso de WRITE
mediante la sintaxis de Cloud Storage.
Cloud Storage admite la sintaxis de la LCA de Amazon S3 en las siguientes situaciones:
- En una solicitud a Cloud Storage para recuperar las LCA (por ejemplo, una solicitud de objeto
GET
o bucketGET
), Cloud Storage muestra la sintaxis de LCA de Amazon S3. - En una solicitud a Cloud Storage para aplicar LCA (por ejemplo, una solicitud de objeto
PUT
o bucketPUT
), Cloud Storage espera recibir la sintaxis de LCA de Amazon S3.
En una situación de migración simple, el encabezado Authorization
usa AWS
para el identificador de firma, pero con tu ID de acceso HMAC de Cloud Storage.
Authorization: AWS4-HMAC-SHA256 Credential=GOOG-ACCESS-ID/CREDENTIAL_SCOPE, SignedHeaders=SIGNED_HEADERS, Signature=SIGNATURE
En el siguiente ejemplo, se muestra una solicitud GET
a Cloud Storage para devolver las LCA de un objeto.
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 respuesta a la solicitud incluye la LCA con la sintaxis de la LCA de 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>
En el siguiente ejemplo, se muestra una solicitud PUT
a Cloud Storage para establecer las LCA de un objeto. En el ejemplo, se muestra un cuerpo de solicitud con la sintaxis de la LCA de 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-system.iam.gserviceaccount.com</EmailAddress> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>
Por último, en una situación de migración simple, también puedes usar el identificador de firma GOOG1
en el encabezado Authorization
. En este caso, debes usar la
sintaxis de LCA de Cloud Storage y asegurarte de que todos los encabezados x-amz-*
se cambien a x-goog-*
. Si bien esto es posible, te recomendamos que elijas
una migración completa para usar todos los beneficios de
Cloud Storage.
Asistencia para la compatibilidad de la API de XML con Amazon S3
Para discusiones sobre la interoperabilidad de la API de XML, consulta Stack Overflow con la etiqueta google-cloud-storage.