我正在编写一个应用程序,其中有一组用户,每个用户将在 S3 存储桶内的“目录”中拥有许多与他们关联的文件。用户将使用 Amazon 的 STS 进行身份验证,获得临时安全凭证,这些凭证应该允许他们访问他们拥有的资源,同时不允许他们访问他们没有的资源(想想:“主”目录)。
假设用户已经存在于系统中(并且已经过身份验证),并且他们的文件存储桶是使用命名方案创建的(没有指定的策略或 ACL):
<< 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 用户。