
W wiaderkach S3 często znajdują się publicznie dostępne, statyczne zasoby udostępniane na stronach internetowych – zdjęcia, pliki dźwiękowe albo video. Przeglądający witrynę ma dostęp do nich zarówno przez stronę internetową, jak i bezpośrednio – przez adres URL danego obiektu.
Co zrobić, by umożliwić dostęp do zdjęć lub filmów tylko z witryny, a nie bezpośrednio przez adres URL obiektu w S3?
Rozwiązaniem jest przypisanie odpowiedniej polityki do wiaderka S3. W konsoli znajdziesz tę opcję po wybraniu danego wiaderka, w zakładce Permissions => Bucket Policy:
{
"Version": "2012-10-17",
"Id": "http referer policy example",
"Statement": [
{
"Sid": "Allow get requests referred by www.swiatchmury.pl and swiatchmury.pl.",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::swiatchmury-examples/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"https://www.swiatchmury.pl/*",
"https://swiatchmury.pl/*"
]
}
}
},
{
"Sid": "Allow get requests referred by www.swiatchmury.pl and swiatchmury.pl.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::swiatchmury-examples/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"https://www.swiatchmury.pl/*",
"https://swiatchmury.pl/*"
]
}
}
}
]
}

Pierwsza część polityki zezwala na zapytania GET z określonymi wartościami nagłówka referer. Druga część wprost zabrania pobierania obiektów za pomocą zapytań GET bez określonej w polityce wartości tego nagłówka.
Aby przypisać do wiaderka jakąkolwiek politykę zezwalającą na publiczny dostęp, wyłącz blokowanie ustanawiania „publicznych” polityk:

W przeciwnym razie dodanie takiej polityki nie będzie możliwe.
Przykład
Pod adresem https://swiatchmury.pl/chmury/ znajduje się krótki film video. Jeśli w przeglądarce włączysz podgląd źródła strony i odnajdziesz odpowiedni fragment, zobaczysz, że adres URL obiektu w S3 to
https://swiatchmury-examples.s3-eu-west-1.amazonaws.com/video/clouds.mp4
Bez ustawionej polityki dostępu film byłby dostępny bezpośrednio również pod tym adresem. Teraz – gdy użyjesz adresu URL obiektu w zapytaniu, otrzymasz komunikat AccessDenied:

Więcej przykładów polityk dostępu do wiaderek S3 znajdziesz w dokumentacji.