Я думаю, что Azure хорошо подходит для этой ситуации.
Поскольку у вас уже есть внешний интерфейс, я бы внес в него небольшие изменения, чтобы по окончании сохранения файла в хранилище больших двоичных объектов он записывал сообщение в очередь с указанием пути к файлу, который нужно обработать, и информацией о том, как он был зашифрован (если у вас есть эта информация, и это облегчит последнюю обработку).
Я бы написал класс, который может отслеживать эту очередь на входящую работу. Он получает сообщение из очереди (вам нужно убедиться, что таймаут видимости , установленный вами при получении сообщения из очереди, достаточен, чтобы вы могли завершить эту обработку до истечения срока его действия), задание, которое вы уже указали, затем удаляет сообщение очереди, чтобы сообщить, что оно завершило эту часть работы.
В базовой настройке напишите рабочую роль, которая использует класс выше. Если вы можете обрабатывать несколько файлов одновременно на одном экземпляре, при запуске рабочей роли создайте несколько экземпляров этого класса в своем собственном потоке.
Если вам требуется больше вычислительной мощности, разверните больше рабочих экземпляров.