הגנה על פרטי הכניסה ל-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). מציינים את מפתח ה-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 בצורה מאובטחת, צריך לציין את המפתח כשרוצים להפעיל API של Firebase ML Cloud:

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.