2012-12-15 14 views
9

Tôi muốn tạo một URL "được ký trước" để tải lên một đối tượng cụ thể (PUT) lên thùng Amazon S3.URL được ký trước và x-amz-acl

Cho đến nay rất tốt. Tôi đang sử dụng thư viện python boto để tạo URL, chứa tất cả nội dung cần thiết (hết hạn, chữ ký, v.v.). URL trông như thế này:

https://<bucketname>.s3.amazonaws.com/<key>?Signature=<sig>&Expires=<expires>&AWSAccessKeyId=<my key id>&x-amz-acl=public-read

Lưu ý các tham số cuối cùng. Điều này, ít nhất, như tôi hiểu, hạn chế bất cứ ai sử dụng URL này để tải lên một đối tượng đến một khóa cụ thể trong một nhóm cụ thể và cũng giới hạn ACL đóng hộp sẽ được đặt trên đối tượng để "đọc công khai".

Câu lệnh cuối cùng của tôi khá không chính xác.

Khi nó quay ra, nếu bạn đang sử dụng URL này, bạn có thể làm như sau với x-AMZ-acl tiêu đề (như trái ngược với chuỗi tham số truy vấn có cùng tên, mà bạn phải đặt để kiểm tra chữ ký thành công):

  1. Đặt thành "công khai đọc". Quyền của đối tượng sẽ bao gồm hai mục: "đọc" cho "Mọi người" và "toàn quyền kiểm soát" cho chủ nhóm. Điều này là khá mong đợi.
  2. Bỏ qua tiêu đề x-amz-acl. Các quyền trên đối tượng sẽ giống như mặc định cho mỗi nhóm (chủ sở hữu nhóm có toàn quyền kiểm soát). Tại sao?
  3. Đặt thành "công khai đọc". Kết quả chính xác như trong (1).
  4. Đặt thành "được xác thực đọc". "Người dùng được xác thực" nhận được quyền "đọc", chủ sở hữu nhóm có toàn quyền kiểm soát.
  5. Đặt thành "nhóm chủ sở hữu đã đọc". Kết quả chính xác như trong (2). Chủ nhóm có toàn quyền kiểm soát, không có quyền nào khác được xác định.
  6. Đặt thành "nhóm chủ sở hữu toàn quyền kiểm soát". Không ngạc nhiên, chủ sở hữu xô sẽ có toàn quyền kiểm soát.
  7. Đặt thành tên ACL không tồn tại và gặp lỗi.

Vì vậy, có vẻ như, đó

  1. x-AMZ-acl tiêu đề không tham gia vào việc kiểm tra chữ ký, vì bạn có thể thay đổi nó theo ý thích và yêu cầu thành công. Tham số chuỗi truy vấn, tuy nhiên, chắc chắn được tính đến trong quá trình kiểm tra chữ ký.
  2. x-amz-acl tham số chuỗi truy vấn không ảnh hưởng đến quyền của đối tượng trực tiếp, như trong, bản thân nó không có gì.
  3. Nếu bạn gửi một tiêu đề x-AMZ-acl, các điều khoản kết quả không bao giờ có
    • hạn chế hơn cho chủ sở hữu xô, hơn là theo mặc định.
    • ít hạn chế hơn đối với chủ sở hữu không phải nhóm.
  4. Tuy nhiên, chúng có thể là hạn chế hơn cho chủ sở hữu không phải là chủ sở hữu nhóm. Tức là, nếu bạn chỉ định x-amz-acl=public-read trong chuỗi truy vấn, bạn có thể đặt tiêu đề x-amz-acl thành authenticated-read và thay vì đối tượng có thể đọc công khai nhận đối tượng, chỉ có thể đọc bởi người dùng được xác thực.

Quan hệ thực giữa tham số QS x-amz-acl và tiêu đề, có cùng tên không? Có cách nào để hạn chế quyền đối với đối tượng không, đó là tải lên thông qua yêu cầu PUT tới URL được gọi là "đã ký trước"?

Trả lời

4

Khi tôi hiểu nó (và tôi có thể sai ở đây), tiêu đề x-amz-acl được ưu tiên hơn đối số chuỗi truy vấn - và chúng thực hiện cùng một mục đích. Lý do chỉ tham số chuỗi truy vấn được đưa vào tài khoản trong quá trình kiểm tra chữ ký đơn giản là do thực tế các tiêu đề không phải là một phần của kiểm tra chữ ký cho chính sách.

This page có thể giúp bạn; nó đã giúp tôi rất nhiều khi tạo biểu mẫu để tải trực tiếp lên S3.

+0

Vì bạn là người duy nhất, người dành một số nỗ lực cho câu hỏi này, nó chỉ công bằng, bạn nhận được tiền thưởng, mặc dù câu trả lời, thật không may, đã không giúp tôi chút nào. – shylent

+0

Tôi xin lỗi vì câu trả lời không hữu ích hơn; đã cố gắng vượt qua bất kỳ kiến ​​thức nào tôi có về chủ đề này. – jdotjdot

-1

Dường như bạn đang sử dụng tên không đúng cho thông số ACL. Theo hướng dẫn của họ về yêu cầu ký, hãy thử sử dụng acl:

Signing and Authenticating REST Requests

Nếu yêu cầu giải quyết một tiểu tài nguyên, như phiên bản, vị trí, acl, torrent, vòng đời, hoặc????? versionid chắp thêm tài nguyên phụ, giá trị của nó nếu nó có một và dấu chấm hỏi. Lưu ý rằng trong trường hợp có nhiều tài nguyên phụ, tài nguyên phụ phải được sắp xếp theo từ điển theo tên tài nguyên phụ và được phân tách bằng '&'. ví dụ. ? acl & versionId = giá trị.

Danh sách các tài nguyên phụ phải được bao gồm khi xây dựng Phần tử CanonicalizedResource là: acl, vòng đời, vị trí, ghi nhật ký, thông báo, partNumber, chính sách, yêu cầuThanh toán, torrent, uploadId, tải lên, versionId, phiên bản, phiên bản và trang web .

+0

Không, những gì bạn đã trích dẫn các cuộc đàm phán về các yêu cầu được thực hiện đối với các tài nguyên con, chẳng hạn như cors, acl, lifecycle v.v. Điều này sẽ có liên quan nếu tôi đang cố gắng tạo yêu cầu, được đặt trên một nhóm cụ thể. Câu hỏi của tôi là về việc tải các đối tượng lên một thùng và chỉ định acl trên đối tượng _that đang được upload_. Đó là một cái gì đó hoàn toàn khác. – shylent

Các vấn đề liên quan