Proteger suas credenciais da nuvem do Firebase ML em apps da Apple

Se o app da Apple usa uma das APIs de nuvem do Firebase ML 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

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

  1. Abra a página Credenciais do Console do Google Cloud. Quando solicitado, selecione o projeto.

  2. Para cada chave de API na lista, abra a visualização de edição.

  3. Na seção Restrições da API, selecione Restringir chave e adicione à lista todas as APIs que precisam ter acesso liberado para a chave. Não inclua a API Cloud Vision.

    Ao configurar as restrições de API de uma chave, você declara explicitamente quais APIs a chave pode acessar. Por padrão, quando a seção Restrições da API tiver a opção Não restringir a chave selecionada, uma chave de API poderá ser usada para acessar qualquer API ativada para o projeto.

Agora as chaves de API não concederão acesso aos serviços de ML na nuvem, mas todas elas continuarão funcionando para as APIs adicionadas à lista de restrições de API.

Se você ativar mais APIs no futuro, precisará adicioná-las à lista de restrições de API para a chave em questão.

2. Criar uma nova chave de API para uso com o Firebase ML

Agora crie uma nova chave de API para o Firebase ML que permita apenas chamadas para a API Cloud Vision:

  1. Volte para a página Credenciais. Verifique se o 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 da API, selecione Restringir chave e adicione à lista somente a API Cloud Vision.

Essa chave de API concede acesso apenas à API Cloud Vision e pode ser usada pelo Firebase ML 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 Google Cloud. Quando solicitado, selecione o projeto.

  2. Na seção Solicitações, defina a cota Solicitações por minuto por usuário como algo razoável para seu aplicativo. Por exemplo, se o aplicativo envolver o upload de uma imagem de um documento para recuperar o 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 seria 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 usando sua chave de API do Firebase ML

Por fim, no app, configure o Firebase ML para usar a nova chave de API.

Como a chave de API do Firebase ML 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 ambiente 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 app adquirir a chave de API com segurança, especifique-a quando quiser chamar uma API do Cloud do Firebase 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 checklist de lançamento para mais informações sobre como preparar seu app para o lançamento ao usar outros recursos do Firebase.