【发布时间】:2013-04-05 13:48:00
【问题描述】:
我正在构建一个应用程序,该应用程序使用 Amazon 的安全令牌服务来创建临时用户以访问 S3 存储桶上的子目录。用户由对存储桶具有完全读/写访问权限(以及创建用户所需的权限)的 IAM 用户创建。
我创建的用户与会话到期等功能完美配合,但我在制定正确的策略以允许基于前缀的键列表时遇到问题。我希望最终用户拥有的权限是:
- 读取某些已定义前缀中的对象
- 将对象写入相同的定义前缀
- 列出所有位于定义前缀中的对象
我设法让读写工作,但不知何故,无论我尝试什么,列表访问都无法正常工作。这是我最近时使用的 Ruby 代码:
AWS::STS::Policy.new do |policy|
policy.allow(
actions: ["s3:GetObject*", "s3:PutObject*", "s3:DeleteObject*"],
resources: "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/#{folder_path}/*"
)
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
).where(:s3_prefix).like("#{folder_path}/*")
end
如果我记得,这让我可以阅读和写作,但不能列出。由于我仍在开发中,我已将代码更改为:
AWS::STS::Policy.new do |policy|
# FIXME: This is way too permissive, but it's not working to be more specific.
policy.allow(
actions: ["s3:*"],
resources: ["arn:aws:s3:::#{ENV['PROJECT_BUCKET']}/*", "arn:aws:s3:::#{ENV['PROJECT_BUCKET']}"]
)
end
这可以 100% 正常工作,但有一个明显的问题是没有任何东西被限制在一个前缀上,这样用户就可以破坏彼此的工作。
我的政策做错了什么?
【问题讨论】:
标签: ruby amazon-web-services amazon-s3 amazon-iam