Proteggi le credenziali Cloud dell'app Apple Firebase ML

Se la tua app per Apple utilizza una delle API cloud di Firebase ML, prima di lanciarla in produzione devi adottare alcune misure aggiuntive per impedire l'accesso non autorizzato all'API.

1. Riduci l'ambito delle chiavi API esistenti

Innanzitutto, configura le chiavi API esistenti per non consentire l'accesso all'API Cloud Vision:

  1. Apri la pagina Credenziali della console Google Cloud. Quando richiesto, seleziona il progetto.

  2. Per ogni chiave API esistente nell'elenco, apri la visualizzazione di modifica.

  3. Nella sezione Restrizioni delle API, seleziona Limita chiave, quindi aggiungi all'elenco tutte le API a cui vuoi che la chiave API abbia accesso. Assicurati di non includere l'API Cloud Vision.

    Quando configuri le limitazioni delle API di una chiave API, dichiari esplicitamente le API a cui la chiave ha accesso. Per impostazione predefinita, quando nella sezione Restrizioni delle API è selezionata l'opzione Non limitare la chiave, una chiave API può essere utilizzata per accedere a qualsiasi API abilitata per il progetto.

Ora le tue chiavi API esistenti non concederanno l'accesso ai servizi di ML sul cloud, ma ogni chiave continuerà a funzionare per tutte le API che hai aggiunto all'elenco delle limitazioni delle API.

Tieni presente che, se in futuro attivi API aggiuntive, dovrai aggiungerle all'elenco delle limitazioni API per la chiave API applicabile.

2. Crea una nuova chiave API da utilizzare con Firebase ML

Poi, crea una nuova chiave API per Firebase ML che consenta solo le chiamate all'API Cloud Vision:

  1. Torna alla pagina Credenziali. Assicurati che il progetto Firebase sia ancora selezionato.

  2. Fai clic su Crea credenziali > Chiave API. Prendi nota della nuova chiave API, quindi fai clic su Limita chiave.

  3. Nella sezione Restrizioni delle API, seleziona Limita chiave, quindi aggiungi all'elenco solo l'API Cloud Vision.

Questa chiave API concede l'accesso solo all'API Cloud Vision e può essere utilizzata da Firebase ML per accedere ai modelli basati su cloud.

Per contribuire ad attenuare le conseguenze di una chiave compromessa, devi ridurre la quota per utente dell'API Cloud Vision dall'impostazione predefinita. Per farlo:

  1. Apri la pagina Quote dell'API Cloud Vision della consoleGoogle Cloud. Quando richiesto, seleziona il progetto.

  2. Nella sezione Richieste, imposta la quota Richieste al minuto per utente su un valore ragionevole per la tua app. Ad esempio, se la tua app prevede il caricamento di un'immagine di un documento per recuperarne il testo, è improbabile che un utente lo faccia più di una volta ogni pochi secondi, quindi una quota di 30-40 dovrebbe essere sicura.

    Tieni presente che in questo contesto "richieste per utente" si riferisce alle richieste provenienti da un singolo indirizzo IP. Potresti dover prendere in considerazione questo aspetto se prevedi che più utenti utilizzino la tua app contemporaneamente da dietro una rete NAT.

4. Chiama le API Cloud utilizzando la chiave API Firebase ML

Infine, nella tua app, configura Firebase ML in modo che utilizzi la nuova chiave API.

Poiché la chiave API Firebase ML consente l'accesso non autenticato all'API Cloud Vision, è importante mantenere la chiave confidenziale per evitare utilizzi non autorizzati e addebiti sul tuo account di fatturazione. Per farlo, devi evitare di includere la tua chiave API nel codice binario dell'app. Al contrario, in fase di esecuzione dell'app, verifica che un utente buono noto abbia eseguito l'accesso e solo dopo recupera la chiave API da un server.

Anche se vengono rispettate queste pratiche, è possibile che una chiave API venga compromessa. Devi adottare misure per contribuire ad attenuare le conseguenze di una chiave compromessa, ad esempio ridurre la quota per utente dell'API come descritto sopra, implementare criteri di rotazione delle chiavi ed emettere chiavi diverse per gruppi diversi di utenti.

Dopo che l'app ha acquisito in sicurezza la chiave API, quando vuoi chiamare un'Firebase ML API Cloud, specifica la chiave:

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];
}

Inoltre, devi seguire i consigli generali riportati in Proteggere una chiave API.

Passaggi successivi

Consulta l'elenco di controllo per il lancio per informazioni su come preparare l'app al lancio quando utilizzi altre funzionalità di Firebase.