Защитите учетные данные своего приложения Firebase ML iOS в облаке

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

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

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

  1. Откройте Credentials страницу в Google Cloud Console. При появлении запроса выберите свой проект.

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

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

    При настройке ограничения API - ключей API, вы явно декларируя API , к которому ключ доступа. По умолчанию, когда секция ограничения API имеет не ограничивает ключ выбрано, ключ API может использоваться для доступа к любому API , который включен для проекта.

Теперь, существующие ключи API не будут предоставлять доступ к услугам облака ML, но каждая клавиша будет продолжать работать для любых интерфейсов , которые вы добавили в свой список ограничений API.

Обратите внимание , что если включить дополнительный API , в будущем, вы должны добавить их в список ограничений API для соответствующего ключа API.

2. Создайте новый ключ API для использования с Firebase ML.

Затем создайте новый ключ API для Firebase ML, который разрешает вызовы только API Cloud Vision:

  1. Вернуться к проверке полномочий страницы. Убедитесь, что ваш проект Firebase по-прежнему выбран.

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

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

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

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

  1. Открыть Облако Видения API Квоты страницу в Google Cloud Console. При появлении запроса выберите свой проект.

  2. В разделе Запросы, установите запросов в минуту на пользователя квоты на что - то разумное для вашего приложения. Например, если ваше приложение включает загрузку изображения документа, чтобы вернуть его текст, маловероятно, что пользователь будет делать это чаще, чем раз в несколько секунд, поэтому квота 30-40, вероятно, будет безопасной.

    Обратите внимание, что в этом контексте «запросы на пользователя» относятся к запросам с одного IP-адреса. Возможно, вам придется учитывать это, если вы ожидаете, что несколько пользователей будут использовать ваше приложение одновременно из-за NAT.

4. Вызов облачных API с помощью ключа API Firebase ML.

Наконец, в своем приложении настройте Firebase ML для использования вашего нового ключа API.

Поскольку ключ API Firebase ML обеспечивает неаутентифицированный доступ к Cloud Vision API, важно сохранять конфиденциальность ключа, чтобы предотвратить несанкционированное использование и списание средств с вашего платежного аккаунта. Для этого вам следует воздержаться от включения ключа 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)
}

Цель-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.