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

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

Для ваших производственных приложений вам необходимо гарантировать, что доступ к облачным сервисам получат только аутентифицированные клиенты. (Обратите внимание, что аутентификацию с использованием описанного метода могут пройти только устройства без прав root.)

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

1. Зарегистрируйте свои производственные приложения в Firebase

Сначала зарегистрируйте свои производственные приложения в Firebase.

  1. Убедитесь, что у вашего приложения есть подписи SHA-1. Подробнее см. в разделе «Аутентификация клиента» .

  2. Перейдите в Настройки проекта в консоли Firebase , затем выберите вкладку Настройки .

  3. Прокрутите страницу вниз до карточки Ваши приложения , затем выберите свое приложение для Android.

  4. Добавьте подпись SHA-1 вашего приложения к информации о нем.

2. Ограничьте область действия ваших ключей 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.

3. Создайте и используйте API-ключ, предназначенный только для отладки.

Наконец, создайте новый ключ API, который будет использоваться только для разработки. Firebase ML может использовать этот ключ API для доступа к сервисам Google Cloud в средах, где аутентификация приложений невозможна, например, при запуске на эмуляторах.

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

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

    2. Нажмите «Создать учётные данные» > «Ключ API» и запишите новый ключ API. Этот ключ позволяет получать доступ к API из неаутентифицированных приложений, поэтому держите его в тайне .

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

    1. Если у вас еще нет отладочного манифеста, создайте его, нажав Файл > Создать > Другое > Файл манифеста Android и выбрав debug из целевых исходных наборов.

    2. В отладочном манифесте добавьте следующее объявление:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
  3. В своем приложении настройте Firebase ML на использование сопоставления отпечатков сертификатов для аутентификации клиента в рабочей среде и на использование ключей API (ключ отладки) только в отладочных сборках:

    KotlinJava
    val optionsBuilder = FirebaseVisionCloudImageLabelerOptions.Builder()
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch()
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f)
    // ...
    
    // And lastly:
    val options = optionsBuilder.build()
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage)
    FirebaseVisionCloudImageLabelerOptions.Builder optionsBuilder =
            new FirebaseVisionCloudImageLabelerOptions.Builder();
    if (!BuildConfig.DEBUG) {
        // Requires physical, non-rooted device:
        optionsBuilder.enforceCertFingerprintMatch();
    }
    
    // Set other options. For example:
    optionsBuilder.setConfidenceThreshold(0.8f);
    // ...
    
    // And lastly:
    FirebaseVisionCloudImageLabelerOptions options = optionsBuilder.build();
    FirebaseVision.getInstance().getCloudImageLabeler(options).processImage(myImage);

Следующие шаги

Информацию о подготовке приложения к запуску при использовании других функций Firebase см. в контрольном списке запуска.