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

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

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

首先,配置現有 API 金鑰以禁止存取 Cloud Vision API:

  1. 開啟 Google Cloud 控制台的憑證頁面。出現提示時,選擇您的項目。

  2. 對於清單中的每個現有 API 金鑰,開啟編輯視圖。

  3. API 限制部分中,選擇限制金鑰,然後將您希望 API 金鑰有權存取的所有 API 新增至清單。確保包含 Cloud Vision API。

    當您設定 API 金鑰的API 限制時,您將明確聲明該金鑰有權存取的 API。預設情況下,當API 限制部分選擇了不限制金鑰時,API 金鑰可用於存取為專案啟用的任何 API。

現在,您現有的 API 金鑰將不會授予對雲端 ML 服務的存取權限,但每個金鑰將繼續適用於您新增至其API 限制清單中的任何 API。

請注意,如果您將來啟用任何其他 API,則必須將它們新增至適用 API 金鑰的API 限制清單。

2. 建立新的 API 金鑰以與 Firebase ML 結合使用

接下來,為 Firebase ML 建立一個新的 API 金鑰,僅允許呼叫 Cloud Vision API:

  1. 返回憑證頁面。確保您的 Firebase 專案仍處於選取狀態。

  2. 按一下建立憑證 > API 金鑰。記下新的 API 金鑰,然後按一下「限制金鑰」

  3. API 限制部分中,選擇限制 key ,然後將 Cloud Vision API 新增至清單。

此 API 金鑰僅授予對 Cloud Vision API 的存取權限,Firebase ML 可以使用它來存取基於雲端的模型。

為了幫助減輕金鑰洩漏的後果,您應該減少 Cloud Vision API 的每位使用者配額的預設設定。為此:

  1. 開啟 Google Cloud 控制台的Cloud Vision 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)
}

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 功能時準備啟動應用程式的資訊。