保護 Firebase ML Apple 應用程式和#39 的雲端憑證

如果您的 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 限制」專區已選取「Don't restrict key」,則可使用 API 金鑰存取專案已啟用的任何 API。

現有的 API 金鑰將無法授予雲端 ML 服務存取權,但每個金鑰仍可繼續支援您已加入 API 限制清單的任何 API。

請注意,如果您日後啟用其他 API,就必須將這些 API 新增到 適用 API 金鑰的「API 限制」清單。

2. 建立要與「Firebase ML」搭配使用的新 API 金鑰

接著,請為 Firebase ML 建立新的 API 金鑰,只允許呼叫 Cloud Vision API:

  1. 返回「Credentials」(憑證) 頁面。請確認 仍然選取 Firebase 專案。

  2. 按一下「Create credentials」(建立憑證) >API 金鑰。請注意新的 API 金鑰 按一下「Restrict key」(限制金鑰)

  3. 在「API 限制」專區中,選取「限制金鑰」,然後在清單中「僅」新增 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,請指定金鑰:

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 功能時啟動應用程式。