We're moving from Nirvanix to Amazon S3.
What I need is to simulate Nirvanix style child accounts for S3 storage.
(In a nutshell these provide isolated storage with predefined limit, and a separate authentication for each sub-user, still managed by the same master account).
We'll have more than 100 users so the bucket-per user won't work (that's still limited at 100 right?).
The storage is used directly from a desktop application (and not, for example, via our servers, though there is a central server if that helps).
We want a single S3 billing account that pays for everything, but we want our customers objects safely segmented from each other.
Nirvanix provides this out of the box (http://developer.nirvanix.com/sitefiles/1000/API.html#_TocCreatingChildAccounts) - this is essentially what I'm trying to replicate with S3.
I understand how to segment objects for each sub-user, e.g. using the "prefix" notation of Objects (E.g. "USER1/object1", "USER2/something_else).
What I can't work out:
1) How can I set permissions so that each customer can only access his files?
If I give "the app" access to the S3 storage, then that obviously means that every user of the app could access anyones files.
It seems like you can set rich ACLs, but what I can't understand is "who" you can set permissions against. Is it only AWS users? Does that mean the only way to do this is to have my customers each have an AWS account?
If so, can I create accounts on their behalf? E.g. through an API call?
What we certainly cannot allow is having every user create an account through the AWS website (yuck!).
2) Any ideas about the best way to manage quotas for each customer?
This concerns me because from what I can tell, we'd have to limit this from the desktop application. This is obviously ripe for abuse because S3 will just keep allowing more data.
I guess we could probably live with having a script we run daily which sanity checks the storage limits for "abuse", but just wondered if there was a better way.
Thanks all!
John