Dobrą praktyką przy tworzeniu aplikacji jest testowanie rozwiązań przed ich uruchomieniem produkcyjnym. W przypadku stron internetowych warto przy tym zadbać aby wersja testowa nie była dostępna publicznie, dzięki temu nie zostanie przedwcześnie zaindeksowana przez roboty (np. Google) dodatkowo często uruchomienie nowej strony wiąże się z uruchomieniem nowego produktu/usługi w takich przypadkach dyskrecja jest szczególnie ważna.
Prostym (czytaj: tanim) sposobem zabezpieczenia dystrybucji Cloudfront przed nieuprawnionym dostępem jest ustanowienie restrykcji dostępu przez Signed URLs lub Signed Cookies ten mechanizm umożliwia dostęp wyłącznie na podstwie specjalnie prygotowanych adresów URL lub odpowiednio spreparowanych ciaasteczek
W piewszej kolejności potrzebna jest para kluczy do podpisywania linków i ciastek dla CloudFront. Można je pobrać sekcji My Security Credentials
ale niezbędny jest dostęp do głównego użytkownika konta AWS (“root”).
Zapisujemy w bezpiecznym miejscu klucz prywatny i publiczny (w przypadku implementacji w JAVA pobrany klucz trzeba przeformatować, odpowiednia instrukcja znajduje się na stronach AWS).
Generujemy wartości ciasteczek umożliwiających pełen dostęp do strony
CloudFrontCookieSigner.CookiesForCustomPolicy cookies = CloudFrontCookieSigner.getCookiesForCustomPolicy(
SignerUtils.Protocol.valueOf(protocol), distributionDomain, privateKeyFile, "*",
keyPairId, date, null, null);
cookies.getSignature().getKey()+"="+cookies.getSignature().getValue()
cookies.getPolicy().getKey()+"="+cookies.getPolicy().getValue()+domain
cookies.getKeyPairId().getKey()+"="+cookies.getKeyPairId().getValue()
Tworzymy stronę signin.html z odpowiednim skryptem poniżej
<script type="text/javascript">
document.cookie = "CloudFront-Signature=xxxxxxxxxxxxxxxxxxxxxxxx"
document.cookie = "CloudFront-Policy=xxxxxxxxxxxxxxxxxxxxxxxxxxx"
document.cookie = "CloudFront-Key-Pair-Id=xxxxxxxxxxxxxxxxxxxxxx"
</script>
String signedUrl = CloudFrontUrlSigner.getSignedURLWithCustomPolicy(
SignerUtils.Protocol.valueOf(protocol), distributionDomain, privateKeyFile, resourcePath,
keyPairId, date,null,null);
Od 2004 r. pracuję w branży IT. Przez większość tego czasu zajmowałem się projektowaniem i tworzeniem różnego rodzaju aplikacji internetowych.