Firmar solicitudes - Amazon S3 Glacier

Esta página es solo para los clientes actuales del servicio S3 Glacier que utilizan Vaults y el original de 2012. REST API

Si busca soluciones de almacenamiento de archivos, le sugerimos que utilice las clases de almacenamiento S3 Glacier en Amazon S3, S3 Glacier Instant Retrieval, S3 Glacier Flexible Retrieval y S3 Glacier Deep Archive. Para obtener más información sobre estas opciones de almacenamiento, consulte Clases de almacenamiento de S3 Glacier y Almacenamiento de datos a largo plazo con clases de almacenamiento de S3 Glacier en la Guía del usuario de Amazon S3. Estas clases de almacenamiento utilizan Amazon S3API, están disponibles en todas las regiones y se pueden gestionar en la consola de Amazon S3. Ofrecen funciones como el análisis de costos de almacenamiento, Storage Lens, funciones avanzadas de cifrado opcionales y más.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Firmar solicitudes

S3 Glacier requiere que se firmen todas las solicitudes enviadas para autenticarlas. Para firmar una solicitud, se calcula una firma digital mediante una función hash criptográfica. Un hash criptográfico es una función que devuelve un valor hash único basado en la entrada. La entrada a la función hash incluye el texto de la solicitud y la clave de acceso secreta. La función hash devuelve un valor hash que se incluye en la solicitud como la firma. La firma forma parte del encabezado de la Authorization de la solicitud.

Tras recibir la solicitud, S3 Glacier recalcula la firma con la misma función hash y los datos especificados para firmar la solicitud. Si la firma resultante coincide con la firma de la solicitud, S3 Glacier procesa la solicitud. De lo contrario, la solicitud se rechaza.

S3 Glacier admite la autenticación mediante AWS Signature Version 4. El proceso para calcular una firma se puede dividir en tres tareas:

  • Tarea 1: Crear una solicitud canónica

    Reorganiza tu HTTP solicitud en un formato canónico. Es preciso utilizar un formato canónico, ya que S3 Glacier utiliza el mismo formato canónico cuando recalcula una firma para compararla con la que se ha enviado.

  • Tarea 2: Crear una cadena para firmar

    Crear una cadena que se utilizará como uno de los valores de entrada de la función hash criptográfica. La cadena, denominada cadena para firmar, es una concatenación del nombre del algoritmo hash, la fecha de la solicitud, una cadena de ámbito de credenciales y la solicitud en formato canónico de la tarea anterior. La cadena de alcance de la credencial en sí misma es una concatenación de información de fecha, región y servicio. AWS

  • Tarea 3: Crear una firma

    Cree una firma para su solicitud mediante una función hash criptográfica que acepte dos cadenas de entrada: la cadena para firmar y una clave derivada. La clave derivada se calcula empezando por la clave de acceso secreta y utilizando la cadena del ámbito de las credenciales para crear una serie de códigos de autenticación de mensajes basados en hash (). HMACs Tenga en cuenta que la función hash utilizada en este paso de firma no es el algoritmo de hash de árbol utilizado en S3 Glacier APIs para cargar datos.

Ejemplo de cálculo de firma

En el siguiente ejemplo se presentan los detalles de la creación de una firma para Creación de un almacén (almacén PUT). Puede utilizar el ejemplo como referencia para comprobar su método de cálculo de firmas. Para obtener más información, consulte Firmar AWS API solicitudes en la Guía del IAMusuario.

El ejemplo supone lo siguiente:

  • La marca temporal de la solicitud es Fri, 25 May 2012 00:24:53 GMT.

  • El punto de conexión es la región Este de EE. UU. (Norte de Virginia), us-east-1.

La sintaxis general de la solicitud (incluido el JSON cuerpo) es:

PUT /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Fri, 25 May 2012 00:24:53 GMT Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

La forma canónica de la solicitud calculada en Tarea 1: Crear una solicitud canónica es la siguiente:

PUT /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-date:20120525T002453Z x-amz-glacier-version:2012-06-01 host;x-amz-date;x-amz-glacier-version e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

La última línea de la solicitud canónica es el hash del cuerpo de la solicitud. Además, observe que la tercera línea de la solicitud canónica está vacía. Esto se debe a que no hay parámetros de consulta para elloAPI.

La cadena que se va a firmar en la Tarea 2: Crear una cadena para firmar es la siguiente:

AWS4-HMAC-SHA256 20120525T002453Z 20120525/us-east-1/glacier/aws4_request 5f1da1a2d0feb614dd03d71e87928b8e449ac87614479332aced3a701f916743

La primera línea de la cadena para firmar es el algoritmo, la segunda es la marca temporal, la tercera es el ámbito de credenciales y la última es el hash de la solicitud canónica de Tarea 1: Crear una solicitud canónica. El nombre del servicio que se va a utilizar en el ámbito de credenciales es glacier.

En Tarea 3: Crear una firma, la clave derivada se puede representar de la siguiente forma:

derived key = HMAC(HMAC(HMAC(HMAC("AWS4" + YourSecretAccessKey,"20120525"),"us-east-1"),"glacier"),"aws4_request")

Si se utiliza la clave de acceso secreta, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY, la firma calculada es:

3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

El último paso consiste en construir el encabezado Authorization. Para la clave de acceso de demostración AKIAIOSFODNN7EXAMPLE, el encabezado (al que se han agregado saltos de línea para que resulte más legible) es el siguiente:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120525/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-date;x-amz-glacier-version, Signature=3ce5b2f2fffac9262b4da9256f8d086b4aaf42eba5f111c21681a65a127b7c2a

Cálculo de firmas para operaciones de streaming

Carga de archivo (POST archivo) y Carga de partes (PUT uploadID) son operaciones de streaming en las que es necesario incluir otro encabezado x-amz-content-sha256 al firmar y enviar la solicitud. Los pasos para firmar en las operaciones de streaming son exactamente los mismos que en las demás operaciones, con la incorporación del encabezado de streaming.

El cálculo del encabezado de transmisión x-amz-content-sha256 se basa en el SHA256 hash de todo el contenido (carga útil) que se va a cargar. Tenga en cuenta que este cálculo es diferente del hash del SHA256 árbol (Cálculo de sumas de comprobación). Además de los casos triviales, el valor hash de SHA 256 de los datos de carga útil será diferente del hash de SHA256 árbol de los datos de carga útil.

Si los datos de la carga útil se especifican como una matriz de bytes, puede usar el siguiente fragmento de código Java para calcular el hash. SHA256

public static byte[] computePayloadSHA256Hash2(byte[] payload) throws NoSuchAlgorithmException, IOException { BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(payload)); MessageDigest messageDigest = MessageDigest.getInstance("SHA-256"); byte[] buffer = new byte[4096]; int bytesRead = -1; while ( (bytesRead = bis.read(buffer, 0, buffer.length)) != -1 ) { messageDigest.update(buffer, 0, bytesRead); } return messageDigest.digest(); }

Del mismo modo, en C# puede calcular el SHA256 hash de los datos de la carga útil, tal y como se muestra en el siguiente fragmento de código.

public static byte[] CalculateSHA256Hash(byte[] payload) { SHA256 sha256 = System.Security.Cryptography.SHA256.Create(); byte[] hash = sha256.ComputeHash(payload); return hash; }

Ejemplo de cálculo de firmas para streaming API

El siguiente ejemplo explica los detalles de la creación de una firma para Carga de archivo (POST archivo) una de las dos transmisiones APIs en S3 Glacier. El ejemplo supone lo siguiente:

  • La marca temporal de la solicitud es Mon, 07 May 2012 00:00:00 GMT.

  • El punto de conexión es la región Este de EE. UU. (Norte de Virginia), us-east-1.

  • La carga de contenido es una cadena "Welcome to S3 Glacier".

La sintaxis general de la solicitud (incluido el JSON cuerpo) se muestra en el siguiente ejemplo. Observe que el encabezado x-amz-content-sha256 está incluido. En este ejemplo simplificado, x-amz-sha256-tree-hash y x-amz-content-sha256 tienen el mismo valor. Sin embargo, en las cargas de archivos superiores a 1 MB, esto no se cumple.

POST /-/vaults/examplevault HTTP/1.1 Host: glacier.us-east-1.amazonaws.com Date: Mon, 07 May 2012 00:00:00 GMT x-amz-archive-description: my archive x-amz-sha256-tree-hash: SHA256 tree hash x-amz-content-sha256: SHA256 payload hash Authorization: SignatureToBeCalculated x-amz-glacier-version: 2012-06-01

La forma canónica de la solicitud calculada para Tarea 1: Crear una solicitud canónica es la siguiente: Tenga en cuenta que se incluye el encabezado de streaming x-amz-content-sha256 con su valor. Esto significa que primero debes leer la carga útil y calcular el SHA256 hash y, a continuación, calcular la firma.

POST /-/vaults/examplevault host:glacier.us-east-1.amazonaws.com x-amz-content-sha256:726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628 x-amz-date:20120507T000000Z x-amz-glacier-version:2012-06-01 host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version 726e392cb4d09924dbad1cc0ba3b00c3643d03d14cb4b823e2f041cff612a628

El resto del cálculo de la firma sigue los pasos que se describen en Ejemplo de cálculo de firma. A continuación, se muestra el encabezado Authorization, que utiliza la clave de acceso secreta wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY y la clave de acceso AKIAIOSFODNN7EXAMPLE (se han agregado saltos de línea para facilitar la lectura):

Authorization=AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20120507/us-east-1/glacier/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date;x-amz-glacier-version, Signature=b092397439375d59119072764a1e9a144677c43d9906fd98a5742c57a2855de6