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