Melindungi kredensial Cloud aplikasi Android Firebase ML Anda

Jika aplikasi Android Anda menggunakan salah satu Cloud API Firebase ML, sebelum meluncurkan aplikasi di lingkungan production, Anda harus menjalankan beberapa langkah tambahan untuk mencegah akses API tanpa izin.

Untuk aplikasi produksi, Anda harus memastikan bahwa hanya klien yang telah diautentikasi yang dapat mengakses layanan cloud. (Perhatikan bahwa hanya perangkat yang tidak di-root yang dapat mengautentikasi menggunakan metode yang dijelaskan di sini.)

Selanjutnya, Anda akan membuat kunci API khusus debug yang dapat digunakan untuk memudahkan pengujian dan pengembangan.

1. Daftarkan aplikasi produksi ke Firebase

Pertama, daftarkan aplikasi produksi ke Firebase.

  1. Pastikan Anda memiliki tanda tangan SHA-1 aplikasi. Baca bagian Mengautentikasi klien untuk mempelajari cara mendapatkannya.

  2. Buka Project settings di Firebase console, lalu pilih tab Settings.

  3. Scroll ke bawah ke kartu Your apps, lalu pilih aplikasi Android Anda.

  4. Tambahkan tanda tangan SHA-1 aplikasi Anda ke informasi aplikasi.

2. Batasi cakupan kunci API

Selanjutnya, konfigurasi kunci API yang ada untuk melarang akses ke Cloud Vision API:

  1. Buka halaman Credentials di Konsol Google Cloud. Saat diminta, pilih project Anda.

  2. Untuk setiap kunci API yang ada dalam daftar, buka tampilan edit.

  3. Di bagian API restrictions, pilih Restrict key, lalu tambahkan ke daftar semua API yang ingin diakses oleh kunci API. Pastikan untuk tidak menyertakan Cloud Vision API.

    Saat mengonfigurasi API restrictions untuk kunci API, Anda secara eksplisit mendeklarasikan API yang dapat diakses oleh kunci tersebut. Secara default, jika opsi Don't restrict key dipilih di bagian API restrictions, kunci API dapat digunakan untuk mengakses API apa pun yang diaktifkan untuk project.

Sekarang, kunci API yang ada tidak akan memberikan akses ke layanan ML cloud, tetapi setiap kunci akan tetap berfungsi untuk setiap API yang Anda tambahkan ke daftar API restrictions.

Perhatikan bahwa jika Anda mengaktifkan API tambahan di masa mendatang, Anda harus menambahkannya ke daftar API restrictions untuk kunci API yang berlaku.

3. Buat dan gunakan kunci API khusus debug

Terakhir, buat kunci API baru yang akan digunakan hanya untuk pengembangan. Firebase ML dapat menggunakan kunci API ini untuk mengakses layanan Google Cloud di lingkungan yang tidak mendukung autentikasi aplikasi, seperti saat berjalan di emulator.

  1. Buat kunci API baru yang akan digunakan untuk pengembangan:

    1. Buka halaman Credentials di Konsol Google Cloud. Saat diminta, pilih project Anda.

    2. Klik Create credentials > API key dan catat kunci API yang baru. Dengan kunci ini, API dapat diakses dari aplikasi yang tidak diautentikasi. Oleh karena itu, pastikan kerahasiaan kunci ini terjaga.

  2. Untuk memastikan kunci API debug baru tidak bocor bersama aplikasi yang Anda rilis, tentukan kunci API debug dalam file manifes Android yang digunakan hanya untuk build debug:

    1. Jika belum memiliki manifes debug, Anda dapat membuatnya dengan mengklik File > New > Other > Android Manifest File, lalu pilih debug dari set sumber target.

    2. Pada manifes debug, tambahkan deklarasi berikut:

      <application>
      <meta-data
          android:name="com.firebase.ml.cloud.ApiKeyForDebug"
          android:value="your-debug-api-key" />
      </application>
      
  3. Pada aplikasi Anda, konfigurasikan Firebase ML untuk menggunakan pencocokan sidik jari sertifikat guna mengautentikasi klien dalam lingkungan production dan menggunakan kunci API—kunci debug—hanya dalam build debug:

    Kotlin+KTX

    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)

    Java

    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);

Langkah berikutnya

Baca checklist peluncuran yang berisi informasi tentang cara menyiapkan aplikasi Anda untuk diluncurkan saat menggunakan fitur Firebase lainnya.