Защитите облачные учетные данные вашего приложения Firebase ML Apple.

Если ваше приложение Apple использует один из облачных API Firebase ML , перед запуском приложения в эксплуатацию вам следует предпринять некоторые дополнительные шаги для предотвращения несанкционированного доступа к API.

1. Уменьшить область действия существующих ключей API

Сначала настройте существующие ключи API, чтобы запретить доступ к API Cloud Vision:

  1. Откройте страницу «Учётные данные» в консоли Google Cloud . При появлении запроса выберите свой проект.

  2. Для каждого существующего ключа API в списке откройте представление редактирования.

  3. В разделе «Ограничения 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:

  1. Вернитесь на страницу «Учётные данные» . Убедитесь, что ваш проект Firebase всё ещё выбран.

  2. Нажмите «Создать учётные данные» > «Ключ API» . Запишите новый ключ API, затем нажмите «Ограничить ключ» .

  3. В разделе «Ограничения API» выберите «Ограничить ключ» , затем добавьте в список только API Cloud Vision.

Этот ключ API предоставляет доступ только к API Cloud Vision и может использоваться Firebase ML для доступа к облачным моделям.

Чтобы смягчить последствия компрометации ключа, следует уменьшить квоту Cloud Vision API для каждого пользователя по сравнению с её значением по умолчанию. Для этого:

  1. Откройте страницу «Квоты API Cloud Vision» в консоли Google Cloud . При появлении запроса выберите свой проект.

  2. В разделе «Запросы» установите квоту « Запросов в минуту на пользователя» на разумное для вашего приложения значение. Например, если ваше приложение предполагает загрузку изображения документа для получения его текста, маловероятно, что пользователь будет делать это чаще, чем раз в несколько секунд, поэтому квота в 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 см. в контрольном списке запуска.