Cuando los usuarios intentan acceder a los objetos de mi bucket de Amazon Simple Storage Service (Amazon S3), reciben un error 404 «NoSuchKey».
Resolución
Amazon S3 puede devolver errores 404 si el bucket no contiene el objeto solicitado. Antes de que los usuarios realicen solicitudes GET o HEAD para un objeto, asegúrate de que el objeto esté creado y disponible en el bucket de S3.
Para comprobar si un objeto está disponible en un bucket, revisa el contenido del bucket en cuestión desde la consola de Amazon S3. También puedes usar el comando head-object de Interfaz de la línea de comandos de AWS (AWS CLI):
aws s3api head-object --bucket awsexamplebucket --key object.jpg
Nota: Si se muestran errores al ejecutar comandos de la AWS CLI, consulte Errores de solución de problemas de la AWS CLI. Además, asegúrate de utilizar la versión más reciente de AWS CLI.
Amazon S3 ofrece una sólida coherencia de lectura después de escritura para todas las aplicaciones. Tras escribir correctamente un objeto nuevo o al sustituir o eliminar un objeto existente, cualquier solicitud de lectura posterior recibe inmediatamente la versión más reciente del objeto. Amazon S3 también proporciona una gran coherencia para las operaciones de lista. Después de escribir, puedes obtener una lista de los objetos en un bucket. Para obtener más información sobre la coherencia de Amazon S3, consulta Amazon S3 Strong Consistency.
Si el objeto solicitado está disponible en el bucket de S3 y vuelve a aparecer el error 404 NoSuchKey, comprueba lo siguiente:
- Confirma que la solicitud coincida exactamente con el nombre del objeto. Las solicitudes de objetos de S3 distinguen entre mayúsculas y minúsculas. Por ejemplo, si un objeto se llama myimage.jpg, pero se solicita Myimage.jpg, el solicitante recibe un error 404 NoSuchKey.
- Confirma que la ruta solicitada coincida con la ruta del objeto. De lo contrario, el solicitante recibirá un error 404 NoSuchKey.
- Si la ruta del objeto contiene espacios, asegúrate de que la solicitud utilice la sintaxis correcta para reconocer la ruta. Por ejemplo, si utilizas AWS CLI para descargar un objeto a tu equipo Windows, deberás utilizar comillas en la ruta del objeto. La ruta del objeto debe ser similar a esta: aws s3 cp «s3://awsexamplebucket/Backup Copy Job 4/3T000000.vbk».
- Comprueba si el nombre del objeto contiene caracteres especiales o codificados en URL que sean difíciles de ver, como saltos de línea (\r) o líneas nuevas (\n). Por ejemplo, el nombre de objeto test con un salto de línea al final aparece como test%0A en la consola de Amazon S3. Para comprobar si hay caracteres especiales en los nombres de los objetos, usa el comando list-objects-v2 con el parámetro --output json. La salida JSON hace visibles caracteres como los saltos de línea (\r). Si el nombre de un objeto tiene un carácter especial que no siempre está visible, elimínalo del nombre del objeto. Intenta volver a acceder al objeto.
- (Opcional) Puedes activar el registro de acceso al servidor para revisar los registros de solicitudes con más detalle y detectar problemas que puedan provocar un error 404 NoSuchKey.
Nota: Si falta un objeto en el bucket y el solicitante no tiene acceso a s3:ListBucket, el solicitante recibirá un error 403 de acceso denegado. Si recibes un error 403 de acceso denegado, resuelve el problema relacionado con el objeto que falta.
Información relacionada
Solución de problemas de errores de acceso rechazado (403 Forbidden) en Amazon S3