Melindungi kredensial Cloud pada aplikasi Apple Firebase ML

Jika aplikasi Apple Anda menggunakan salah satu Cloud API pada Firebase ML, sebelum meluncurkan aplikasi dalam produksi, Anda harus menjalankan beberapa langkah tambahan untuk mencegah akses API tanpa izin.

1. Kurangi cakupan kunci API yang ada

Pertama, konfigurasikan kunci API yang ada untuk melarang akses ke Cloud Vision API:

  1. Buka halaman Credentials di Google Cloud Console. 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.

2. Membuat kunci API baru untuk digunakan dengan Firebase ML

Selanjutnya, buat kunci API baru untuk Firebase ML yang hanya mengizinkan panggilan ke Cloud Vision API:

  1. Kembali ke halaman Credentials. Pastikan project Firebase Anda masih dipilih.

  2. Klik Create credentials > API key. Catat kunci API baru ini, lalu klik Restrict key.

  3. Di bagian API restrictions, pilih Restrict key, lalu hanya tambahkan Cloud Vision API ke daftar.

Kunci API ini hanya memberikan akses ke Cloud Vision API dan dapat digunakan oleh Firebase ML untuk mengakses model berbasis cloud.

Untuk membantu mengurangi konsekuensi kunci yang disusupi, Anda harus mengurangi kuota per pengguna Cloud Vision API dari setelan defaultnya. Untuk melakukannya:

  1. Buka halaman Cloud Vision API Quotas di Google Cloud Console. Saat diminta, pilih project Anda.

  2. Di bagian Requests, tetapkan kuota Requests per minute per user ke nilai yang sesuai untuk aplikasi Anda. Misalnya, jika aplikasi Anda melibatkan proses upload gambar dokumen untuk mendapatkan hasil gambar sebagai teks, kemungkinan pengguna tidak akan melakukannya lebih dari sekali setiap beberapa detik, sehingga kuota 30-40 mungkin akan aman.

    Perlu diperhatikan bahwa dalam konteks ini, "requests per user" mengacu pada permintaan dari satu alamat IP. Pertimbangkan hal ini jika Anda mengharapkan banyak pengguna menggunakan aplikasi Anda pada waktu yang bersamaan melalui NAT.

4. Memanggil Cloud API menggunakan kunci API Firebase ML

Terakhir, di aplikasi Anda, konfigurasikan Firebase ML agar menggunakan kunci API baru.

Karena kunci API Firebase ML mengizinkan akses yang tidak diautentikasi ke Cloud Vision API, kerahasiaan kunci harus dijaga guna mencegah penggunaan dan tagihan yang tidak sah ke akun penagihan Anda. Caranya, usahakan untuk tidak memasukkan kunci API ke biner aplikasi Anda. Sebagai gantinya, pada saat runtime aplikasi, verifikasi bahwa pengguna yang dikenal baik sudah login, dan baru setelah itu, ambil kunci API dari server.

Bahkan dengan menerapkan praktik ini pun, kunci API tetap bisa disusupi. Anda harus mengambil langkah untuk membantu mengurangi konsekuensi kunci yang disusupi, seperti mengurangi kuota per pengguna API seperti yang dijelaskan di atas, menerapkan kebijakan rotasi kunci, dan menerbitkan kunci yang berbeda untuk kelompok pengguna berbeda.

Setelah aplikasi Anda mendapatkan kunci API dengan aman, saat ingin memanggil Cloud API Firebase ML, tentukan kunci:

Swift

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];
}

Selain itu, Anda harus mengikuti saran umum dalam Mengamankan kunci API.

Langkah berikutnya

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