Você pode expor os arquivos para suas APIs gerenciadas.
Por exemplo, armazene seus arquivos em um cdn.
Com um armazenamento de objeto de arquivo, como os intervalos de armazenamento, você pode armazenar arquivos com permissões diferentes, para que possam ser acessados usando apenas um par {key,client_id}
ou, ainda, definir políticas para um filtro ip granulado. Por exemplo, esse recurso mostra como faça isso no S3.
O armazenamento de objetos pode oferecer outras vantagens de uma rede de entrega de conteúdo, como um sistema de arquivos distribuído (muito útil caso os arquivos acessem o mundo todo).
A maneira como você pegaria esses arquivos, permite várias soluções:
Pode-se compartilhar recursos de arquivos protegidos com as APIs adicionando chaves às suas APIs (client_id, key) para que eles possam acessar urls protegidos de arquivos na forma de:
https://files.anycdn.com/path/to/file.extension?Policy=bnQiOldGF0ZW1lt7IlJl-SaeO27zJXgtYtk&KeyPairId=APKAQADZ7BCN2PFPW8DA
Desta forma, você tratará suas APIs como clientes do arquivo cdn.
Outro pode ser o de mascarar o URL, para que os clientes, a fim de obter um arquivo, possam solicitar:
GET https://rest.api/file/endpoint/filename
No lado da API, internamente, GET o arquivo (localizado em outro lugar) e enviar de volta um fluxo HTTP com o conteúdo do arquivo para o cliente.
Ou, caso você tenha uma API agindo como um dispatcher de solicitação, solicite um fluxo ao serviço de arquivos e encaminhe esse fluxo como resposta.
Mantê-lo simples, geralmente nos dá os melhores resultados.
É possível proteger o URL do arquivo com credenciais controladas que são compartilhadas com suas APIs e definir uma maneira de renovar essas credenciais regularmente.