הגנה על פרטי הכניסה ל-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 של מפתח ה-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, ואז מוסיפים לרשימה רק את Cloud Vision API.

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

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

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

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

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

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

לבסוף, באפליקציה, מגדירים את 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.