הגנה על פרטי הכניסה ל-Cloud של אפליקציית Firebase ML ל-Apple

אם האפליקציה שלכם ל-Apple משתמשת באחד מממשקי ה-API בענן של Firebase ML, לפני ההשקה של האפליקציה בסביבת הייצור, עליכם לבצע כמה פעולות נוספות כדי למנוע גישה לא מורשית לממשק ה-API.

1. צמצום ההיקף של מפתחות API קיימים

קודם כול, מגדירים את מפתחות ה-API הקיימים כך שלא יאפשרו גישה ל-Cloud Vision API:

  1. פותחים את הדף Credentials במסוף Google Cloud. כשמופיעה בקשה לעשות זאת, בוחרים את הפרויקט הרצוי.

  2. פותחים את תצוגת העריכה לכל מפתח API קיים ברשימה.

  3. בקטע API restrictions, בוחרים באפשרות Restrict key ומוסיפים לרשימה את כל ממשקי ה-API שאליהם רוצים שלמפתח ה-API תהיה גישה. חשוב לא לכלול את Cloud Vision API.

    כשמגדירים את הגבלות ה-API של מפתח API, אתם מצהירים במפורש על ממשקי ה-API שאליהם יש למפתח גישה. כברירת מחדל, כשבקטע API restrictions מסומן האפשרות Don't restrict key, אפשר להשתמש במפתח API כדי לגשת לכל ממשק API שמופעל בפרויקט.

מעכשיו, מפתחות ה-API הקיימים לא יעניקו גישה לשירותי ה-ML בענן, אבל כל מפתח ימשיך לפעול עם כל ממשקי ה-API שהוספתם לרשימת ההגבלות על ממשקי ה-API שלו.

חשוב לזכור: אם תפעילו ממשקי API נוספים בעתיד, תצטרכו להוסיף אותם לרשימה API restrictions של מפתח ה-API הרלוונטי.

2. יצירת מפתח API חדש לשימוש עם Firebase ML

בשלב הבא יוצרים מפתח API חדש ל-Firebase ML שמאפשר רק קריאות ל-Cloud Vision API:

  1. חוזרים לדף Credentials. מוודאים שפרויקט Firebase עדיין נבחר.

  2. לוחצים על Create credentials > API key. מציינים את מפתח ה-API החדש ולוחצים על Restrict key.

  3. בקטע API restrictions, בוחרים באפשרות Restrict key ומוסיפים לרשימה only Cloud Vision API.

מפתח ה-API הזה מעניק גישה רק ל-Cloud Vision API, ו-Firebase ML יכול להשתמש בו כדי לגשת למודלים מבוססי-ענן.

כדי לצמצם את ההשלכות של מפתח שנפרץ, כדאי לצמצם את המכסה של Cloud Vision API לכל משתמש בהגדרת ברירת המחדל. עושים זאת כך:

  1. פותחים את הדף Cloud Vision API Quotas במסוף Google Cloud. כשתתבקשו, בוחרים את הפרויקט.

  2. בקטע בקשות, מגדירים את המכסה של בקשות בדקה לכל משתמש למספר סביר בהתאם לאפליקציה. לדוגמה, אם האפליקציה כוללת העלאה של תמונה של מסמך כדי לקבל בחזרה את הטקסט שלו, סביר להניח שמשתמש לא יבצע את הפעולה הזו יותר מפעם אחת בכל כמה שניות, כך שמכסה של 30-40 בקשות תהיה בטוחה.

    שימו לב שבהקשר הזה, 'בקשות לכל משתמש' מתייחסות לבקשות מכתובת IP יחידה. יכול להיות שתצטרכו לחשוב על זה אם אתם מצפים שמספר משתמשים ישתמשו באפליקציה שלכם בו-זמנית מאחורי NAT.

4. קריאה לממשקי Cloud API באמצעות מפתח ה-API Firebase ML

לבסוף, באפליקציה מגדירים את Firebase ML כך שישתמש במפתח ה-API החדש.

מפתח ה-API Firebase ML מאפשר גישה לא מאומתת ל-Cloud Vision API, לכן חשוב לשמור על סודיות המפתח כדי למנוע שימוש לא מורשה וחיובים בחשבון לחיוב. לשם כך, עליכם להימנע מהכללת מפתח ה-API בקובץ הבינארי של האפליקציה. במקום זאת, צריך לוודא בזמן הריצה של האפליקציה שמשתמש מוכר ומהימן נכנס לחשבון, ואז לאחזר את מפתח ה-API מהשרת.

גם אם פועלים לפי השיטות האלה, עדיין יכול להיות שמפתח API יהיה חשוף לפריצה. כדי לצמצם את ההשלכות של מפתח שנפגע, כמו צמצום המכסה לכל משתמש ב-API כפי שמתואר למעלה, הטמעת כללי מדיניות של רוטציית מפתחות והנפקת מפתחות שונים לקבוצות שונות של משתמשים.

אחרי שהאפליקציה מקבלת את מפתח ה-API בצורה מאובטחת, צריך לציין את המפתח כשרוצים להפעיל את Firebase ML Cloud API:

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

בנוסף, כדאי לפעול לפי ההמלצות הכלליות במאמר אבטחת מפתח API.

השלבים הבאים

רשימת המשימות להשקה מכילה מידע נוסף על הכנת האפליקציה להשקה כשמשתמשים בתכונות אחרות של Firebase.