es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

generar_url_firmada_previamente muestra el error de Autorización de Parámetros de Consulta

Mientras creaba la URL firmada previamente para mi archivo image.png privado en mi cubo de s3, utilicé la siguiente plantilla:

require 'aws-sdk-s3'

s3 = Aws::S3::Client.new(
  region: 'us-east-1',
  access_key_id: Access_key_id,
  secret_access_key: Secret_access_key
)

signer = Aws::S3::Presigner.new(client: s3)

url = signer.presigned_url(
  :get_object,
  bucket: 'mybuck1',
  key: "${image.png}-#{SecureRandom.uuid}"
)

Mientras ejecutaba el código, obtengo el siguiente error:

<code>AuthorizationQueryParametersError</code>
<message>Query-string authentication version 4 requires the X-Amz-Algorithm, X-Amz-Credential, X-Amz-Signature, X-Amz-Date, X-Amz-SignedHeaders, and X-Amz-Expires parameters.</message>

Entonces, ¿cuál podría ser la razón de este error y cómo solucionarlo?

Gracias de antemano.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que falta algunos parámetros requeridos en la plantilla de URL prefirmada que se necesitan al utilizar la autenticación de cadena de consulta versión 4. Para solucionar este error, puedes agregar esos parámetros faltantes a la plantilla de URL.

    Los parámetros requeridos son:

    • X-Amz-Algorithm: el algoritmo utilizado para firmar la solicitud.
    • X-Amz-Credential: las credenciales utilizadas para firmar la solicitud.
    • X-Amz-Signature: la firma de la solicitud.
    • X-Amz-Date: la fecha y hora de la solicitud.
    • X-Amz-SignedHeaders: las cabeceras que fueron firmadas.
    • X-Amz-Expires: la duración de la URL prefirmada.

    Entonces puedes modificar tu código de la siguiente manera:

    require 'aws-sdk-s3'
    
    s3 = Aws::S3::Client.new(
      region: 'us-east-1', 
      access_key_id: Access_key_id,
      secret_access_key: Secret_access_key
    )
    
    signer = Aws::S3::Presigner.new(client: s3)
    
    url = signer.presigned_url(
      :get_object,
      bucket: 'mybuck1',
      key: 'image.png',
      expires_in: 3600,
      query: {
        'X-Amz-Algorithm' => 'AWS4-HMAC-SHA256',
        'X-Amz-Credential' => "#{Aws::STSSessionCredentials.new.access_key_id}/# {Time.now.utc.strftime('%Y%m%d')}/us-east-1/s3/aws4_request",
        'X-Amz-Date' => Time.now.utc.strftime('%Y%m%dT%H%M%SZ'),
        'X-Amz-Expires' => 3600,
        'X-Amz-SignedHeaders' => 'host'
      }
    )
    

    Esto debería crear una URL prefirmada válida que puedes usar para acceder a tu archivo privado image.png en tu bucket de S3.

Comments are closed.