Dobre praktyki korzystania z Google Maps: Zabezpieczenie kluczy API dla Static Maps i Street View APIs

By Październik 25, 2019 Google - aktualności
google_security

W poprzednim poście z tej serii pokazaliśmy, jak chronić swoje klucze API przy użyciu ich zabezpieczeń. Platforma Google Maps udostępnia kilka poziomów zabezpieczeń, aby Twoje klucze API były bezpieczne nawet wtedy, gdy musisz je ujawniać na swojej stronie. W tym wpisie posłużymy się analogią do karty kredytowej, aby pokazać, jak działają różne opcje zabezpieczeń na Platformie Google Maps. Czytając ten artykuł, wyobraź sobie, że klucz API jest numerem na jednej z kart kredytowych w Twoim portfelu.

Chroń swoje klucze API tak jak numery karty kredytowej

Static Maps API (Mapy Statyczne) oraz Street View API są najprostszymi i najbardziej wydajnymi sposobami na publikację spersonalizowanej mapy lub panoramy Street View na własnej stronie lub w aplikacji. Dzięki tym APIs statycznego obrazowania, do każdej strony internetowej możesz dodać nieinteraktywną mapę lub obraz street view. Hostem dla źródłowego URL tych obrazów jest Platforma Google Maps. W ramach miesięcznego darmowego limitu 200$, które posiadasz do wykorzystania na Platformie Google Maps, masz zapewnione do 100.000 wyświetleń mapy statycznej lub do 28.000 załadowań Street View.

Wykorzystanie APIs statycznego obrazowania wymaga załączenia Twojego klucza API w publicznie dostępnym kodzie.

street-view

Podwodny obraz Google Street View uwieczniony na wyspie Heron nad Wielką Rafą Koralową – tak wygląda grafika zamieszczona za pomocą Street View Static API

Aby w podobny sposób zamieścić obraz Street View na swoją własną stronę używając Street View Static API, konieczne jest dodanie taga <img> z własnością src ustawioną na „URL”, jak w przykładzie poniżej. Każda osoba, która przeczyta kod źródłowy Twojej strony internetowej będzie w stanie zobaczyć Twój klucz API jako część URL, jak w poniższym przykładzie:

https://maps.googleapis.com/maps/api/streetview?location=-23.4427738,151.9276581&size=600×400&heading=75&key=AIzaSyCnltht8tNqkjMoAI-p2WzVVuT0DDl5iyI…

To niepokojące, prawda? Ktoś mógłby próbować skopiować taki klucz i wykorzystać go do mnóstwa wywołań API na Platformie Google Maps, podobnie jak złodziej, który dokonuje zakupów internetowych przy pomocy skradzionego numeru karty kredytowej. W związku z tym, należy dodać zabezpieczenia, które ochronią klucz API przed wykorzystaniem przez nieuprawnione do tego osoby.

Zacznij od zabezpieczenia kluczy API

Tak jak pisaliśmy w ostatnim artykule z tej serii, możesz dodać zabezpieczenia w aplikacji, aby powiadomić Platformę Google Maps, że dany klucz API może być używany jedynie z określonych odnośników HTTP. To całkiem jak ograniczenie działania karty kredytowej do konkretnych sklepów – jednak złodziej karty wciąż miałby możliwość użycia środków w choćby jednym miejscu.

Możesz także ustawić zabezpieczenia API, które dają znać Platformie Google Maps, że dany klucz ma służyć jedynie do wywołań Street View Static API. To z kolei jest jak ograniczenie działania karty kredytowej do zakupu wyłącznie książek. Numer takiej karty kredytowej byłby dużo mniej użyteczny dla potencjalnego złodzieja.

Cyfrowe podpisy, które utworzyć możesz tylko Ty

Następnie polecamy dodanie cyfrowego podpisu dla żądań URL. Taki podpis można porównać do zatwierdzania płatności kartą kredytową za pojedynczą książkę za pomocą linii papilarnych.

Aby utworzyć cyfrowo podpisywane URL, musisz połączyć URL żądania API, klucz API oraz poufny podpis URL zarządzany z Twojej konsoli Google Cloud. Poufny podpis posiadasz wyłącznie Ty sam, tak samo jak Twój odcisk palca. Żądanie URL jest jak ISBN – międzynarodowy znormalizowany numer książki. Wyobraź sobie, że matematyczna kombinacja Twojego odcisku palca oraz ISBN wytwarza cyfrowy podpis, który możesz udostępniać publicznie. Służyłby on autoryzacji kupna książki o tym numerze ISBN za pomocą numeru Twojej karty kredytowej (w naszym przypadku, autoryzujesz wiele wywołań konkretnego obrazu statycznego za pomocą Twojego klucza API).

cyfrowy-podpis

Zrzut obrazu przedstawiający podpisanie URL w konsoli Google Cloud

Konsola Google Cloud może wygenerować dla Ciebie cyfrowy podpis (instrukcje dla Maps Static API i Street View Static API). Inną opcją jest napisanie własnej aplikacji po stronie serwera do generowanie cyfrowych podpisów (Google zapewnia przykładowy kod w swojej dokumentacji). Cyfrowy podpis jest dołączony do Twojego URL. Poniżej przedstawiony został podpisany URL do załadowania obrazu Street View.

https://maps.googleapis.com/maps/api/streetview?location=-23.4427738,151.9276581&size=600×400&heading=75&key=AIzaSyCnltht8tNqkjMoAI-p2WzVVuT0DDl5iyI&signature=Qt0k0Nrh8t6VFlEz2sdtIz__sPw=

Ogranicz żądania o brakującym podpisie

Po dodaniu cyfrowego podpisu do URL Twoich obrazów statycznych, możesz jeszcze bardziej ochronić swoje konto. W tym celu zmniejsz limit na liczbę żądań nieposiadających cyfrowego podpisu, które używają Twojego klucza Maps Static API i/lub Street View Static API w Twoim projekcie.

Poniższy filmik instruktażowy pokazuje jak zarządzać limitami w konsoli Google Cloud. Strony Maps Static API i Street View Static API zawierają oddzielne sekcje do zarządzania limitami podpisanych żądań (Signed Requests) oraz limitami niepodpisanych żądań (Unsigned Requests). Domyślnie, projekty używające te APIs pozwalają na maksymalnie 25.000 niepodpisanych żądań na dzień. Jeśli chcesz się upewnić, że jedynie cyfrowo podpsane adresy URL statycznych obrazów mogą być użyte za pomocą Twojego klucza API, zmień ten limit na 0.

Klucze API, zabezpieczenia aplikacji, zabezpieczenia API, cyfrowe podpisy i limity użycia to razem pięć warstw zabezpieczeń przed wykorzystaniem Twojego konta Platformy Google Maps przez nieuprawnione do tego osoby. Używając wszystkich warstw zabezpieczeń, nawet pomimo publicznego ujawnienia klucza API w kodzie, może on być wykorzystany jedynie na Twojej stronie. Tylko tam będzie on wywoływał np. Street View Static API przy pomocy cyfrowo podpisanego żądania URL. Tworząc tylko jeden cyfrowy podpis oparty na URL dla danego obrazu Street View, podpis nie będzie działał dla żadnych innych obrazów – nawet do obrócenia panoramy i obejrzenia jej innej części.

Zachęcamy do poznania innych dobrych praktyk w naszych kolejnych wpisach z tej serii. Masz więcej pytań? Skontaktuj się z nami!

Artykuł źródłowy: https://cloud.google.com/blog/products/maps-platform/google-maps-platform-best-practices-securing-api-keys-when-using-static-maps-and-street-view-apis