Proteja as credenciais de nuvem do seu aplicativo Firebase ML Apple

Se seu app da Apple usa uma das APIs de nuvem do Firebase ML, antes de lançar seu app em produção, você deverá 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 Google Cloud. Quando solicitado, selecione seu projeto.

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

  3. Na seção Restrições de API , selecione Restringir chave e adicione à lista todas as APIs às quais você deseja que a chave de API tenha acesso. Certifique-se de não incluir a API Cloud Vision.

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

Agora, suas chaves de API existentes não concederão acesso aos serviços de ML em nuvem, mas cada chave continuará funcionando para quaisquer APIs que você adicionou à sua lista de restrições de API .

Observe que se você ativar quaisquer APIs adicionais no futuro, deverá adicioná-las à lista de restrições de API da chave de API aplicável.

2. Crie uma nova chave de API para usar com Firebase ML

Em seguida, crie uma nova chave de API para Firebase ML que permita apenas chamadas para a API Cloud Vision:

  1. Retorne à página Credenciais . Certifique-se de que seu projeto do Firebase ainda esteja 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 API , selecione Restringir chave e adicione à lista apenas a API Cloud Vision.

Esta 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 mitigar as consequências de uma chave comprometida, reduza a cota por usuário da API Cloud Vision em relação à configuração padrão. Para fazer isso:

  1. Abra a página Cotas da API Cloud Vision do console do Google Cloud. Quando solicitado, selecione seu projeto.

  2. Na seção Solicitações , defina a cota de Solicitações por minuto por usuário para algo razoável para seu aplicativo. Por exemplo, se seu aplicativo envolve o upload de uma 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 seria segura.

    Observe que neste contexto “solicitações por usuário” refere-se 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 aplicativo 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 seu aplicativo, configure o Firebase ML para usar sua nova chave de API.

Como a chave da API Firebase ML permite acesso não autenticado à API Cloud Vision, é importante manter a chave confidencial para evitar uso não autorizado e cobranças na sua conta de faturamento. Para fazer isso, você deve evitar incluir sua chave de API no binário do seu aplicativo. Em vez disso, no tempo de execução do aplicativo, verifique se um usuário em boas condições está conectado e só então recupere a chave de API de um servidor.

Mesmo quando essas práticas são observadas, é possível que uma chave de API seja comprometida. Você deve tomar medidas para ajudar a mitigar as consequências de uma chave comprometida, como reduzir a cota por usuário da API conforme descrito acima, implementar políticas de rotação de chaves e emitir chaves diferentes para grupos diferentes de usuários.

Depois que seu aplicativo adquirir com segurança a chave de API, quando você quiser chamar uma API Firebase ML Cloud, especifique a chave:

Rápido

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)
}

Objetivo-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, você deve seguir os conselhos gerais em Protegendo uma chave de API .

Próximos passos

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