Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

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

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

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

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

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

  1. 打開 Google Cloud Console 的憑據頁面。出現提示時,選擇您的項目。

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

  3. API 限制部分,選擇Restrict key ,然後將您希望 API 密鑰有權訪問的所有 API 添加到列表中。確保包含 Cloud Vision API。

    當您配置 API 密鑰的API 限制時,您明確聲明了該密鑰可以訪問的 API。默認情況下,當API 限制部分選擇了不限制密鑰時,API 密鑰可用於訪問為項目啟用的任何 API。

現在,您現有的 API 密鑰將不會授予對雲 ML 服務的訪問權限,但每個密鑰將繼續適用於您添加到其API 限制列表中的任何 API。

請注意,如果您將來啟用任何其他 API,則必須將它們添加到適用 API 密鑰的API 限制列表中。

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

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

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

  2. 單擊創建憑據 > API 密鑰。記下新的 API 密鑰,然後單擊限制密鑰

  3. API 限制部分,選擇Restrict key ,然後將 Cloud Vision API 添加到列表中。

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

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

  1. 打開 Google Cloud Console 的Cloud Vision API 配額頁面。出現提示時,選擇您的項目。

  2. Requests部分,將Requests per minute per user quota 設置為對您的應用來說合理的值。例如,如果您的應用程序涉及上傳文檔圖片以獲取其文本,則用戶不太可能每隔幾秒執行一次以上操作,因此 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)
}

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 功能時準備啟動應用的信息,請參閱啟動清單