v2.0

Isolamento do Runtime

Como o runtime prova quem é, o que ele consegue enxergar da plataforma, e por que uma máquina comprometida não vira uma porta de entrada para outros clientes.

O modelo: um componente crítico, tratado com o rigor que isso exige

O runtime é quem de fato executa os agentes: ele carrega credenciais reais, opera navegadores e sistemas em nome da sua empresa, e roda numa máquina que é sua, seja um notebook, um servidor compartilhado ou um contêiner. Dada essa criticidade, o executável distribuído foi desenhado para não carregar nenhum segredo de longo prazo: tudo que ele precisa para operar é obtido em tempo de execução, validado a cada ativação, e escopado ao mínimo necessário. Isso limita o que está em jogo mesmo num cenário extremo, como uma máquina de runtime comprometida ou uma cópia do executável extraviada.

Ativação por chave: como o runtime prova quem é

Ao iniciar, o runtime lê o agent.config.json local e envia dois valores ao Router da plataforma:

O Router não aceita a chave sozinha, nem o token sozinho: ele exige que a combinação bata com um ambiente específico cadastrado sob aquela conta. Uma chave copiada de outro ambiente, ou um token de outro usuário, faz a ativação falhar (veja os erros comuns em Ambientes Runtime).

Por que separar identidade (token) de ativação (chave)? Isso permite revogar e regenerar o acesso de um ambiente específico sem afetar os demais. Se uma máquina for descomissionada ou uma chave vazar, você gera uma nova só para aquele ambiente, sem tocar nos outros.

Sem credencial mestra no executável

Validada a ativação, o Router não devolve uma senha nem uma credencial de administrador. Ele emite um custom token do Firebase, de curta duração, com uma claim (bmToken) que escopa tudo que aquele runtime pode fazer ao próprio user_token. O runtime usa esse token para autenticar via SDK cliente do Firebase, exatamente como um app comum autenticaria um usuário final, nunca com uma service account ou uma credencial de administrador embarcada no binário.

Na prática, isso significa que descompilar ou extrair o executável distribuído não expõe uma chave-mestra da plataforma: o pior cenário é obter acesso ao escopo de uma conta, e só depois de uma ativação válida, ou seja, o mesmo acesso que o próprio dono do ambiente já tem.

Isolamento entre execuções: cada job no seu Worker

Um mesmo runtime pode receber várias execuções ao mesmo tempo, de processos diferentes, ou até do mesmo processo disparado em paralelo. Cada uma delas roda isolada das demais: o processo principal do runtime nunca executa o agente diretamente, ele só recebe o job e sobe uma Worker thread nova e dedicada para aquela execução específica.

Comunicação em tempo real (socket)

Além da ativação (HTTP, via Router), o runtime mantém uma conexão de socket persistente com a plataforma para três finalidades:

O acesso a esse fluxo em tempo real é de posse, não de sessão: o identificador da instância (instanceID) é um UUID gerado pelo servidor e só é entregue a quem já passou pela autorização normal da plataforma (sessão de usuário + permissão sobre o processo) para abrir aquela tela de Debug. Ninguém adivinha um instanceID válido de fora, e o socket em si nunca expõe dados de execução por padrão, só quando alguém entra explicitamente na sala daquela instância.

O que fica de fora do isolamento

Isolamento de credenciais não é isolamento de rede ou de sistema operacional, e vale ser direto sobre os limites:

Boas práticas