Proteger suas credenciais da nuvem do Kit de ML em apps para iOS

Se o aplicativo para iOS usa uma das APIs de nuvem do Kit de machine learning, antes de lançar seu aplicativo na produção, é preciso tomar algumas medidas adicionais para impedir o acesso não autorizado à API.

1. Reduza o escopo das chaves de API existentes

Primeiro, configure suas chaves de API existentes para proibir o acesso à API Cloud Vision:

  1. Abra a página Credenciais do Console do Cloud. Quando solicitado, selecione o projeto com o mesmo nome do seu projeto do Firebase.

  2. Para cada chave de API na lista, abra a visualização de edição e, na seção "Restrições de chave", adicione à lista todas as APIs disponíveis, exceto a API Cloud Vision.

    Quando você configura as restrições de API de uma chave de API, declara explicitamente as APIs a que a chave concede acesso. Por padrão, quando a seção "Restrições de API" estiver vazia, uma chave de API poderá ser usada para acessar qualquer API ativada para o projeto.

Agora, suas chaves de API existentes não concederão acesso aos serviços de machine learning na nuvem, mas continuarão funcionando para as APIs ativadas por você ou ativadas automaticamente quando você configurou o Firebase.

Observe que, se você ativar quaisquer APIs adicionais no futuro, também deverá adicioná-las à lista "Restrições de API" da chave de API.

2. Crie uma nova chave de API para uso com o Kit de machine learning

Em seguida, crie uma nova chave de API para o Kit de machine learning que permita somente chamadas para a API Cloud Vision:

  1. Volte para a página Credenciais. Verifique se seu projeto do Firebase ainda está selecionado.

  2. Clique em Criar credenciais > Chave de API. Anote a nova chave de API e clique em Restringir chave.

  3. Na seção "Restrições de chave", adicione somente a API Cloud Vision.

Essa chave de API concede acesso apenas à API Cloud Vision e pode ser usada pelo kit de machine learning para acessar modelos baseados em nuvem.

Para ajudar a diminuir as consequências de uma chave comprometida, reduza a cota por usuário da API Cloud Vision da configuração padrão. Para fazer isso, siga estas etapas:

  1. Abra a página cotas da API Cloud Vision no Console do Cloud. Quando solicitado, selecione o projeto com o mesmo nome do seu projeto do Firebase.

  2. Na seção Solicitações, defina a cota Solicitações por minuto por usuário como um valor razoável para seu app. Por exemplo, se o aplicativo envolver o upload da imagem de um documento para recuperar seu texto, é improvável que um usuário faça isso mais de uma vez a cada poucos segundos. Portanto, uma cota de 30 a 40 provavelmente estaria segura.

    Nesse contexto, "solicitações por usuário" se refere a solicitações de um único endereço IP. Talvez seja necessário considerar isso se você espera que vários usuários usem seu app ao mesmo tempo por trás de um NAT.

4. Chame APIs do Cloud com sua chave de API do Kit de ML

Finalmente, no seu aplicativo, configure o Kit de machine learning para usar sua nova chave de API.

Como a chave de API do Kit de machine learning permite o acesso não autenticado à API Cloud Vision, é importante manter a chave confidencial para impedir o uso não autorizado e as cobranças na sua conta de faturamento. Para isso, evite incluir sua chave de API no binário do aplicativo. Em vez disso, no tempo de execução do aplicativo, verifique se um usuário válido conhecido está conectado e, somente então, recupere a chave de API de um servidor.

Mesmo quando essas práticas forem observadas, é possível que uma chave de API seja comprometida. Tome medidas para ajudar a atenuar as consequências de uma chave comprometida, como a redução da cota por usuário da API, conforme descrito acima, a implementação de políticas de rotação de chaves e a emissão de chaves diferentes para grupos de usuários distintos.

Depois que seu aplicativo adquirir a chave de API com segurança, especifique-a quando quiser chamar uma API do Cloud do Kit de ML:

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

Além disso, siga o conselho geral em Como proteger uma chave de API.

Próximas etapas

Consulte a lista de verificação de lançamento para mais informações sobre como preparar seu aplicativo para o lançamento ao usar outros recursos do Firebase.