I want to create a one time download link to an amazon s3 hosted file. This link expires once the file has been downloaded.
I want this file to still be hosted but a
There is no way to tell S3 to allow a link to be used only once. But you can create a link that can only be used until a specified time. What I do is redirect the requester to an S3 link that expires in a few minutes, so he or she doesn't have time to share it. You can make that expiration time very short, even a few seconds, so long as their browser has time to receive the redirect response and follow it.
You can write an "one time url generator" service (either in form of website or rest API) and make use of aws federated user feature to achieve this.
Consider the following procedure: