View a markdown version of this page

Autenticación de solicitudes: uso del encabezado de Authorization (AWS Signature Version 4) - Amazon Simple Storage Service

Autenticación de solicitudes: uso del encabezado de Authorization (AWS Signature Version 4)

Descripción general

El uso del encabezado HTTP Authorization es el método más común para proporcionar información de autenticación. A excepción de las solicitudes POST y las solicitudes que se firman mediante parámetros de consulta, todas las operaciones de Amazon S3 utilizan el encabezado de solicitud Authorization para proporcionar información de autenticación.

A continuación, se muestra un ejemplo de un valor de encabezado de Authorization. Se agregan saltos de línea a este ejemplo para facilitar la lectura:

Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request, SignedHeaders=host;range;x-amz-date, Signature=fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024

En la siguiente tabla, se describen los distintos componentes del valor del encabezado Authorization del ejemplo anterior:

Componente Descripción
AWS4-HMAC-SHA256

El algoritmo que se utilizó para calcular la firma. Debe proporcionar este valor cuando utilice AWS Signature Version 4 para la autenticación.

La cadena especifica AWS Signature Version 4 (AWS4) y el algoritmo de firma (HMAC-SHA256).

Credential

El ID de clave de acceso y la información sobre el alcance, que incluye la fecha, la región y el servicio que se utilizaron para calcular la firma.

Esta cadena tiene el siguiente formato:

<your-access-key-id>/<date>/<aws-region>/<aws-service>/aws4_request

Donde:

  • El valor de <date> se especifica mediante el formato YYYYMMDD.

  • El valor de <aws-service> es s3 cuando se envía una solicitud a Amazon S3.

SignedHeaders

Una lista de encabezados de solicitud separados por punto y coma que utilizó para calcular Signature. La lista solo incluye los nombres de los encabezados y estos nombres deben estar en minúsculas. Por ejemplo:

host;range;x-amz-date
Signature La firma de 256 bits expresada en 64 caracteres hexadecimales en minúsculas. Por ejemplo:
fe5f80f77d5fa3beca038a248ff027d0445342fe2855ddc963176630326f1024
Tenga en cuenta que los cálculos de la firma varían según la opción que elija para transferir la carga.

Los cálculos de la firma varían según el método que elija para transferir la carga útil de la solicitud. S3 admite las siguientes opciones:

  • Transfiera la carga útil en un solo fragmento: en este caso, tiene las siguientes opciones de cálculo de firmas:

    • Opción de carga útil firmada: si lo desea, puede calcular la suma de comprobación completa de la carga útil e incluirla en el cálculo de firmas. Esto proporciona mayor seguridad, pero es necesario leer la carga útil dos veces o almacenarla en un búfer en la memoria.

      Por ejemplo, para cargar un archivo, primero debe leerlo para calcular un hash de carga útil para el cálculo de la firma y, de nuevo, para la transmisión al crear la solicitud. Para cargas útiles más pequeñas, este enfoque podría ser preferible. Sin embargo, en el caso de archivos grandes, leer el archivo dos veces puede resultar ineficiente, por lo que puede que prefiera cargar los datos por partes.

      Recomendamos que se incluya la suma de comprobación de la carga útil para mayor seguridad.

    • Opción de carga útil sin firmar: no incluya la suma de comprobación de la carga útil en el cálculo de la firma.

    Para ver instrucciones paso a paso acerca de cómo calcular la firma y crear el valor del encabezado de Authorization, consulte Cálculos de firma para el encabezado de Authorization: transferencia de la carga útil en un solo fragmento (AWS Signature Version 4).

  • Transfiera la carga útil en varios fragmentos (carga fragmentada): en este caso, se transfiere la carga útil en fragmentos. Puede transferir una carga útil en fragmentos independientemente del tamaño de la carga útil.

    Puede dividir la carga útil en fragmentos. Pueden ser fragmentos de tamaño fijo o variable. Al cargar los datos en fragmentos, se evita leer toda la carga útil para calcular la firma. En su lugar, para el primer fragmento, se calcula una firma inicial que utiliza solo los encabezados de las solicitudes. El segundo fragmento contiene la firma del primer fragmento y cada fragmento subsiguiente contiene la firma del fragmento que lo precede. Al final de la carga, se envía un último fragmento con 0 bytes de datos que contiene la firma del último fragmento de la carga útil. Para obtener más información, consulte Cálculos de firma para el encabezado de Authorization: transferencia de la carga útil en varios fragmentos (carga fragmentada) (AWS Signature Version 4).

Al firmar sus solicitudes, puede utilizar cualquiera de las siguientes opciones: AWS Signature Version 4 o AWS Signature Version 4A. La diferencia clave entre las dos se determina por la forma en que se calcula la firma. Con AWS Signature Version 4A, la firma no incluye información específica de la región y se calcula mediante el algoritmo AWS4-ECDSA-P256-SHA256.

Además de estas opciones, tiene la opción de incluir un tráiler con la solicitud. Para incluir un tráiler en la solicitud, debe especificarlo en el encabezado configurando x-amz-content-sha256 en el valor adecuado. Si utiliza un encabezado final, debe incluir x-amz-trailer en el encabezado y especificar los nombres de los encabezados finales como una cadena en una lista separada por comas. Todos los encabezados finales se escriben después del último fragmento. Si va a cargar los datos en varios fragmentos, debe enviar un último fragmento con 0 bytes de datos antes de enviar el encabezado final.

Al enviar una solicitud, debe indicar a Amazon S3 cuál de las opciones anteriores ha elegido en el cálculo de la firma agregando el encabezado x-amz-content-sha256 con uno de los siguientes valores:

Valor del encabezado Descripción

Valor real de la suma de comprobación de la carga útil

Este valor es la suma de comprobación real del objeto y solo es posible cuando se cargan los datos en un único fragmento.

UNSIGNED-PAYLOAD

Use esto cuando cargue el objeto como un único fragmento sin firmar.

STREAMING-UNSIGNED-PAYLOAD-TRAILER

Use esto cuando envíe una carga útil sin firmar en varios fragmentos. En este caso, también tendrá un encabezado final después de cargar el fragmento.

STREAMING-AWS4-HMAC-SHA256-PAYLOAD

Use esto cuando envíe una carga útil en varios fragmentos y los fragmentos se firmen con AWS4-HMAC-SHA256. Esto produce una firma SigV4.

STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER

Use esto cuando envíe una carga útil en varios fragmentos y los fragmentos se firmen con AWS4-HMAC-SHA256. Esto produce una firma SigV4. Además, el resumen de los fragmentos se incluye como encabezado final.

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD

Use esto cuando envíe una carga útil en varios fragmentos y los fragmentos se firmen con AWS4-ECDSA-P256-SHA256. Esto produce una firma SigV4A.

STREAMING-AWS4-ECDSA-P256-SHA256-PAYLOAD-TRAILER

Use esto cuando envíe una carga útil en varios fragmentos y los fragmentos se firmen con AWS4-ECDSA-P256-SHA256. Esto produce una firma SigV4A. Además, el resumen de los fragmentos se incluye como encabezado final.

Al recibir la solicitud, Amazon S3 vuelve a crear la cadena para firmarla con la información del encabezado Authorization y del encabezado date. A continuación, verifica con el servicio de autenticación que las firmas coinciden. La fecha de la solicitud se puede especificar mediante el encabezado HTTP Date o el encabezado x-amz-date. Si ambos encabezados están presentes, x-amz-date tiene prioridad.

Si las firmas coinciden, Amazon S3 procesa la solicitud; de lo contrario, la solicitud producirá un error.

Para obtener más información, consulte los temas siguientes:

Cálculos de firma para el encabezado de Authorization: transferencia de la carga útil en un solo fragmento (AWS Signature Version 4)

Cálculos de firma para el encabezado de Authorization: transferencia de la carga útil en varios fragmentos (carga fragmentada) (AWS Signature Version 4)

Cálculos de firmas para los encabezados finales (cargas fragmentadas) (AWS Signature Version 4)