Solución de problemas de solicitudes firmadas para las API de AWS - AWS Identity and Access Management

Solución de problemas de solicitudes firmadas para las API de AWS

importante

A menos que utilice la CLI o los SDK de AWS, debe escribir código para calcular las firmas que brindan información de autenticación en sus solicitudes. El cálculo de firmas de SigV4 puede ser una tarea compleja, por lo que recomendamos utilizar los AWS SDK o la CLI siempre que sea posible.

Cuando desarrolla código que crea una solicitud firmada, es posible que reciba HTTP 403 SignatureDoesNotMatch por parte de Servicios de AWS. Estos errores significan que el valor de la firma en la solicitud de HTTP a AWS no coincide con la firma que Servicio de AWS calculó. Los errores HTTP 401 Unauthorized se producen cuando los permisos no permiten al intermediario realizar la solicitud.

Las solicitudes de API pueden devolver un error en los siguientes casos:

  • La solicitud de API no está firmada y utiliza la autenticación de IAM.

  • Las credenciales de IAM utilizadas para firmar la solicitud son incorrectas o no tienen permisos para invocar la API.

  • La firma de la solicitud de API firmada no coincide con la firma que calculó el servicio de AWS.

  • El encabezado de la solicitud de API es incorrecto.

nota

Actualice el protocolo de firmas de Signature Version 2 (SigV2) de AWS a Signature version 4 (SigV4) de AWS antes de buscar otras soluciones de error. Los servicios (como Amazon S3) y las regiones ya no admiten la firma SigV2.

Errores de credencial

Asegúrese de que la solicitud de API esté firmada con SigV4. Si la solicitud de API no está firmada, es posible que reciba el siguiente error: Missing Authentication Token. Agregue la firma que falta y vuelva a enviar la solicitud.

Verifique que las credenciales de autenticación para la clave de acceso y la clave secreta sean correctas. Si la clave de acceso es incorrecta, es posible que reciba el siguiente error: Unauthorized. Asegúrese de que la entidad utilizada para firmar la solicitud esté autorizada para realizar la solicitud. Para obtener más información, consulte Solución de problemas de mensajes de error de acceso denegado.

Errores canónicos en la cadena de solicitud y firma

Si no calculó correctamente la solicitud canónica en Paso 2: creación de un hash de la solicitud canónica o Paso 3: Creación de una cadena para firmar, el paso de verificación de firmas que realiza el servicio falla con el siguiente mensaje de error:

The request signature we calculated does not match the signature you provided

Cuando el servicio de AWS recibe una solicitud firmada, vuelve a calcular la firma. Si hay diferencias en los valores, las firmas no coinciden. Compare la solicitud canónica y la cadena con la solicitud firmada con el valor en el mensaje de error. Modifique el proceso de firma si hay alguna diferencia.

nota

También puede comprobar que no envió la solicitud a través de un proxy que modifique los encabezados o la solicitud.

ejemplo Ejemplo de solicitud canónica
GET -------- HTTP method / -------- Path. For API stage endpoint, it should be /{stage-name}/{resource-path} -------- Query string key-value pair. Leave it blank if the request doesn't have a query string. content-type:application/json -------- Header key-value pair. One header per line. host:0123456789.execute-api.us-east-1.amazonaws.com -------- Host and x-amz-date are required headers for all signed requests. x-amz-date:20220806T024003Z content-type;host;x-amz-date -------- A list of signed headers d167e99c53f15b0c105101d468ae35a3dc9187839ca081095e340f3649a04501 -------- Hash of the payload

Para comprobar que la clave secreta coincide con el ID de clave de acceso, puede probarla con una implementación funcional conocida. Por ejemplo, utilice un AWS SDK o la AWS CLI para realizar una solicitud a AWS.

Encabezado de solicitud API

Asegúrese de que el encabezado de autorización de SigV4 que agregó en Paso 4: cálculo de la firma incluya la clave de credencial correcta, similar a la siguiente:

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

Si la clave de credencial falta o es incorrecta, es posible que reciba el siguiente mensaje de error: Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Asegúrese de que la solicitud de autorización de SigV4 también incluya la fecha de la solicitud mediante el uso de HTTP Date o del encabezado x-amz-date.

Errores en el alcance de la credencial

El alcance de la credencial que creó en Paso 3: Creación de una cadena para firmar restringe la firma a una fecha, región y servicio específicos. Esta cadena tiene el siguiente formato:

YYYYMMDD/region/service/aws4_request
nota

Si utiliza SigV4a, la región no está incluida en el ámbito de las credenciales.

Date

Si el alcance de la credencial no especifica la misma fecha que el encabezado x-amz-date, el paso de verificación de la firma falla y aparece el siguiente mensaje de error:

Date in Credential scope does not match YYYYMMDD from ISO-8601 version of date from HTTP

Si la solicitud especifica una fecha futura, el paso de verificación de la firma falla con el siguiente mensaje de error:

Signature not yet current: date is still later than date

Si la solicitud ha caducado, el paso de verificación de la firma falla con el siguiente mensaje de error:

Signature expired: date is now earlier than date
Región

Si el alcance de la credencial no especifica la misma región que la solicitud, el paso de verificación de la firma falla con el siguiente mensaje de error:

Credential should be scoped to a valid Region, not region-code
Servicio

Si el alcance de la credencial no especifica el mismo servicio que el encabezado host, el paso de verificación de la firma falla con el siguiente mensaje de error:

Credential should be scoped to correct service: 'service'
Cadena de terminación

Si el alcance de la credencial no termina con aws4_request, el paso de verificación de la firma falla con el siguiente mensaje de error:

Credential should be scoped with a valid terminator: 'aws4_request'

Errores de firma de clave

Los errores causados por la generación incorrecta de la clave de firma o por un uso indebido de la criptografía son más difíciles de solucionar. Luego de comprobar que la cadena canónica y la cadena para firmar son correctas, también puede comprobar si existe alguno de los siguientes problemas:

  • La clave de acceso secreta no coincide con el ID de clave de acceso que especificó.

  • Hay un problema con el código de generación de la clave.

Para comprobar que la clave secreta coincide con el ID de clave de acceso, puede probarla con una implementación funcional conocida. Por ejemplo, utilice un SDK de AWS o la AWS CLI para hacer una solicitud a AWS. Para ver ejemplos, consulte Ejemplos de firmas de solicitudes