2012-03-11 9 views
6

Teraz wiem, że nie mogę powstrzymać nikogo przed pobieraniem moich filmów i dzieleniem się nimi, jednak wolałbym, aby ludzie nie kopiowali wklejek bezpośrednio do mojego kubełka. Czy istnieje sposób na udostępnienie mojego zasobnika tylko z mojego serwera/domeny wysyłającej żądanie?amazon s3 pliki wideo dostępne tylko z mojej domeny/serwera?

Jeśli to pomaga, używam jwplayer, który ładuje z playlisty xml, która ma wszystkie linki. Ta playlista z pewnością może być otwierana i oglądana z dowolnego miejsca i jest tam, gdzie spodziewam się łatwego kopiowania i wklejania.

Nie chcę maskować adresów URL, ponieważ oznacza to, że moje wiadro jest czytelne dla wszystkich. Nie ma chyba jakiś szansa, że ​​ktoś znajdzie url mojego wiadra i nazwy plików i połączyć wszystko razem ...

Odpowiedz

7

Jest to możliwe dzięki Using Bucket Policies, który pozwala na definiować prawa dostępu do zasobów Amazon S3 - istnieje kilka Example Cases for Amazon S3 Bucket Policies ilustrujący funkcjonalność, a wśród nich znajdziesz przykładowe dla Ograniczanie dostępu do określonych adresów IP także:

tym stwierdzeniem grantów uprawnień dla każdego użytkownika wykonywać żadnych działań S3 dla obiektów w określonym wiadrze. Jednak żądanie musi mieć wartość pochodzącą z zakresu adresów IP określonych w warunku.

W zależności od specyfiki przypadku użycia, polityka wiadro może to wyglądać tak:

{ 
    "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" 
       } 
      } 
     } 
    ] 
} 

Jak pokazano wartość aws:sourceIp parametrów IPAddress i NotIpAddress jest wyrażona w CIDR notation, umożliwiając odpowiednią elastyczność do komponowania pożądanego zakresu.

Wreszcie może chcesz sprawdzić zalecany AWS Policy Generator, wybierz typ S3 Polityka łyżki i zbadać dostępnych Akcje i Warunki komponować polityk bardziej ukierunkowanych dla przypadku użycia ostatecznie - dokumentację dla Conditions wyjaśnia to szczegółowo.

+0

Dzięki Steffen, po prostu zastanawiasz się, zamiast adresu IP, mogę to zrobić z nazwy domeny? Okazuje się, że muszę płacić co miesiąc, aby uzyskać unikalny adres IP dla mojego wspólnego hostingu ... – Matt

+0

@Ali: Obawiam się, że nie jest on dostępny jako taki (mimo że jest to oczywisty przypadek użycia); Zaktualizowałem końcowe akapity mojej odpowiedzi dotyczące notacji CIDR używanej dla 'aws: sourceIp', a także innych dostępnych warunków i eksploracji poprzez [Generator polis AWS] (http://awspolicygen.s3.amazonaws.com/ policygen.html) - pierwsza z nich może pozwolić ci określić wszystkie bloki adresów IP, których twój dostawca może używać (jeśli są udokumentowane), co znacznie redukuje gorącą łączącą powierzchnię. To, czy jest to w ogóle możliwe, zależy oczywiście od twojego przypadku użycia i środowiska (tj. Dostawcy). –

+0

Zobacz odpowiedź arulraj.net dla uprawnień specyficznych dla domeny. Wiem, że to dwa lata później, ale ten komentarz przez moje poszukiwania, więc pomyślałem, że go zaktualizuję. –

1

Możesz zabezpieczyć swój pojemnik, który jest domyślnie taki, jaki jest. (co oznacza, że ​​masz dostęp wyłącznie do obiektów w nim zawartych). Następnie możesz poprosić o pliki z Amazon S3 ze swojej witryny i podać limit czasu, w którym użytkownik może je zobaczyć.

//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'); 

Spowoduje to automatyczne podanie adresu URL z parametrami, które są dostępne tylko przez 1 minutę. Możesz użyć tego jako źródła w swojej witrynie internetowej, a następnie nie mogą go skopiować i wkleić do przeglądarki po upływie 1 minuty.

Możesz przeczytać więcej na ten temat na Amazon SDK for PHP

+0

Czy można to zrobić na poziomie kubełka? na przykład uzyskać podpisany URL dla wszystkich plików w wiadrze, aby wygasł po XX, zamiast wymagać tego dla każdego adresu URL w czasie wykonywania? –

6

adres IP pomoże, jeśli serwer będzie dostęp do wiadra. Ale JWPlayer jest po stronie klienta. Żądanie jest więc przesyłane bezpośrednio z jwplayer (przeglądarki) do s3 URL-a, nie przez serwer. W tym przypadku pomoże Ci w tym "Zasady dotyczące stron odsyłających".

{ 
"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/*" 
     ] 
     } 
    } 
    } 
] 
} 

Tak więc teraz s3 zezwala, jeśli wniosek pochodzi tylko z witryny.

+0

Jeśli ktoś wyśle ​​żądanie, ustawiając nagłówek strony odsyłającej, to w takim przypadku będzie on łatwo pobierać wideo. – shuboy2014

0

Ograniczanie dostępu do określonego Polecającego HTTP

Załóżmy, że masz swoją stronę WWW z nazwą domeny (www.example.com lub example.com) z linkami do zdjęć i filmów zapisanych w wiadrze Amazon S3, examplebucket. Domyślnie wszystkie zasoby Amazon S3 są prywatne, więc tylko konto AWS, które utworzyło zasoby, może uzyskać do nich dostęp. Aby umożliwić dostęp do odczytu tych obiektów ze swojej witryny, można dodać zasadę zasobu, która zezwala na uprawnienie s3: GetObject z warunkiem, za pomocą klucza aws: referer, że żądanie pobierania musi pochodzić z określonych stron internetowych. Poniższa zasada określa warunek StringLike za pomocą klucza warunku aws: Referer.

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