Firebase MLAppleアプリのクラウドクレデンシャルを保護する

AppleアプリがFirebaseMLのクラウドAPIのいずれかを使用している場合は、アプリを本番環境で起動する前に、不正なAPIアクセスを防ぐためにいくつかの追加手順を実行する必要があります。

1.既存のAPIキーの範囲を縮小します

まず、Cloud VisionAPIへのアクセスを禁止するように既存のAPIキーを構成します。

  1. Google CloudConsoleの[認証情報]ページを開きます。プロンプトが表示されたら、プロジェクトを選択します。

  2. リスト内の既存のAPIキーごとに、編集ビューを開きます。

  3. [ APIの制限]セクションで、[キーの制限]を選択し、APIキーにアクセスを許可するすべてのAPIをリストに追加します。 Cloud VisionAPIを含めないようにしてください。

    APIキーのAPI制限を構成する場合、キーがアクセスできるAPIを明示的に宣言しています。デフォルトでは、[ API制限]セクションで[キーを制限しない]が選択されている場合、APIキーを使用して、プロジェクトで有効になっている任意のAPIにアクセスできます。

これで、既存のAPIキーはクラウドMLサービスへのアクセスを許可しませんが、各キーは、 API制限リストに追加したすべてのAPIで引き続き機能します。

将来、追加のAPIを有効にする場合は、該当するAPIキーのAPI制限リストにそれらを追加する必要があることに注意してください。

2. FirebaseMLで使用する新しいAPIキーを作成します

次に、Cloud VisionAPIへの呼び出しのみを許可するFirebaseMLの新しいAPIキーを作成します。

  1. [資格情報]ページに戻ります。 Firebaseプロジェクトがまだ選択されていることを確認してください。

  2. [資格情報の作成]> [APIキー]をクリックします。新しいAPIキーをメモしてから、[キーを制限]をクリックします。

  3. [ API制限]セクションで、[キーを制限]を選択し、Cloud VisionAPIのみをリストに追加します。

このAPIキーは、Cloud Vision APIへのアクセスのみを許可し、FirebaseMLがクラウドベースのモデルにアクセスするために使用できます。

侵害されたキーの影響を軽減するには、Cloud VisionAPIのユーザーごとの割り当てをデフォルト設定から減らす必要があります。そうするには:

  1. Google CloudConsoleのCloudVisionAPIクォータページを開きます。プロンプトが表示されたら、プロジェクトを選択します。

  2. [リクエスト]セクションで、ユーザーあたりの1分あたりのリクエスト数の割り当てをアプリに適したものに設定します。たとえば、アプリでドキュメントの画像をアップロードしてテキストを元に戻す必要がある場合、ユーザーが数秒に1回以上アップロードする可能性は低いため、30〜40の割り当てで安全です。

    このコンテキストでは、「ユーザーごとのリクエスト」は単一のIPアドレスからのリクエストを指すことに注意してください。複数のユーザーがNATの背後から同時にアプリを使用することが予想される場合は、これを考慮する必要があります。

4. Firebase MLAPIキーを使用してCloudAPIを呼び出す

最後に、アプリで、新しいAPIキーを使用するようにFirebaseMLを設定します。

Firebase MLAPIキーはCloudVision 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機能を使用するときにアプリを起動する準備については、起動チェックリストをご覧ください。