How can I troubleshoot the 404 "NoSuchKey" error from Amazon S3?
Last updated: 2021-01-05
My users are trying to access objects in my Amazon Simple Storage Service (Amazon S3) bucket. However, Amazon S3 is returning the 404 "NoSuchKey" error. How can I troubleshoot this error?
Amazon S3 generally returns 404 errors if the requested object is missing from the bucket. Before users make GET or HEAD requests for an object, make sure that the object is created and available in the S3 bucket.
To check if an object is available in a bucket, you can review the contents of the bucket from the Amazon S3 console. Or, you can run the head-object command using the AWS Command Line Interface (AWS CLI):
aws s3api head-object --bucket awsexamplebucket --key object.jpg
Important: If you receive errors when running AWS CLI commands, make sure that you’re using the most recent AWS CLI version.
Note that Amazon S3 delivers strong read-after-write consistency for all applications. After a successful write of a new object, or an overwrite or delete of an existing object, any subsequent read request immediately receives the latest version of the object. S3 also provides strong consistency for list operations. After a write, you can perform a listing of the objects in a bucket. For more information about S3 consistency, see Consistency.
If the requested object was available in the S3 bucket for some time and you receive a 404 NoSuchKey error again, then check the following:
- Confirm that the request matches the object name exactly, including the capitalization of the object name. Requests for S3 objects are case sensitive. For example, if an object is named myimage.jpg, but Myimage.jpg is requested, then requester receives a 404 NoSuchKey error.
- Confirm that the requested path matches the path to the object. Otherwise, the requester receives a 404 NoSuchKey error.
- If the path to the object contains any spaces, be sure that the request uses the correct syntax to recognize the path. For example, if you're using the AWS CLI to download an object to your Windows machine, you must use quotation marks around the object path. The object path must look like this: aws s3 cp "s3://awsexamplebucket/Backup Copy Job 4/3T000000.vbk".
- Check the object name for any special characters or URL-encoded characters that are difficult to see, such as carriage returns (\r) or new lines (\n). For example, the object name test with a carriage return at the end shows as test%0A in the Amazon S3 console. To check object names for special characters, you can run the list-objects-v2 command with the parameter --output json. The JSON output makes characters like returns (\r) visible. If an object name has a special character that's not always visible, remove the character from the object name. Then, try accessing the object again.
- Optionally, you can enable server access logging to review request records in further detail for issues that might be causing the 404 NoSuchKey error.
Note: If an object is missing from the bucket and the requester doesn’t have s3:ListBucket access, then the requester will receive a 403 Access Denied error. If you receive a 403 Access Denied error, resolve the issue related to the missing object.