Deploy de Docker que impossibilita acesso ao bash
Olá pessoal, espero que todos estejam bem. Gostaria de fazer uma pergunta e antes vou dar um contexto sobre o que eu faço atualmente.
Contexto
Atualmente sou líder técnico de uma equipe que desenvolve um produto de IA na área de Visão Computacional. Nosso produto possui duas partes. A primeira parte é o software escrito em C++ que é executado dentro de um Docker. Este software roda em um computador com hardware dedicado para processamento de modelos de IA, ou seja, ele possui uma GPU, que utilizamos para decodificar vídeo, e uma NPU (Neural Processing Unit) para executar o modelo de IA. Existe alguns scripts escritos em Python que se comunicam com o software em C++ por meio de sockets.
A segunda parte do software é o front e back, hospedados na cloud, que são escritos em React.js e FastAPI, respectivamente. Temos também Docker para as duas aplicações.
Vimos uma grande demanda de empresas querendo executar o software on-premise em servidores próprios. Atualmente, a gente envia o dispositivo já configurado para os clientes. Entretanto, o cliente usar a própria máquina é algo novo para nós em quesitos de segurança. O cliente gostaria de executar toda a infraestrutura, ou seja, o software em C++, o front e o backend em seus próprios servidores.
Pergunta
Em quesito de segurança e sigilo do nosso código, existe algum meio que impossibilite uma pessoa mal intencionada em simplesmente rodar um docker exec -it {NOME_DO_CONTAINER} bash
e inspecionar o código? Os executáveis em C++ sei que não vai conseguir, porque a gente só coloca o executável do C++, porém o que é escrito em JavaScript, Python e afins não vejo uma maneira de escondê-los.
Alguém tem uma sugestão ou já passou por algo similar?
Observação
Temos contrato de confidencialidade, propriedade intelectual e etc... porém eu, honestamente, fico muito receoso quanto a deixar o código ali e confiar na boa fé das pessoas.
Grato desde já!
@edit
Fiz uma pesquisa mais a fundo e percebi que não tem uma forma que impossibilite alguém de realizar o crack do binário, mesmo sendo escrito em C++, Rust, Go, ou escrito em bytecode: Java, Python, JavaScript.
O jeito mesmo é fazer isso que o pessoal sugeriu, de obfuscar o código e, também, compilá-lo para bytecode, no caso do Python usando o .pyc ou o PyInstaller que, também, consegue gerar um binário único para usar.
Resolvi o problema utilizando o PyInstaller que me agradou bastante e foi bem simples de usá-lo.