如何使用AWS S3策略强制联合用户对资源的拥有权?

3 投票
1 回答
715 浏览
提问于 2025-04-17 06:00

我正在写一个应用程序,里面有一组用户,每个用户都会在一个S3存储桶的“目录”中有一些文件。用户将使用亚马逊的STS进行身份验证,获取临时的安全凭证,这样他们就可以访问自己拥有的资源,而不能访问其他人的资源(可以想象成“个人”目录)。

假设用户已经在系统中存在(并且已经通过身份验证),并且他们的文件存储桶已经创建(没有指定策略或访问控制列表),使用的命名规则是:

<< my app's bucket>>/<< user's identifier >>/

在用户请求访问文件时,我们使用boto授予临时安全凭证,具体如下:

get_federation_token(<< user's identifier >>, duration,policy=user_policy)

其中user_policy是:

user_policy =  (r'{"Statement": [{"Effect":"Allow",
    "Action":[
"s3:PutObject",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:DeleteObject",
"s3:DeleteObjectVersion"],
    "Resource":"arn:aws:s3:::/%s/*"}]}' % (<< user's identifier >>))

我原以为我理解了策略,但显然我还是有些不明白。按照上面的方案,我可以在用户的目录下获取和放置资源,但我也能访问其他用户的目录和资源。我实在搞不清楚怎么才能正确地隔离访问权限。我也尝试过修改存储桶的策略,但没有成功。

任何建议都会很感激。

注意:我被限制使用STS,因为我们可能会有太多用户,无法创建或使用IAM用户。

1 个回答

3

有人问了这样一个问题——结果发现这个存储桶的设置是允许所有人公开读取的,使用的是存储桶策略。你需要再检查一下有没有其他的访问控制列表(ACL)之类的东西,可能也允许访问。此外,看起来没有“列出”访问权限——这正是你想要的吗?你能否通过调用获取存储桶的内容,列出里面所有的文件?(其实你不应该能做到这一点)。

不知道这是否有帮助——他们在策略中使用了“StringLike”。http://www.techtricky.com/amazon-s3-how-to-restrict-user-access-to-specific-folder-or-bucket/

https://forums.aws.amazon.com/search.jspa?objID=f76&q=stringlike&x=0&y=0

撰写回答