iOSアプリがFirebaseMLのクラウドAPIのいずれかを使用している場合、アプリを本番環境で起動する前に、不正なAPIアクセスを防ぐためにいくつかの追加手順を実行する必要があります。
1.既存のAPIキーの範囲を縮小します
まず、Cloud VisionAPIへのアクセスを禁止するように既存のAPIキーを構成します。
Google CloudConsoleの[認証情報]ページを開きます。プロンプトが表示されたら、Firebaseプロジェクトと同じ名前のプロジェクトを選択します。
リスト内のAPIキーごとに、編集ビューを開き、[キーの制限]セクションで、Cloud VisionAPIを除く使用可能なすべてのAPIをリストに追加します。
APIキーのAPI制限を構成する場合、キーがアクセスを許可するAPIを明示的に宣言します。デフォルトでは、[API制限]セクションが空の場合、APIキーを使用して、プロジェクトで有効になっている任意のAPIにアクセスできます。
これで、既存のAPIキーはクラウドMLサービスへのアクセスを許可しませんが、自分で有効にしたAPI、またはFirebaseのセットアップ時に自動的に有効にされたAPIに対して引き続き機能します。
将来、追加のAPIを有効にする場合は、それらをAPIキーのAPI制限リストにも追加する必要があることに注意してください。
2. FirebaseMLで使用する新しいAPIキーを作成します
次に、Cloud VisionAPIへの呼び出しのみを許可するFirebaseMLの新しいAPIキーを作成します。
[資格情報]ページに戻ります。 Firebaseプロジェクトがまだ選択されていることを確認してください。
[認証情報の作成]> [APIキー]をクリックします。新しいAPIキーをメモし、[キーを制限]をクリックします。
[キーの制限]セクションで、Cloud VisionAPIのみをリストに追加します。
このAPIキーは、Cloud Vision APIへのアクセスのみを許可し、FirebaseMLがクラウドベースのモデルにアクセスするために使用できます。
3.推奨:Cloud VisionAPIのクォータを減らします
侵害されたキーの影響を軽減するには、Cloud VisionAPIのユーザーごとの割り当てをデフォルト設定から減らす必要があります。そうするために:
Google CloudConsoleのCloudVision APIQuotasページを開きます。プロンプトが表示されたら、Firebaseプロジェクトと同じ名前のプロジェクトを選択します。
[リクエスト]セクションで、ユーザーあたりの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機能を使用するときにアプリを起動する準備については、起動チェックリストをご覧ください。