Esta página es solo para los clientes actuales del servicio S3 Glacier que utilizan Vaults y la API de REST original de 2012.
Si busca soluciones de almacenamiento de archivos, se recomienda que utilice las clases de almacenamiento de 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
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
Reorganice la solicitud HTTP en 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 del ámbito de credenciales es una concatenación de fecha, región de AWS e información del servicio.
-
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 a partir de la clave de acceso secreta, utilizando el ámbito de credenciales para crear una serie de códigos de autenticación de mensajes basados en hash (HMAC). Tenga en cuenta que la función hash que se utiliza en este paso de firma no es el algoritmo hash en árbol que se utiliza en las API de S3 Glacier 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 Firma de solicitudes de API de AWS 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 streaming x-amz-content-sha256
se basa en el hash SHA256 de todo el contenido (toda la carga) que se va a cargar. Tenga en cuenta que este cálculo es diferente del hash en árbol SHA256 (Cálculo de sumas de comprobación). Salvo en casos poco importantes, el valor hash SHA 256 de los datos de la carga será distinto al hash en árbol SHA256 de los datos de la carga.
Si los datos de la carga 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(); }
De igual modo, puede calcular en C# el hash SHA256 de los datos de carga, 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 explica detalladamente cómo crear una firma para Carga de archivo (POST archivo), una de las dos API de streaming de 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".
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 y calcular el hash SHA256 y luego 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