Tôi đang tạo ứng dụng sử dụng Dịch vụ mã bảo mật của Amazon để tạo người dùng tạm thời truy cập thư mục con trên thùng S3. Người dùng được tạo bởi người dùng IAM có quyền truy cập đọc/ghi đầy đủ vào nhóm (cũng như các quyền cần thiết để tạo người dùng).Chính sách S3 dựa trên tiền tố Amazon không hoạt động (AWS, IAM, STS, Ruby)
Tôi có việc tạo người dùng hoạt động hoàn hảo cùng với hết hạn phiên và hơn thế nữa, nhưng tôi gặp sự cố khi có chính sách phù hợp để cho phép danh sách khóa dựa trên tiền tố. Các điều khoản mà tôi muốn người dùng cuối có bao gồm: đối tượng
- đọc được trong một số tiền tố được xác định
- Write đối tượng với cùng tiền tố được xác định
- Liệt kê tất cả các đối tượng cư trú tại các tiền tố được xác định
Tôi đã quản lý để đọc và viết hoạt động nhưng bằng cách nào đó, bất kể tôi thử truy cập danh sách nào không hoạt động đúng cách. Đây là mã Ruby mà tôi đang sử dụng khi tôi ở gần nhất:
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
Nếu tôi nhớ lại, điều này cho phép tôi đọc và viết nhưng không liệt kê. Vì tôi vẫn đang phát triển, tôi đã thay đổi mã này:
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
Điều này làm việc tốt 100% với vấn đề rõ ràng là không có gì bị ràng buộc vào tiền tố cho phép người dùng điều khiển công việc của nhau.
Tôi đang làm gì sai trong chính sách của mình?