Jeśli Twoja aplikacja na urządzenia Apple korzysta z interfejsów API w chmurze Firebase ML, przed udostępnieniem jej w wersji produkcyjnej podejmij dodatkowe działania, które uniemożliwią nieautoryzowany dostęp przez interfejs API.
1. Ograniczanie zakresu istniejących kluczy interfejsu API
Najpierw skonfiguruj istniejące klucze interfejsu API, aby uniemożliwić dostęp do interfejsu Cloud Vision API:
Otwórz stronę Dane logowania w konsoli Google Cloud. Gdy pojawi się prośba, wybierz projekt.
Otwórz widok edycji każdego klucza API na liście.
W sekcji Ograniczenia interfejsów API wybierz Ogranicz klucz, a następnie dodaj do listy wszystkie interfejsy API, do których klucz ma mieć dostęp. Pamiętaj, aby nie uwzględniać interfejsu Cloud Vision API.
Konfigurując ograniczenia interfejsów API klucza interfejsu API, wyraźnie deklarujesz interfejsy API, do których klucz ma dostęp. Domyślnie, gdy w sekcji Ograniczenia interfejsów API jest wybrana opcja Nie ograniczaj klucza, klucz interfejsu API może być używany do uzyskiwania dostępu do dowolnego interfejsu API włączonego w projekcie.
Od tej pory istniejące klucze interfejsu API nie będą przyznawać dostępu do usług ML w chmurze, ale każdy klucz będzie nadal działać w przypadku interfejsów API, które zostały dodane do listy ograniczeń interfejsów API.
Pamiętaj, że jeśli w przyszłości włączysz dodatkowe interfejsy API, musisz dodać je do listy ograniczeń interfejsu API dla odpowiedniego klucza interfejsu API.
2. Utwórz nowy klucz interfejsu API do użycia z Firebase ML
Następnie utwórz nowy klucz interfejsu API dla Firebase ML, który zezwala tylko na wywołania interfejsu Cloud Vision API:
Wróć na stronę Dane logowania. Sprawdź, czy projekt Firebase jest nadal wybrany.
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 następnie dodaj do listy tylko interfejs Cloud Vision API.
Ten klucz API przyznaje dostęp tylko do interfejsu Cloud Vision API i może być używany przez Firebase ML do uzyskiwania dostępu do modeli opartych na chmurze.
3. Zalecane: zmniejsz limit Cloud Vision API
Aby złagodzić skutki przejęcia klucza, zmniejsz domyślny limit interfejsu Cloud Vision API na użytkownika. Aby to zrobić:
Otwórz stronę Limity Cloud Vision API w konsoli Google Cloud. Gdy pojawi się prośba, wybierz projekt.
W sekcji Żądania ustaw limit Żądania na minutę na użytkownika na wartość odpowiednią dla Twojej aplikacji. Jeśli na przykład aplikacja umożliwia przesłanie zdjęcia dokumentu w celu uzyskania jego tekstu, jest mało prawdopodobne, że użytkownik będzie to robić częściej niż raz na kilka sekund, więc limit 30–40 żądań powinien być bezpieczny.
Pamiętaj, że w tym kontekście „żądania na użytkownika” odnoszą się do żądań z jednego adresu IP. Może to być konieczne, jeśli spodziewasz się, że z Twojej aplikacji będzie korzystać jednocześnie wielu użytkowników zza NAT-u.
4. Wywoływanie interfejsów API Google Cloud za pomocą klucza interfejsu API Firebase ML
Na koniec w aplikacji skonfiguruj Firebase ML, aby używać nowego klucza interfejsu API.
Klucz interfejsu API Firebase ML umożliwia nieautoryzowany dostęp do interfejsu Cloud Vision API, dlatego ważne jest, aby zachować go w tajemnicy i zapobiec nieautoryzowanemu użyciu oraz naliczaniu opłat na Twoim koncie rozliczeniowym. Aby to zrobić, nie umieszczaj klucza interfejsu API w pliku binarnym aplikacji. Zamiast tego w czasie działania aplikacji sprawdź, czy zalogowany jest znany, zaufany użytkownik, a dopiero potem pobierz klucz API z serwera.
Nawet jeśli te metody są stosowane, klucz interfejsu API może zostać naruszony. Powinieneś podjąć działania, które pomogą Ci ograniczyć konsekwencje przejęcia klucza, np. zmniejszyć limit interfejsu API dla poszczególnych użytkowników (jak opisano powyżej), wdrożyć zasady rotacji kluczy i udostępniać 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 API Cloud:Firebase ML
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)
}
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];
}
Oprócz tego postępuj zgodnie z ogólnymi wskazówkami podanymi w artykule Zabezpieczanie klucza interfejsu API.
Dalsze kroki
Informacje o przygotowaniu aplikacji do uruchomienia przy użyciu innych funkcji Firebase znajdziesz na liście kontrolnej uruchamiania.