AWS supports temporary access keys, and one of the recommended solutions is to have an API which generates temporary credentials for a specific task that will expire shortly after.
Edit:
Heres a link http://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessi...
- Store/retrieve state in/from DynamoDB or RDS
- Pull an object from S3
- Send an SNS notification
- Add a message to an SQS queue
- Dispatch email via SES
1) Client: "Hey, I want to upload a file."
2) Server: "Okay, here's a temporary key good for the next <n> minutes. The file has to be named <blah> and can't be more than <x> MB long" (there are other restrictions you can set, too, IIRC)
3) Client posts the form to S3 including the temporary key as a field.
4) Result.