S3 versioning is enabled at the bucket level and it allows for you to “version” objects on your bucket. Essentially what this does is it allows for you to easily roll back objects and protect against accidental deletion. When you enable versioning, if you update an object and overwrite the old object, you can check the old version and actually see it and if you delete the later version it will revert to the old version of the file, or better yet if you accidentally delete an object with versioning enabled it simply places a “delete marker” on the object and once if you delete the delete marker from S3 the object is restored! This function is almost essential to have as it can protect from accidental deletion and allow you to keep track of updates to objects in your buckets and revert as needed!