You can limit the files by accessing the files through an action of a controller. This way you can control, which files a user can access and which not.
If you simply make a privat s3 bucket, this won't help you. As a user with a valid key can access any files in the bucket. If you have really file which needs to be protected, you have only view ways to do it (as I think):
- Restrict access to the bucket and serve the files through an action of a controller (no real way to work around this)
- Rename the specific files to be not easy to predict (e.g. 32 or more characters of numbers and letters). This is quit simple to achieve and you can still serve the files directly from s3
- Save the files somewhere else (maybe in an other s3 bucket), so nobody can predict them
For renaming files you can use this stackoverflow question: Paperclip renaming files after they're saved