Firmar solicitudes - Amazon Glacier

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

Si busca soluciones de almacenamiento de archivos, le recomendamos que utilice las clases de almacenamiento de Amazon 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 las clases de almacenamiento de Amazon Glacier.

Amazon Glacier (servicio original independiente basado en bóveda) ya no aceptará nuevos clientes a partir del 15 de diciembre de 2025, sin que ello afecte a los clientes actuales. Amazon Glacier es un servicio independiente propio APIs que almacena datos en almacenes y es distinto de las clases de almacenamiento Amazon S3 y Amazon S3 Glacier. Sus datos actuales permanecerán seguros y accesibles en Amazon Glacier de forma indefinida. No se requiere ninguna migración. Para un almacenamiento de archivos a largo plazo y de bajo costo, AWS recomienda las clases de almacenamiento Amazon S3 Glacier, que ofrecen una experiencia de cliente superior con S3 basada en cubos APIs, Región de AWS disponibilidad total, costos más bajos e AWS integración de servicios. Si desea mejorar las capacidades, considere la posibilidad de migrar a las clases de almacenamiento de Amazon S3 Glacier mediante nuestra Guía de AWS soluciones para transferir datos de los almacenes de Amazon Glacier a las clases de almacenamiento de Amazon S3 Glacier.

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

Amazon Glacier requiere que autentique todas las solicitudes que envíe firmando la solicitud. 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 su solicitud, Amazon Glacier vuelve a calcular la firma mediante la misma función hash y la misma entrada que utilizó para firmar la solicitud. Si la firma resultante coincide con la firma de la solicitud, Amazon Glacier procesa la solicitud. De lo contrario, la solicitud se rechaza.

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

  • Tarea 1: Crear una solicitud canónica

    Reorganice la solicitud HTTP en formato canónico. Es necesario usar un formulario canónico porque Amazon Glacier usa el mismo formulario canónico cuando recalcula una firma para compararla con la que usted envió.

  • 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 Amazon Glacier para cargar APIs 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 las solicitudes de AWS API en la Guía del usuario de IAM.

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 cuerpo JSON) 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 este API.

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 de hash del SHA 256 de los datos de la carga útil será diferente del hash del SHA256 árbol de los datos de la carga útil.

Si los datos de carga útil se especifican como una matriz de bytes, puede utilizar 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 del cálculo de una firma para la API de streaming

En el siguiente ejemplo, se explican los detalles de la creación de una firma para Carga de archivo (POST archivo) una de las dos transmisiones APIs en Amazon 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 útil del contenido es una cadena que dice «Welcome to Amazon Glacier».

En el ejemplo siguiente, se muestra la sintaxis general de la solicitud (incluido el cuerpo JSON). 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 debe 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