Carga en AWS S3: no se puede firmar la solicitud sin establecer credenciales

Hola chicos,

Estoy usando la versión 3.4.0.beta3-dev y estoy recibiendo el error mencionado (pero solo en la interfaz de usuario, no en los registros) al intentar subir una imagen a un tema.

Mi configuración es la siguiente:

["s3_upload_bucket", "<nombre-del-bucket>/discourse-uploads"],
["s3_backup_bucket", "<nombre-del-bucket>/discourse-backups"],
["s3_region", "eu-central-1"],
["s3_use_acls", "f"],
["enable_direct_s3_uploads", "f"],
["enable_s3_uploads", "t"],
["s3_access_key_id", ""],
["s3_secret_access_key", ""]

y estoy usando el perfil de instancia de EC2 y sobrescribiendo las credenciales.

Recibo el error en la interfaz de usuario:

pero el registro me dice que todo fue bien:

Started POST "/uploads.json?client_id=bb1ab05dbb9d4d1f9930d05f28b17f94" for 10.x.x.x at 2024-12-13 11:46:35 +0000
Processing by UploadsController#create as JSON
  Parameters: {"upload_type"=>"composer", "pasted"=>"true", "name"=>"image.png", "type"=>"image/png", "sha1_checksum"=>"a0f0fe1abd27ce137e0e1b2a28cd9348a08112ff", "file"=>#<ActionDispatch::Http::UploadedFile:0x00007f50b8b01db8 @tempfile=#<Tempfile:/tmp/RackMultipart20241213-386-i7xkqa.png>, @content_type="image/png", @original_filename="image.png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"image.png\"\r\nContent-Type: image/png\r\n">, "client_id"=>"bb1ab05dbb9d4d1f9930d05f28b17f94"}
Completed 200 OK in 36ms (Views: 0.1ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
Completed 418  in 23ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.4ms)

El bucket está vacío después (acabo de configurar esto con un bucket nuevo).

¿Alguna pista?

Gracias,

WS

1 me gusta

Asegúrate de que tu instancia EC2 tenga los permisos adecuados para subir a S3, como s3:PutObject y s3:GetObject. Vuelve a verificar la región y la configuración de acceso de tu bucket S3. También podrías intentar activar s3_use_acls: true si es necesario. También puedes probar a subir directamente con AWS CLI para descartar problemas de permisos. Y si no estás utilizando subidas directas, simplemente deja enable_direct_s3_uploads: f como está. ¡Debería ayudar a solucionar el problema!

1 me gusta

hmmmm…

Mi política de roles de EC2Instance se ve así:

[
    {
    "Action": [
        "s3:PutObject",
        "s3:AbortMultipartUpload",
        "s3:PutLifecycleConfiguration",
        "s3:PutObjectVersionAcl",
        "s3:PutBucketCORS",
        "s3:DeleteObject",
        "s3:PutObjectAcl",
        "s3:Get*",
        "s3:List*"
    ],
    "Resource": [
        "arn:aws:s3:::<data-bucket>",
        "arn:aws:s3:::<data-bucket>/*",
        "arn:aws:s3:::<backup-bucket>",
        "arn:aws:s3:::<backup-bucket>/*"
    ],
    "Effect": "Allow"
}
]

Los permisos del bucket se ven así, pero Security Hub ya me está gritando que está demasiado abierto :frowning:

Puedo subir archivos desde la instancia EC2 sin problemas con la CLI (instanceprofile funciona en ese sentido)

ACTUALIZACIÓN: noté que el progreso de la carga llega al 100%, y solo después de eso recibo el error (tuve que ser rápido con Greenshot para capturar esto :smiley:)

hmmmm… parece que tuvo éxito subiendo las multiparte, pero no pudo terminar el proceso después.

Probé ahora, para configurar un usuario de IAM con credenciales y darle permisos s3:*, y ahora la carga funciona, pero discourse no puede mostrarla después:

Como trabajo en una empresa y hay SCP (políticas de control de servicios) activas para nuestras cuentas, parece que el acceso público está generalmente bloqueado.

Parece que no hay S3 para mí (y para todos los que tienen las mismas restricciones para sus cuentas).

Me rindo ahora… :frowning:

Espero que esto te funcione: https://www.youtube.com/watch?v=qjebh5AOZ8E. Esto te funcionaría si no está explícitamente bloqueado por tu empresa.

Estaba recibiendo el mismo mensaje de error que el autor original aquí, con una configuración similar. Verifiqué que podía obtener y poner objetos s3 usando la AWS CLI desde mi instancia EC2, aunque Discourse no pudo hacerlo.

Creé un nuevo usuario IAM con la misma política de permisos que mi rol de instancia EC2 y usé una clave de acceso en lugar del perfil de instancia EC2, y ahora las cargas funcionan bien.

Así que, en mi caso, no fue un problema de cambio de permisos, lo que me hace pensar que puede haber un error en la autenticación del perfil de instancia. ¿Hay alguna forma de obtener más información sobre por qué esto estaba fallando?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.