Если ваше приложение Apple использует один из облачных API Firebase ML , прежде чем запускать приложение в рабочую среду, вам следует предпринять некоторые дополнительные шаги для предотвращения несанкционированного доступа к API.
1. Уменьшите объем существующих ключей API.
Сначала настройте существующие ключи API, чтобы запретить доступ к Cloud Vision API:
Откройте страницу учетных данных консоли Google Cloud . При появлении запроса выберите свой проект.
Для каждого существующего ключа API в списке откройте режим редактирования.
В разделе «Ограничения API» выберите «Ограничить ключ» , затем добавьте в список все API, к которым вы хотите, чтобы ключ API имел доступ. Обязательно не добавляйте Cloud Vision API.
Когда вы настраиваете ограничения API ключа API, вы явно объявляете API, к которым ключ имеет доступ. По умолчанию, если в разделе ограничений API выбран параметр «Не ограничивать ключ» , ключ API можно использовать для доступа к любому API, включенному для проекта.
Теперь ваши существующие ключи API не будут предоставлять доступ к облачным сервисам ML, но каждый ключ будет продолжать работать для любых API, которые вы добавили в список ограничений API .
Обратите внимание: если вы в будущем включите какие-либо дополнительные API, вам необходимо добавить их в список ограничений API для соответствующего ключа API.
2. Создайте новый ключ API для использования с Firebase ML
Затем создайте новый ключ API для Firebase ML , который разрешает вызовы только API Cloud Vision:
Вернитесь на страницу учетных данных . Убедитесь, что ваш проект Firebase все еще выбран.
Нажмите Создать учетные данные > Ключ API . Запишите новый ключ API и нажмите «Ограничить ключ» .
В разделе «Ограничения API» выберите «Ограничить ключ» , затем добавьте в список только Cloud Vision API.
Этот ключ API предоставляет доступ только к API Cloud Vision и может использоваться Firebase ML для доступа к облачным моделям.
3. Рекомендуется: уменьшить квоту API Cloud Vision.
Чтобы смягчить последствия компрометации ключа, вам следует уменьшить квоту Cloud Vision API на пользователя по сравнению с настройкой по умолчанию. Для этого:
Откройте страницу квот Cloud Vision API консоли Google Cloud . При появлении запроса выберите свой проект.
В разделе «Запросы » установите для квоты «Запросы в минуту на пользователя» какое-нибудь разумное значение для вашего приложения. Например, если ваше приложение предполагает загрузку изображения документа для возврата его текста, маловероятно, что пользователь будет делать это чаще, чем раз в несколько секунд, поэтому квота в 30–40, вероятно, будет безопасной.
Обратите внимание, что в этом контексте «запросы на пользователя» относятся к запросам с одного IP-адреса. Возможно, вам придется это учитывать, если вы ожидаете, что несколько пользователей будут использовать ваше приложение одновременно из-за NAT.
4. Вызовите Cloud API, используя ключ API Firebase ML
Наконец, в своем приложении настройте Firebase ML для использования нового ключа API.
Поскольку ключ API Firebase ML обеспечивает доступ к Cloud Vision API без аутентификации, важно сохранять конфиденциальность ключа, чтобы предотвратить несанкционированное использование и списание средств с вашего платежного аккаунта. Для этого вам следует воздержаться от включения ключа API в двоичный файл приложения. Вместо этого во время выполнения приложения убедитесь, что в систему вошел известный добросовестный пользователь, и только после этого получите ключ API с сервера.
Даже если эти правила соблюдены, ключ API может быть скомпрометирован. Вам следует предпринять шаги, чтобы смягчить последствия компрометации ключа, например уменьшить квоту API на пользователя, как описано выше, внедрить политики ротации ключей и выдать разные ключи разным группам пользователей.
После того как ваше приложение благополучно получило ключ API, если вы хотите вызвать API-интерфейс Firebase ML Cloud, укажите ключ:
Быстрый
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)
}
Цель-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];
}
Кроме того, вам следует следовать общим советам в разделе «Защита ключа API» .
Следующие шаги
Ознакомьтесь с контрольным списком запуска , чтобы узнать, как подготовить приложение к запуску при использовании других функций Firebase.