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