コンソールへ移動

ML Kit iOS アプリのクラウド認証情報を保護する

iOS アプリが ML Kit の Cloud API のいずれかを使用している場合、本番環境でアプリをリリースする前に、不正な API アクセスを防ぐためにいくつかの追加手順を行う必要があります。

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

まず、Cloud Vision API へのアクセスを許可しないように既存の API キーを構成します。

  1. Cloud Console の認証情報ページを開きます。プロンプトが表示されたら、Firebase プロジェクトと同じ名前のプロジェクトを選択します。

  2. リスト内の各 API キーについて、編集ビューを開き、[キーの制限] セクションで Cloud Vision API を除く使用可能なすべての API をリストに追加します。

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

これで、既存の API キーは Cloud ML サービスへのアクセスを許可しなくなりますが、自分で有効化した API や、Firebase を設定する際に自動的に有効になった API では引き続きサービスを利用できます。

今後 API を追加で有効にする場合は、その API キーを API の制限リストに追加する必要があります。

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

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

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

  2. [認証情報を作成] > [API キー] の順にクリックします。新しい API キーをメモし、[キーを制限] をクリックします。

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

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

キーが不正使用された場合の影響を軽減するため、ユーザーごとの Cloud Vision API の割り当てをデフォルト設定より小さくすることをおすすめします。方法は次のとおりです。

  1. Cloud Console の Cloud Vision API の割り当てページを開きます。プロンプトが表示されたら、Firebase プロジェクトと同じ名前のプロジェクトを選択します。

  2. [リクエスト] セクションで、[Requests per minute per user] の割り当てを、アプリに適した値に設定します。たとえば、アプリでドキュメントの画像をアップロードしてそのテキストを取得する場合、ユーザーがその操作を行うのは多くても数秒に 1 回と想定されるため、割り当ては 30~40 あれば十分であると考えられます。

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

4. ML Kit の API キーを使用して Cloud API を呼び出す

最後に、アプリで、新しい API キーを使用するように ML Kit を構成します。

ML Kit の API キーは Cloud Vision API への認証されていないアクセスを許可するため、不正使用や請求先アカウントへの請求を防ぐために、キーを機密にしておくことが重要です。機密にするため、アプリのバイナリに API キーを含めないでください。代わりに、アプリのランタイム時に、既知の安全なユーザーがログインしていることを確認してから、サーバーから API キーを取得します。

これらの方法を守っても、API キーが侵害される可能性があります。上記のようにユーザーごとの API の割り当てを減らしたり、キーのローテーション ポリシーを実装したり、異なるユーザー グループに異なるキーを発行したりするなど、キーが不正使用された場合の影響を軽減する対策を講じてください。

アプリで API キーを安全に取得したら、ML Kit の 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 機能を使用している場合のアプリのリリース準備方法については、リリース チェックリストをご覧ください。