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

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

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

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

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

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

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

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

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

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

2. Ограничьте область действия ваших ключей API

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

  1. Откройте страницу Credentials консоли 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. Откройте страницу Credentials консоли 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 см. в контрольном списке запуска.