2012-01-17 207 views
4

我在使用GetSessionToken/GetFederationToken的Amazon S3中使用临时会话,我计划拥有超过10K个用户,每个人都可以上传到S3,因此初始时我想为每个用户使用一个存储桶并设置写入(上传)每个用户的每个桶的权限,但由于每个亚马逊账户的桶数有限制,我已经放弃了这个想法。Amazon S3权限

如何设置允许公开阅读的权限,以及仅当用户想要上传的对象的键的前缀时才上传?

例如,如果用户名X上传文件,则密钥必须与X_filename类似。

或者任何其他让我有安全感的方式,这是一个移动应用程序,我不想在上传文件时通过我们自己的服务器。

编辑:

我试着操作GetFederationToken与以下政策

"{ 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":["s3:PutObject","s3:GetObject","s3:GetObjectVersion", 
     "s3:DeleteObject",\"s3:DeleteObjectVersion"], 
     "Resource":"arn:aws:s3:::user.uploads/john/*" 
    } 
    ] 
}" 

我对S3桶user.uploads和文件夹约翰

但是任何上传与会议证书来桶user.uploads与关键的约翰/文件名失败,访问被拒绝“

+0

这将工作,但你需要检查一切。例如,政策可能是错误的。 - 为内部测试做一个宽敞的测试,然后缩小它。此外,所有来自iOS的亚马逊S3调用都需要使用您获得的联合令牌。 – 2012-01-17 21:46:12

回答

5

Amazon's Identity and Access Management (IAM)服务是什么哟你需要。 documentation有许多例子,其中一些例子符合你的情况。

从文档:

实施例5:允许一个伙伴文件拖放到的 企业桶

的特定部分在该示例中,我们创建了代表一个称为WidgetCo组 合作伙伴公司,然后为需要访问的合作伙伴公司创建特定人员(或 应用程序)的用户,然后将 用户加入该组。

然后,我们附加一个策略,使组织PutObject能够访问企业存储桶中目录后面的 : my_corporate_bucket/uploads/widgetco。

我们还希望防止WidgetCo组从桶做别的 ,所以我们添加拒绝权限上的 AWS账户的任何Amazon S3的资源除了PutObject任何 亚马逊S3行动的声明。只有在您的AWS账户的其他地方使用广泛的政策 ,以便用户能够广泛访问Amazon S3时,才需要此操作。

{ 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":"s3:PutObject", 
     "Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" 
    }, 
    { 
     "Effect":"Deny", 
     "NotAction":"s3:PutObject", 
     "Resource":["arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"] 
    }, 
    { 
     "Effect":"Deny", 
     "Action":"s3:*", 
     "NotResource": ”arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" 
    }] 
} 

你会为每个用户创建一个新的身份,并以此作为需要控制访问子文件夹(前缀)。

+0

是的,但即使不使用组,也不使用组,AWS用户即时使用在AWS之外管理的联合用户\ – forcewill 2012-01-17 16:43:53

+0

联合用户可以使用与任何用户相同的策略文档。但政策文件需要很小 - 上面的例子可能适用于联邦,我没有尝试过。所以你为每个用户制定一个定制的策略文档。请注意,您应该使用官方AWS iOS sdk - 它支持会话令牌。 – 2012-01-17 21:36:20