Catch up on everthing we announced at this year's Firebase Summit. Learn more

保護您的 Firebase ML Apple 應用的雲憑據

如果您的 Apple 應用使用 Firebase ML 的雲 API 之一,則在生產中啟動應用之前,您應該採取一些額外的步驟來防止未經授權的 API 訪問。

1. 縮小現有 API 密鑰的範圍

首先,配置您現有的 API 密鑰以禁止訪問 Cloud Vision API:

  1. 打開證書的谷歌雲端控制台的頁面。出現提示時,選擇您的項目。

  2. 對於列表中的每個現有 API 密鑰,打開編輯視圖。

  3. API的限制部分,選擇限制鍵,然後添加到列表中的所有的到你想要的API密鑰來訪問的API。確保包括雲願景API。

    當您配置一個API密鑰的API限制,您明確聲明,其主要訪問的API。默認情況下,當API限制部分已不限制鍵選擇,API密鑰可以用來訪問為項目啟用的任何API。

現在,您現有的API密鑰不會授予訪問雲ML服務,但每個鍵將繼續工作,為您添加到它的API限制列表中的任何的API。

需要注意的是,如果你能夠在未來的任何額外的API,你必須將它們添加到API的限制名單適用的API密鑰。

2. 創建一個用於 Firebase ML 的新 API 密鑰

接下來,為 Firebase ML 創建一個僅允許調用 Cloud Vision API 的新 API 密鑰:

  1. 返回到憑據頁面。確保您的 Firebase 項目仍處於選中狀態。

  2. 單擊創建證書> API密鑰。記下新的API密鑰,然後單擊限制的關鍵

  3. API的限制部分,選擇限制鍵,然後添加到列表中雲願景API。

此 API 密鑰僅授予對 Cloud Vision API 的訪問權限,並可被 Firebase ML 用於訪問基於雲的模型。

為了幫助減輕密鑰洩露的後果,您應該將 Cloud Vision API 的每用戶配額從其默認設置減少。這樣做:

  1. 打開雲願景API配額的谷歌雲端控制台的頁面。出現提示時,選擇您的項目。

  2. 請求部分,設置每用戶配額分鐘的請求,為您的應用程序的東西合理。例如,如果您的應用程序涉及上傳文檔圖片以獲取其文本,則用戶不太可能每隔幾秒鐘執行一次以上操作,因此 30-40 的配額可能是安全的。

    請注意,在此上下文中,“每個用戶的請求數”是指來自單個 IP 地址的請求。如果您希望多個用戶在 NAT 後同時使用您的應用程序,您可能需要考慮這一點。

4. 使用您的 Firebase ML API 密鑰調用 Cloud API

最後,在您的應用中,配置 Firebase ML 以使用您的新 API 密鑰。

由於 Firebase ML API 密鑰允許未經身份驗證訪問 Cloud Vision API,因此務必對密鑰保密,以防止未經授權的使用和向您的結算帳號收費。為此,您應該避免在您的應用程序二進製文件中包含您的 API 密鑰。相反,在應用程序運行時,驗證已知的良好用戶已登錄,然後才從服務器檢索 API 密鑰。

即使遵守這些做法,API 密鑰也有可能被洩露。您應該採取措施幫助減輕密鑰洩露的後果,例如如上所述減少 API 的每個用戶配額、實施密鑰輪換策略以及向不同的用戶組頒發不同的密鑰。

在您的應用安全獲取 API 密鑰後,當您想要調用 Firebase ML Cloud API 時,請指定密鑰:

迅速

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)
}

目標-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密鑰

下一步

請參閱發布清單上使用其他火力地堡功能時準備您的應用程序發布的信息。