我正在构建一个应用程序,它使用亚马逊的安全令牌服务来创建临时用户来访问 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% 正常工作,但有一个明显的问题是没有任何东西被限制在允许用户破坏彼此工作的前缀上。
我的政策做错了什么?