Moatgator Vault
Um lugar para os segredos do seu backend, do seu CI e do seu app móvel
Coloque uma referência mg:// onde antes ficava o valor. A CLI, o GitHub Actions e o SDK móvel resolvem na hora de rodar, e o seu app só recebe um segredo em aparelho que passou no Attest.
Incluído a partir do plano Startup.
$ moatgator secrets run --env-file .env.tpl -- npm start$ moatgator secrets inject -i .env.tpl -o .env$ moatgator secrets get mg://api/prod/DATABASE_URLReferências mg://
Versione a referência, não o valor
Uma referência aponta um projeto, um ambiente e um segredo, como em mg://api/prod/DATABASE_URL. Ela pode ficar no Git: só uma identidade com acesso a transforma em valor.
01
Um .env.tpl no repositório
Mantenha um modelo com referências. O moatgator secrets inject grava o .env com permissão 0600 e não sobrescreve um arquivo existente sem --force.
.env.tplExemplo # .env.tpl: safe to commitDATABASE_URL=mg://api/prod/DATABASE_URLSTRIPE_KEY=mg://api/prod/STRIPE_KEYSENTRY_DSN=mg://api/prod/SENTRY_DSN02
moatgator secrets run
Roda o seu comando com os segredos como variáveis de ambiente e esconde os valores na saída do comando. O moatgator secrets get lê uma referência só.
terminalExemplo $ moatgator secrets run --env-file .env.tpl -- npm start$ moatgator secrets inject -i .env.tpl -o .env$ moatgator secrets get mg://api/prod/DATABASE_URL03
A mesma referência no app
No SDK Android, Moatgator.vault.get("mg://mobile/prod/PARTNER_KEY") lê o ambiente vinculado ao app no console. O valor nunca vai dentro do APK.
KotlinExemplo // Android (Kotlin), off the main threadMoatgator.startSession(playIntegrityProvider)val key = Moatgator.vault.get("mg://mobile/prod/PARTNER_KEY")
Projetos, ambientes e versões
Projetos e ambientes
Todo projeto nasce com dev, staging e prod. Crie ambientes próprios quando precisar.
Herança e sobrescrita
Um ambiente pode herdar de outro, até três níveis. Um segredo com o mesmo nome sobrescreve o herdado.
Ambientes protegidos
O prod nasce protegido: só donos e admins leem os valores ou gravam nele.
Versões e rollback
Toda mudança cria uma versão com histórico. O rollback cria uma versão nova, então o histórico nunca é reescrito.
Revogação imediata
Revogue um segredo ou um token de serviço e a próxima leitura é recusada, sem esperar data de validade.
Papéis
Os papéis de dono, admin, dev e leitor decidem quem vê os valores e quem os altera.
Só em aparelho atestado
O mesmo segredo, entregue ao seu app móvel só em aparelho que passou no Attest
Gerenciadores de segredos costumam atender servidores, desenvolvedores e CI. O Vault atende também o app na mão do seu usuário: o SDK pede na hora de rodar, a API confere o Attest do aparelho (Play Integrity ou App Attest, mais os sinais do RASP da Moatgator) e envia o valor cifrado para uma chave efêmera daquela sessão. Nada vai para o binário.
O SDK guarda o valor só em memória, nunca em disco nem em log. As referências mg:// estão disponíveis no SDK Android.
Políticas por segredo
- Veredito mínimoEscolha o menor veredito do Attest que pode receber cada segredo.
- Atestação da plataforma obrigatóriaExija o resultado da atestação da plataforma, não só os sinais do próprio SDK.
- Idade máxima da atestaçãoRecuse o segredo quando a atestação do aparelho for mais antiga do que você permite.
CI e servidores
Nenhum token de longa duração guardado no seu CI
A Action moatgator-hq/github-action/vault troca o token OIDC do job por um token de leitura que dura 15 minutos. Pull requests nunca recebem token. Onde não houver OIDC, use um token de serviço.
- Tokens de serviço (mgvt_…) são só de leitura e presos a um projeto e aos ambientes que você escolher.
- A validade é obrigatória: 90 dias por padrão, no máximo um ano.
- Os valores ficam mascarados no log do job e nunca viram saída de um passo.
- Uma referência que não resolve reprova o passo sem exportar nada.
permissions: { contents: read, id-token: write }steps: - uses: moatgator-hq/github-action/vault@v1 with: project-id: vpj_… secrets: | DATABASE_URL=mg://api/prod/DATABASE_URL - run: ./deploy.sh # $DATABASE_URL, *** in the logSync e rotação
Leve os segredos para onde você faz deploy, e troque-os no prazo
Um sync mantém um ambiente, com herança, copiado nos secrets do GitHub Actions, no Railway ou no Vercel. Ele roda ao ser criado e de novo a cada mudança nesse ambiente ou num ambiente do qual ele herda.
Secrets do GitHub Actions
Sync para um repositório ou para um ambiente do GitHub. Cada valor é cifrado com a chave pública do repositório antes de sair da Moatgator.
Railway
Sync para as variáveis de um projeto e ambiente do Railway, ou de um único serviço.
Vercel
Sync para as variáveis de production, preview ou development de um projeto do Vercel, gravadas como variáveis cifradas.
Permissão explícita e status
Você confirma cada destino e dá a ele um token só daquele destino, guardado cifrado. Cada sync mostra quando rodou pela última vez, quantos segredos gravou e qualquer erro.
Rotação agendada
- Um valor aleatório novo no prazoPara segredos que só a sua empresa usa, como chaves de HMAC e segredos de sessão: a Moatgator gera um valor novo, cria uma versão e roda os syncs.
- Um lembrete para chaves de outros provedoresPara uma chave emitida por outro serviço, donos e admins recebem um e-mail no vencimento, e o console mostra a rotação como atrasada até um valor novo ser salvo.
Um sync só grava no destino, e apaga lá só os segredos que ele mesmo gravou. Apagar um sync deixa o destino como está.
Cifrado por organização, auditado em cada leitura
Cifra em envelope por tenant
Cada organização tem a própria chave, embrulhada por uma chave mestra.
Texto cifrado amarrado ao lugar
Cada texto cifrado fica amarrado ao projeto, ao ambiente, ao nome e à versão, e não pode ser levado para outro segredo.
Valores fora dos logs
Os valores dos segredos nunca vão para os nossos logs, e a CLI e a Action os escondem na sua saída.
Trilha de auditoria de cada leitura
Em cada leitura: quem leu, por onde, qual versão e o resultado.
Comparar
Moatgator Vault, 1Password e Doppler
1Password e Doppler são gerenciadores de segredos consolidados, e os dois fazem boa parte do que o Vault faz. A tabela mostra onde cada um está, com fonte pública e a data em que conferimos em cada célula sobre eles. O Vault não é um gerenciador de senhas para pessoas: o foco é app, CI e aparelho móvel.
| Recurso | Moatgator Vault | 1Password | Doppler |
|---|---|---|---|
| Referências no lugar do valor | mg://projeto/ambiente/NOME, também no SDK móvel | 1 op://cofre/item/campo | Parcial23 referências ${…} dentro do Doppler; templates {{.NAME}} para arquivos |
| Rodar um comando com os segredos como variáveis de ambiente | valores escondidos na saída | 4 op run, valores mascarados na saída por padrão | 56 doppler run; mascaramento da saída não documentado na CLI |
| Gerar um arquivo a partir de um modelo | arquivo gravado com permissão 0600 | 7 op inject | 3 secrets substitute e --mount |
| Ambientes com herança | até 3 níveis, sobrescrita pelo nome | Parcial8 Environments existem, independentes entre si | 910 branch configs herdam da config raiz; herança entre configs no Team e no Enterprise |
| Histórico de versões e rollback | o rollback cria versão nova | 11 histórico do item e restauração | 12 rollback a partir dos logs |
| Tokens de máquina restritos e com validade | só leitura, por projeto e ambiente, validade obrigatória | 1314 service accounts com permissão por cofre e validade opcional | 15 service tokens por config, validade opcional |
| Revogação imediata de token | 16 | 15 | |
| CI com OIDC, sem token guardado | GitHub Actions, token de 15 minutos | Parcial1718 a load-secrets-action usa token guardado; Credential Broker com OIDC em prévia pública | 196 service account identities, planos Team e Enterprise |
| Sync com GitHub Actions, Railway e Vercel | a cada mudança; só grava, apaga só o que gravou | Parcial820 Environments com sync para o AWS Secrets Manager (beta); GitHub, Railway e Vercel não encontrados | 2122 integrações com GitHub, Vercel e Railway enviam os segredos sozinhas |
| Rotação agendada | Parcial valor aleatório novo para segredos seus; lembrete por e-mail para chaves de terceiros | Não encontrado na documentação pública2316 tokens de service account trocados à mão; rotação agendada de segredos guardados não encontrada | 24 rotação automática de serviços suportados, como bancos de dados, nos planos Team e Enterprise |
| Papéis e produção protegida | dono, admin, dev e leitor; prod protegido | 258 permissões por cofre e por Environment | 26 papéis por projeto e por ambiente |
| Auditoria de cada leitura de segredo | quem, por onde, versão e resultado | 27 relatórios de uso no 1Password Business | Parcial28 o access log guarda a primeira e a última leitura de cada ator |
| Entrega ao app móvel só em aparelho atestado | Attest mais RASP, cifrado por sessão | Não encontrado na documentação pública2930 não encontrado na documentação dos SDKs e do Connect | Não encontrado na documentação pública3121 não encontrado na documentação dos SDKs e das integrações |
Onde o 1Password é forte
Fontes
- 1. 1Password CLI — Secret references · conferido em
- 2. Doppler — Secrets (referencing) · conferido em
- 3. Doppler — Secret injection with templates · conferido em
- 4. 1Password CLI — op run · conferido em
- 5. Doppler — Accessing secrets (run, --mount) · conferido em
- 6. Doppler — GitHub OIDC examples · conferido em
- 7. 1Password — Load secrets into config files (op inject) · conferido em
- 8. 1Password Environments · conferido em
- 9. Doppler — Branch configs · conferido em
- 10. Doppler — Config inheritance · conferido em
- 11. 1Password — View and restore previous versions of items · conferido em
- 12. Doppler — Versioning · conferido em
- 13. 1Password CLI — op service-account · conferido em
- 14. 1Password CLI — op connect · conferido em
- 15. Doppler — Service tokens · conferido em
- 16. 1Password — Manage service accounts · conferido em
- 17. 1Password — GitHub Actions (load-secrets-action) · conferido em
- 18. 1Password Credential Broker — GitHub Actions (public preview) · conferido em
- 19. Doppler — Service account identities (OIDC) · conferido em
- 20. 1Password — Sync Environments to AWS Secrets Manager (beta) · conferido em
- 21. Doppler — Integrations · conferido em
- 22. Doppler — GitHub Actions integration · conferido em
- 23. 1Password Secrets Automation · conferido em
- 24. Doppler — Secrets rotation · conferido em
- 25. 1Password — Create, share, and manage vaults · conferido em
- 26. Doppler — Project permissions · conferido em
- 27. 1Password — Reports (usage reports) · conferido em
- 28. Doppler — Access logs · conferido em
- 29. 1Password SDKs · conferido em
- 30. 1Password Connect · conferido em
- 31. Doppler — Future SDKs and integration roadmap · conferido em
- 32. 1Password — About the 1Password security model · conferido em
- 33. 1Password — About your Secret Key · conferido em
- 34. Doppler — Security fact sheet · conferido em
- 35. Doppler — Pricing · conferido em
1Password e Doppler são marcas dos seus donos, citadas só para identificar os produtos comparados. O que dizemos sobre eles vem da documentação pública deles na data indicada. “Não encontrado” quer dizer que não achamos nas páginas citadas, não que o produto não tenha. Se algo mudou, escreva para nós que corrigimos.
Planos
O Vault está incluído nos planos Startup, Scale e Enterprise.
| Plano | Projetos por organização | Segredos por ambiente |
|---|---|---|
| Startup | 5 | 100 |
| Scale | 50 | 500 |
| Enterprise | 200 | 1.000 |
Perguntas frequentes
Preciso mudar o meu código para usar o Vault?
Em servidor e CI, não: o seu código continua lendo variáveis de ambiente, e você inicia o processo com o moatgator secrets run ou com a Action do GitHub. No app Android, chame Moatgator.vault.get com a referência.
Quem tem o meu APK consegue ler um segredo do Vault?
O valor não está no APK. A API só o envia para um aparelho que passou no Attest conforme a política do segredo, cifrado para aquela sessão, e o SDK o guarda só em memória. Um aparelho ainda pode ser comprometido depois de passar, então mantenha as checagens no servidor para tudo que movimenta dinheiro.
E se um token de serviço vazar?
Revogue no console e o próximo pedido é recusado. Tokens de serviço são só de leitura, limitados a um projeto e aos ambientes escolhidos, e vencem em 90 dias por padrão.
O Vault substitui o 1Password ou o Doppler?
Não necessariamente. Se você já usa um deles para servidor e CI, ele pode ficar. O Vault acrescenta a entrega ao seu app móvel em aparelho atestado, e também atende servidor e CI se você preferir uma ferramenta só.
Quais planos incluem o Vault?
Startup, Scale e Enterprise. Projetos por organização: 5, 50 e 200. Segredos por ambiente: 100, 500 e 1.000.
Comece com um segredo
Crie um projeto, cadastre um segredo e resolva pela CLI, pelo seu CI ou pelo seu app.