Firma de una solicitud HTTP - Amazon Redshift

Firma de una solicitud HTTP

Amazon Redshift requiere que cada solicitud que envía a la API de administración se autentique con una firma. En este tema, se explica cómo firmar solicitudes.

Si utiliza uno de los kits de desarrollo de software (SDK) de AWS o la AWS Command Line Interface, la firma de solicitudes se realiza de forma automática, por lo que puede omitir esta sección. Para obtener más información acerca del uso de AWS SDK, consulte Uso de las interfaces de administración de Amazon Redshift para clústeres aprovisionados. Para obtener más información acerca del uso de la interfaz de línea de comandos de Amazon Redshift, visite la referencia de la línea de comandos de Amazon Redshift.

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 que se basa en la entrada. La entrada a la función hash incluye el texto de su solicitud y su clave de acceso secreta que puede obtener de las credenciales temporales. 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.

nota

Los usuarios necesitan acceso programático si desean interactuar con AWS fuera de la AWS Management Console. La forma de conceder el acceso programático depende del tipo de usuario que acceda a AWS.

Para conceder acceso programático a los usuarios, seleccione una de las siguientes opciones.

¿Qué usuario necesita acceso programático? Para Mediante

Identidad del personal

(Usuarios administrados en el IAM Identity Center)

Utilice credenciales temporales para firmar las solicitudes programáticas a la AWS CLI, los AWS SDK y las API de AWS.

Siga las instrucciones de la interfaz que desea utilizar:

IAM Utilice credenciales temporales para firmar las solicitudes programáticas a la AWS CLI, los AWS SDK y las API de AWS. Siguiendo las instrucciones de Uso de credenciales temporales con recursos de AWS de la Guía del usuario de IAM.
IAM

(No recomendado)

Utilizar credenciales a largo plazo para firmar las solicitudes programáticas a la AWS CLI, los AWS SDK o las API de AWS.

Siga las instrucciones de la interfaz que desea utilizar:

Después de recibir su solicitud, Amazon Redshift recalcula la firma con la misma función hash y los datos que ingresó para firmar la solicitud. Si la firma resultante coincide con la firma de la solicitud, Amazon Redshift procesa la solicitud; de lo contrario, esta se rechaza.

Amazon Redshift admite la autenticación mediante AWS Signature Version 4. El proceso para calcular una firma se compone de tres tareas. Estas se ilustran en el siguiente ejemplo.

  • Tarea 1: Crear una solicitud canónica

    Reorganice la solicitud HTTP en forma canónica. Es preciso utilizar una forma canónica porque Amazon Redshift usa la misma forma canónica para calcular la firma que compara con la que 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 e información del servicio.

  • Tarea 3: Calcular una firma

    Calcule una firma para la solicitud utilizando 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 credencial para crear una serie de códigos de autenticación de mensajes basados en hash (HMAC-SHA256).

Ejemplo de cálculo de firma

En el siguiente ejemplo, se presentan los detalles de la creación de una firma de una solicitud CreateCluster. Puede utilizar el ejemplo como referencia para comprobar su propio método de cálculo de firmas. Otros cálculos de referencia se incluyen en la sección de ejemplos de firmas de solicitudes de la Guía del usuario de IAM.

Puede utilizar una solicitud GET o POST para enviar solicitudes a Amazon Redshift. La diferencia entre las dos solicitudes es que con la solicitud GET los parámetros se envían como parámetros de cadena de consulta. Con la solicitud POST, las firmas se incluyen en el cuerpo de la solicitud. En el ejemplo a continuación, se presenta una solicitud POST.

El ejemplo supone lo siguiente:

  • La marca temporal de la solicitud es Fri, 07 Dec 2012 00:00:00 GMT.

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

La sintaxis general de la solicitud es la siguiente:

https://redshift.us-east-1.amazonaws.com/ ?Action=CreateCluster &ClusterIdentifier=examplecluster &MasterUsername=masteruser &MasterUserPassword=12345678Aa &NumberOfNode=2 &NodeType=dc2.large &Version=2012-12-01 &x-amz-algorithm=AWS4-HMAC-SHA256 &x-amz-credential=AKIAIOSFODNN7EXAMPLE/20121207/us-east-1/redshift/aws4_request &x-amz-date=20121207T000000Z &x-amz-signedheaders=content-type;host;x-amz-date

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

POST / content-type:application/x-www-form-urlencoded; charset=utf-8 host:redshift.us-east-1.amazonaws.com x-amz-date:20121207T000000Z content-type;host;x-amz-date 55141b5d2aff6042ccd9d2af808fdf95ac78255e25b823d2dbd720226de1625d

La última línea de la solicitud canónica es el hash del cuerpo de la solicitud. La tercera línea de la solicitud canónica se encuentra vacía porque no hay parámetros de consulta para esta API.

La cadena para firmar de Tarea 2: Crear una cadena para firmar es la siguiente:

AWS4-HMAC-SHA256 20121207T000000Z 20121207/us-east-1/redshift/aws4_request 06b6bef4f4f060a5558b60c627cc6c5b5b5a959b9902b5ac2187be80cbac0714

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 redshift.

En Tarea 3: Calcular una firma, la clave derivada puede representarse como sigue:

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

La clave derivada se calcula como series de funciones hash. Desde la instrucción HMAC interna en la fórmula anterior, debe concatenar la frase AWS4 con su clave de acceso secreta y utilizarla como la clave para aplicar la función hash en los datos “us-east-1”. El resultado de esta hash se convierte en la clave para la siguiente función hash.

Tras calcular la clave derivada, se usa en una función hash que acepte dos cadenas de entrada: la cadena para firmar y la clave derivada. Por ejemplo, si usa la clave de acceso secreta wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY y la cadena para firmar provistas anteriormente, la firma calculada es la siguiente:

9a6b557aa9f38dea83d9215d8f0eae54100877f3e0735d38498d7ae489117920

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/20121207/us-east-1/redshift/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=9a6b557aa9f38dea83d9215d8f0eae54100877f3e0735d38498d7ae489117920