2012-03-11 32 views
6

Bây giờ, tôi biết rằng tôi không thể ngăn ai đó tải xuống video của tôi và chia sẻ, tuy nhiên tôi muốn có nó để mọi người không sao chép liên kết dán trực tiếp vào nhóm của tôi. Do đó, có cách nào để làm cho nhóm của tôi chỉ truy cập được từ máy chủ/miền của tôi đưa ra yêu cầu không?amazon s3 chỉ có thể truy cập từ tên miền/máy chủ của tôi?

Nếu có ích, tôi đang sử dụng jwplayer tải từ danh sách phát xml có tất cả các liên kết. Danh sách phát này chắc chắn có thể được mở và xem từ mọi nơi và là nơi tôi mong đợi bản sao và dán dễ dàng xuất phát từ đó.

Tôi không muốn che giấu các url vì điều đó có nghĩa là nhóm của tôi có thể đọc được với tất cả mọi người. Có lẽ một số cơ hội mà ai đó sẽ tìm thấy url của xô tôi và tên của các tập tin và kết nối tất cả mọi thứ với nhau ...

Trả lời

7

Điều này có thể bởi Using Bucket Policies, mà cho phép bạn xác định quyền truy cập cho nguồn Amazon S3 - có một vài Example Cases for Amazon S3 Bucket Policies minh họa các chức năng, và trong số này bạn sẽ tìm thấy một ví dụ cho Hạn chế truy cập đến IP cụ thể Địa chỉ cũng như:

tuyên bố này tài trợ quyền truy cập vào bất kỳ người sử dụng để thực hiện bất kỳ hành động S3 trên các đối tượng trong nhóm được chỉ định. Tuy nhiên, yêu cầu phải bắt nguồn từ dải địa chỉ IP được chỉ định trong điều kiện.

Tùy thuộc vào chi tiết cụ thể của trường hợp sử dụng của bạn, một chính sách xô cho điều này có thể trông giống như vậy:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:*", 
      "Resource": "arn:aws:s3:::bucket/*", 
      "Condition" : { 
       "IpAddress" : { 
        "aws:SourceIp": "192.168.143.0/24" 
       }, 
       "NotIpAddress" : { 
        "aws:SourceIp": "192.168.143.188/32" 
       } 
      } 
     } 
    ] 
} 

Như đã trình bày giá trị aws:sourceIp cho các thông số IPAddressNotIpAddress được thể hiện trong CIDR notation, cho phép linh hoạt tương ứng để soạn phạm vi mong muốn.

Cuối cùng, bạn có thể muốn kiểm tra đề nghị AWS Policy Generator, chọn loại S3 Bucket Policy và khám phá những sẵn ActionsĐiều kiện để soạn chính sách nhắm mục tiêu hơn đối với trường hợp sử dụng của bạn cuối cùng - tài liệu cho Conditions giải thích điều này một cách chi tiết.

+0

Cảm ơn Steffen, chỉ cần tự hỏi, thay vì một địa chỉ ip, tôi có thể làm cho nó từ một tên miền? Hóa ra tôi phải trả hàng tháng để có một ip duy nhất cho lưu trữ được chia sẻ của tôi ... – Matt

+0

@Ali: Tôi e rằng điều này là không có sẵn như vậy (mặc dù là một trường hợp sử dụng rõ ràng thực sự); Tôi đã cập nhật các đoạn đóng của câu trả lời của tôi liên quan đến ký pháp CIDR được sử dụng cho 'aws: sourceIp' cũng như các điều kiện khác có sẵn và khám phá thông qua [Trình tạo chính sách AWS] (http://awspolicygen.s3.amazonaws.com/ policygen.html) - trước đây có thể cho phép bạn chỉ định tất cả các khối địa chỉ IP mà nhà cung cấp của bạn có thể đang sử dụng (nếu được ghi lại), do đó giảm đáng kể bề mặt liên kết nóng. Cho dù điều này là khả thi ở tất cả phụ thuộc vào trường hợp sử dụng và môi trường của bạn (ví dụ như nhà cung cấp) của khóa học. –

+0

Xem câu trả lời của arulraj.net cho các quyền dành riêng cho miền. Tôi biết điều này là hai năm sau đó, nhưng nhận xét này thông qua tìm kiếm của tôi vì vậy tôi nghĩ rằng tôi muốn cập nhật nó. –

1

Bạn có thể bảo vệ thùng của mình theo mặc định. (nghĩa là bạn chỉ có quyền truy cập vào các đối tượng trong đó) Sau đó, bạn có thể yêu cầu các tệp từ Amazon S3 từ trang web của bạn và cung cấp cho nó một giới hạn thời gian mà người dùng có thể nhìn thấy nó.

//set time so that users can see file for 1 minute. then it is protected again. 
$response = $s3->get_object_url(YOUR_A3_BUCKET, PATH/TO/FILE, '1 minutes'); 

Điều này sẽ tự động cung cấp cho bạn url có thông số liên quan đến chỉ có thể truy cập trong 1 phút. Bạn có thể sử dụng nó như là nguồn của bạn trong trang web của bạn và sau đó họ không thể sao chép và dán nó vào trình duyệt sau đó 1 phút.

Bạn có thể đọc thêm về điều này tại Amazon SDK for PHP

+0

Điều này có thể được thực hiện ở cấp độ xô không? ví dụ. có được một url đã ký cho tất cả các tệp trong một nhóm hết hạn sau XX, thay vì cần phải yêu cầu điều này cho mỗi và mọi URL trong thời gian chạy? –

6

Địa chỉ Ip sẽ giúp đỡ nếu máy chủ của bạn sẽ truy cập vào xô của bạn. Nhưng JWPlayer là từ phía khách hàng. Vì vậy, yêu cầu trực tiếp đi từ jwplayer (trình duyệt) đến url s3 xô, Không qua máy chủ của bạn. Trong trường hợp này, "chính sách nhóm giới thiệu" sẽ giúp bạn trong việc này.

{ 
"Version": "2008-10-17", 
"Statement": [ 
    { 
    "Sid": "1", 
    "Effect": "Deny", 
    "Principal": { 
     "AWS": "*" 
    }, 
    "Action": "s3:GetObject", 
    "Resource": "arn:aws:s3:::yourbucketname/*", 
    "Condition": { 
     "StringNotLike": { 
     "aws:Referer": [ 
      "http://yoursitename.com/*", 
      "http://*.yoursitename.com/*" 
     ] 
     } 
    } 
    } 
] 
} 

Vì vậy, bây giờ s3 sẽ cho phép nếu yêu cầu đó chỉ đến từ trang web của bạn.

+0

Nếu có ai gửi yêu cầu bằng cách đặt tiêu đề liên kết giới thiệu thì trường hợp đó, anh ấy sẽ dễ dàng tải xuống video. – shuboy2014

0

Hạn chế truy cập đến một HTTP Người giới thiệu cụ thể

Giả sử bạn có một trang web với tên miền (www.example.com hay example.com) với các liên kết đến hình ảnh và video được lưu trữ trong xô Amazon S3 của bạn, examplebucket. Theo mặc định, tất cả tài nguyên Amazon S3 là riêng tư, vì vậy chỉ tài khoản AWS đã tạo tài nguyên mới có thể truy cập chúng. Để cho phép truy cập đọc vào các đối tượng này từ trang web của bạn, bạn có thể thêm chính sách nhóm cho phép quyền s3: GetObject với điều kiện, sử dụng khóa aws: referer, rằng yêu cầu nhận phải bắt nguồn từ các trang web cụ thể. Chính sách sau chỉ định điều kiện StringLike với aws: Referer condition key.

http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html

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