הגנה על פרטי הכניסה ל-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 הקיימים לא יתנו גישה לשירותי למידת מכונה בענן, אבל כל מפתח ימשיך לפעול לכל ממשקי ה-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. בקטע Requests מגדירים את המכסה של Requests per minutes per user למשהו סביר שמתאים לאפליקציה שלכם. לדוגמה, אם האפליקציה כוללת העלאת תמונה של מסמך כדי לקבל את הטקסט שבו, לא סביר שהמשתמש יבצע את הפעולה הזו יותר מפעם אחת בכל כמה שניות, כך שמכסה של 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.