Jeśli Twoja aplikacja Apple korzysta z jednego z interfejsów API chmury Firebase ML, przed udostępnieniem aplikacji w wersji produkcyjnej musisz podjąć dodatkowe działania, które uniemożliwią nieautoryzowany dostęp przez interfejs API.
1. Ograniczanie zakresu działania istniejących kluczy interfejsu API
Najpierw skonfiguruj istniejące klucze interfejsu API, aby zablokować dostęp do interfejsu Cloud Vision API:
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się taka prośba, wybierz projekt.
W przypadku każdego istniejącego klucza API na liście otwórz widok edycji.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a potem dodaj do listy wszystkie interfejsy API, do których klucz interfejsu API ma mieć dostęp. Upewnij się, że nie zawiera on interfejsu Cloud Vision API.
Gdy konfigurujesz ograniczenia interfejsu API dotyczące klucza interfejsu API, wyraźnie deklarujesz, do których interfejsów API ma on dostęp. Domyślnie, gdy w sekcji Ograniczenia interfejsu API wybrana jest opcja Nie ograniczaj klucza, klucz interfejsu API może być używany do uzyskiwania dostępu do dowolnego interfejsu API włączonego w projekcie.
Twoje dotychczasowe klucze interfejsu API nie będą już przyznawać dostępu do usług ML w chmurze, ale każdy klucz nadal będzie działać w przypadku interfejsów API dodanych do listy ograniczeń interfejsu API.
Pamiętaj, że jeśli w przyszłości włączysz dodatkowe interfejsy API, musisz je dodać do listy ograniczeń interfejsu API dla odpowiedniego klucza interfejsu API.
2. Tworzenie nowego klucza interfejsu API do użycia z Firebase ML
Następnie utwórz nowy klucz interfejsu API dla usługi Firebase ML, który zezwala tylko na wywołania interfejsu Cloud Vision API:
Wróć na stronę Dane logowania. Sprawdź, czy nadal wybrany jest projekt Firebase.
Kliknij Utwórz dane logowania > Klucz interfejsu API. Zanotuj nowy klucz interfejsu API, a potem kliknij Ogranicz klucz.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a potem do listy tylko dodaj interfejs Cloud Vision API.
Ten klucz API zapewnia dostęp tylko do interfejsu Cloud Vision API i może być używany przez aplikację Firebase ML do uzyskiwania dostępu do modeli opartych na chmurze.
3. Zalecane: zmniejszenie limitu Cloud Vision API
Aby ograniczyć skutki skompromitowania klucza, zmniejsz domyślny limit interfejsu Cloud Vision API na użytkownika. Aby to zrobić:
W konsoli Google Cloud otwórz stronę Limity Cloud Vision API. Gdy pojawi się taka prośba, wybierz projekt.
W sekcji Żądania ustaw limit żądań na minutę na użytkownika na wartość odpowiednią dla Twojej aplikacji. Jeśli na przykład Twoja aplikacja polega na przesyłaniu zdjęcia dokumentu w celu uzyskania tekstu, użytkownik prawdopodobnie nie będzie tego robić częściej niż raz na kilka sekund, więc limit 30–40 będzie prawdopodobnie bezpieczny.
Pamiętaj, że w tym kontekście „żądania na użytkownika” odnoszą się do żądań z jednego adresu IP. Możesz to wziąć pod uwagę, jeśli oczekujesz, że wielu użytkowników będzie korzystać z Twojej aplikacji jednocześnie z tego samego serwera NAT.
4. Wywoływanie interfejsów Cloud API za pomocą klucza interfejsu API Firebase ML
Na koniec skonfiguruj w aplikacji Firebase ML, aby używać nowego klucza interfejsu API.
Klucz interfejsu API Firebase ML umożliwia nieautoryzowany dostęp do interfejsu Cloud Vision, dlatego ważne jest, aby zachować go w tajemnicy. Pozwoli to zapobiec nieautoryzowanemu użyciu i obciążeniom na Twoim koncie rozliczeniowym. Aby to zrobić, nie dodawaj klucza interfejsu API do pliku binarnego aplikacji. Zamiast tego podczas działania aplikacji sprawdź, czy zalogowany jest znany użytkownik, a dopiero potem pobieraj klucz interfejsu API z serwera.
Nawet jeśli przestrzegasz tych zaleceń, klucz interfejsu API może zostać skompromitowany. Należy podjąć działania, aby ograniczyć skutki ujawnienia klucza, np. zmniejszyć limit na użytkownika w usłudze API zgodnie z opisem powyżej, wdrożyć zasady rotacji kluczy i wydać różne klucze różnym grupom użytkowników.
Gdy aplikacja bezpiecznie uzyska klucz interfejsu API, możesz go użyć do wywołania interfejsu Cloud API:Firebase ML:
Swift
if let cloudVisionKey = getYourApiKey() { // See note above about securing your API key
let options = VisionCloudDetectorOptions()
options.apiKeyOverride = cloudVisionKey
let cloudDetector = Vision.vision().cloudLandmarkDetector(options: options)
}
Objective-C
NSString *cloudVisionKey = [self getYourApiKey]; // See note above about securing your API key
if (cloudVisionKey != nil) {
FIRVisionCloudDetectorOptions *options =
[[FIRVisionCloudDetectorOptions alloc] init];
options.APIKeyOverride = cloudVisionKey;
FIRVisionCloudLandmarkDetector *landmarkDetector =
[vision cloudLandmarkDetectorWithOptions:options];
}
Dodatkowo należy przestrzegać ogólnych wskazówek podanych w artykule Zabezpieczanie klucza API.
Dalsze kroki
W liście kontrolnej przed uruchomieniem znajdziesz informacje o przygotowywaniu aplikacji do uruchomienia, gdy korzystasz z innych funkcji Firebase.