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

如果你的 Apple 應用程式使用 Firebase ML 的任一雲端 API,則在你啟動應用程式前 也建議您採取額外的措施 API 存取權。

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

首先,請設定現有的 API 金鑰來禁止存取 Cloud Vision API:

  1. 開啟 Cloud Shell 的「Credentials」(憑證) 頁面, 存取 Google Cloud 控制台系統出現提示時,請選取您的專案。

  2. 針對清單中的每個現有 API 金鑰,開啟編輯檢視畫面。

  3. 在「API 限制」部分,選取「限制金鑰」,然後將 列出您想讓 API 金鑰存取的所有 API。請確認 「不」包含 Cloud Vision API。

    設定 API 金鑰的 API 限制時,您將明確 宣告金鑰可存取的 API。根據預設,當 「限制」專區已選取「不限制金鑰」,您可以 ,用來存取已為專案啟用的任何 API。

現有的 API 金鑰將不會授予雲端機器學習服務的存取權, 您新增至其 API 限制的所有 API 仍可使用金鑰。 請參考閱讀清單,進一步瞭解 如何選擇 Kubeflow Pipelines SDK 或 TFX

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

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

接下來,請建立 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. 開啟該應用程式的「Cloud Vision API 配額」頁面。 存取 Google Cloud 控制台系統出現提示時,請選取您的專案。

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