Estoy creando una URL prefirmada para que el usuario en la interfaz pueda cargar un archivo (máximo 10 MB) así es como lo creo
const s3Params = { Bucket: S3_BUCKET, Expires: 30, Fields: { key: key, }, Conditions: [ ["eq", "$acl", "public-read"], ["eq", "$x-amz-meta-filename", fileName], ["content-length-range", 1, 10000000], //10MB ["eq", "$x-amz-meta-userid", userid], ], }; console.log(s3Params); s3.createPresignedPost(s3Params, (err, data) => { if (err) { console.log(err); return cb({success: false, error: err}); } data.fields["x-amz-meta-filename"] = fileName; data.fields["x-amz-meta-userid"] = userid; const returnData = { signedRequest: data, url: `https://${S3_BUCKET}.s3.amazonaws.com/${key}`, }; return cb({success: true, data: {returnData}}); });en las Condiciones establecí el tamaño máximo del archivo (rango de longitud del contenido) en 10 MB, pero aún pude cargar un archivo de 25 MB utilizando la URL prefirmada generada. Estaba pensando que podría tener algo que ver con la política de depósitos, pero no estoy seguro.
Esta es mi política de depósito
"Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::blah.blah/*" } ] }Creo que sus condiciones simplemente se ignoran porque el cubo permite escrituras anónimas (¡práctica muy terrible!). De documentos :
Si no proporciona los elementos necesarios para las solicitudes autenticadas, como el elemento de la política, se supone que la solicitud es anónima y tendrá éxito solo si ha configurado el depósito para lectura y escritura pública .
Cuando utiliza direcciones URL prefirmadas, no debe hacer público su depósito.