Lançador Produtos Bitnami Documentaçãoimaxe CLI Blog Contacto
imaxe secrets secrets v1.0.0

Segredos locais, seguros por omissão

Gera, lê e roda os segredos da instância (palavras-passe, passphrases, chaves) com um CSPRNG e permissões 0600. Idempotente em AMIs produzidas em massa: o generate cria o segredo apenas se não existir, e o get dá saída limpa para um pipe.

$ imaxe secrets generate mariadb --len 32 --format password
Versão
v1.0.0
Subcomandos
4
Config
/etc/imaxe/secrets.yml
Requer root
sim
Permissões
0600

O que faz este módulo #

Quase todos os serviços da tua instância precisam de um segredo: a palavra-passe da base de dados, a passphrase de uma ferramenta de integridade, uma chave de API… Guardá-los à mão — ou pior, deixá-los nos valores por omissão — é uma das formas mais comuns de uma máquina acabar comprometida.

O módulo secrets trata desse ciclo de vida localmente: gera cada segredo com um gerador criptograficamente seguro (CSPRNG), guarda-o com permissões 0600 (só o root o pode ler), devolve-o com saída limpa pronta para encadear num pipe, e roda-o quando precisas. Tudo está organizado por domínios (por exemplo mariadb ou tripwire), e cada domínio pode ter vários campos.

Seguros por omissão em AMIs produzidas em massa

O generate é idempotente: se o segredo de um domínio já existir, não lhe toca. Assim, uma única imagem pode criar os seus segredos no primeiro arranque de cada instância sem que duas máquinas partilhem a mesma palavra-passe. Os valores nunca são registados no log nem mostrados no list.

Guia rápidotarefas passo a passo

Tarefas comuns #

Escolhe o que queres fazer. Cada receita traz o comando já escrito — basta trocar o domínio pelo teu e clicar em Copiar.

1

Gerar o segredo de um serviço

Cria uma palavra-passe forte para um domínio, apenas se ainda não existir.

Liga-te por SSH ao teu servidor com o utilizador ubuntu.

Gera o segredo para o domínio mariadb. Como é idempotente, podes executá-lo as vezes que quiseres sem receio de sobrescrever:

terminal
$ sudo imaxe secrets generate mariadb

Precisas de uma passphrase longa para outra ferramenta e num campo específico? Ajusta --format, --len e --field:

terminal
$ sudo imaxe secrets generate tripwire --field local.passphrase --format passphrase --len 40
O segredo é guardado com permissões 0600. Se já existia, nada mudou — o comando termina na mesma com sucesso.
2

Ler um segredo para o usar

Obtém o valor em bruto, pronto para encadear noutro comando.

O get imprime apenas o valor, sem decoração nem quebras de linha extra, para que o possas passar a outro processo por pipe:

terminal
$ sudo imaxe secrets get mariadb

O segredo está num campo específico do domínio? Aponta-lhe com --field:

terminal
$ sudo imaxe secrets get tripwire --field local.passphrase
A saída é limpa: podes fazer PASS="$(sudo imaxe secrets get mariadb)" e usá-la diretamente no teu script.
3

Rodar um segredo

Substitui o valor por um novo e marca o domínio como rodado.

Gera um novo valor para o domínio. Ao contrário do generate, o rotate substitui o segredo existente:

terminal
$ sudo imaxe secrets rotate mariadb
O domínio é marcado como rodado (verás a data no list). Lembra-te de atualizar o serviço que usa esse segredo com o novo valor do get.
4

Ver que domínios existem

Consulta os metadados sem expor nenhum valor.

Lista os domínios com os seus metadados (quando foram criados e quando foram rodados). Nunca mostra o próprio segredo:

terminal
$ sudo imaxe secrets list

Precisas dele para um script ou uma verificação automática? Pede a saída em JSON:

terminal
$ sudo imaxe secrets list --json
Vês num relance que segredos a instância gere e quais vale a pena rodar, sem vazar nenhum valor para o ecrã ou para o log.
Atenção a onde o valor vai parar

O segredo só é legível pelo root enquanto vive no disco. Assim que o lês com get passa para o teu terminal e a tua shell: evita deixá-lo no histórico (history), em variáveis de ambiente demasiado exportadas ou em logs. Prefere substituições de comando pontuais como "$(sudo imaxe secrets get mariadb)".

Referência CLIcomandos, flags e ficheiros

Sinopse #

uso
imaxe secrets <subcomando> [<dominio>] [--field CLAVE] [flags]

Todos os subcomandos requerem privilégios de root (usa sudo) porque leem e escrevem ficheiros 0600 em /etc/imaxe/. Adiciona --json a list para obter saída legível por máquina, apta para scripting. Lembra-te: o get emite o valor em bruto, sem decoração, pronto para um pipe.

Subcomandos #

SubcomandoO que fazFlags relevantes
generateCria o segredo de um domínio se não existir (idempotente, CSPRNG). Sem domínio, gera os de generate_on_first_boot.--len, --format, --field
getDevolve o valor de um segredo com saída limpa, apta para um pipe.--field
rotateGera um novo segredo e marca o domínio como rodado.--field
listLista os domínios e os metadados (criado, rodado). Nunca mostra valores.--json

Argumentos e flags #

FlagTipoPor omissãoDescrição
<dominio>stringDomínio do segredo (por exemplo mariadb, tripwire). Obrigatório em get e rotate. Em generate, vazio = os domínios de generate_on_first_boot.
--fieldstringvalueCampo dentro do domínio. Permite guardar vários segredos por domínio (por exemplo local.passphrase).
--lenint32Em generate: comprimento do segredo em caracteres.
--formatenumpasswordEm generate: formato do valor — password, passphrase ou hex.
--jsonboolfalseEm list, emite os metadados como JSON estruturado em stdout.

Ficheiros e caminhos #

CaminhoConteúdo
/etc/imaxe/secrets.ymlConfiguração do módulo: valores por omissão (length, format), domínios e a lista generate_on_first_boot. Guardado com permissões 0600.

Exemplo de secrets.yml:

/etc/imaxe/secrets.yml
defaults:
  length: 32
  format: password
domains: {}
generate_on_first_boot:
  - mariadb
  - tripwire

Com essa configuração, um sudo imaxe secrets generate sem domínio no primeiro arranque cria os segredos de mariadb e tripwire com o comprimento e o formato por omissão.

Códigos de saída e logs #

Cada execução devolve um código que podes verificar com echo $? — útil para encadear em scripts:

0OKOperação concluída (inclui o caso idempotente sem alterações).
1ERRErro genérico não classificado. Verifica as permissões e o ficheiro de configuração.
2USAGEArgumentos inválidos ou em falta (por exemplo, get sem domínio).
3NOTFOUNDO domínio ou campo pedido não existe.

Uso típico num script, aproveitando a saída limpa do get:

terminal
$ sudo imaxe secrets generate mariadb \
  && sudo imaxe secrets get mariadb | some-tool --stdin-password \
  || echo "falló con código $?"

Resolução de problemas #

SintomaCausa provávelSolução
Sai NOTFOUND (código 3)O domínio ou o --field ainda não foi gerado.Cria-o primeiro com secrets generate <dominio> (e o mesmo --field).
Sai USAGE (código 2)get ou rotate executados sem especificar o domínio.Passa o domínio como argumento; é obrigatório nesses subcomandos.
generate não muda o valorO segredo já existia: o generate é idempotente por design.Se queres um novo valor, usa secrets rotate <dominio>.
Permission denied ao lerO ficheiro é 0600 e executaste-o sem privilégios.Executa o comando com sudo; só o root pode aceder ao segredo.

Ficou bloqueado com o módulo Segredos?

Escreva-nos com a saída de «imaxe <module> status --json» e respondemos rapidamente.

Contactar o suporte