Secrets no Playbook
Nenhum valor de secret mora no repositório. O frontmatter declara só os
nomes, em required_secrets, e essa lista é uma lista de permissão: só o
que está nela chega àquela execução.
O caminho de um secret em produção
- O valor fica no cofre do Kadu, cadastrado por ambiente em Configurações → Secrets.
- No começo da execução, o Kadu entrega só os secrets listados em
required_secretsda tarefa, como variáveis de ambiente, e os registra para mascaramento. - O corpo da skill lê
$KOBANA_ACCESS_TOKEN,$FINTERA_TOKENdireto do ambiente. - Antes de enviar qualquer evento, log, pendência ou resultado ao console, a instrumentação troca o valor de cada secret por uma máscara.
O mascaramento vale para toda variável de required_secrets, qualquer que seja
o nome, e pega o valor como está, escapado em JSON (inclusive JSON dentro de
JSON) e, num valor de várias linhas, linha a linha. Ele ignora valores com
menos de 6 caracteres e não reconhece um valor transformado (base64, URL).
O mascaramento é a última linha de defesa; a primeira é não produzir o vazamento. Nunca ecoe, logue ou inclua o valor de uma secret no resultado, em eventos ou em pendências.
Provisionar um secret novo: a ordem importa
- Adicione o nome em
required_secretsda tarefa e faça o merge. - Confira que a sincronização rodou e listou a tarefa em "Tarefas atualizadas". Antes disso, a lista antiga continua valendo.
- Cadastre o valor no ambiente, antes do próximo horário se a tarefa tiver
schedules.
Na ordem inversa, a execução chama o sistema externo com a variável vazia e falha no meio, e não no começo.
Configuração também é secret
A lista de permissão é o único canal de variáveis de ambiente do Kadu.
Entra nela também o que não é segredo mas precisa poder mudar por
organização: o id de um projeto no Linear, o id de uma entidade no ERP
(REPORT_LINEAR_PROJECT_ID, FINTERA_ENTITY_ID).
Isso pega quem escreve ${VAR:-padrão} no corpo: uma variável lida com
padrão e fora da lista de permissão nunca é sobrescrevível pelo Kadu. A skill
funciona, o padrão vale sempre, e ninguém percebe até precisar mudar o valor
sem deploy. Para conferir, cruze as variáveis que o corpo lê com
required_secrets. O que sobrar tem que ser exportado pelo próprio corpo
(diretório de trabalho, por exemplo), nunca configuração.
Acrescentar uma variável opcional à lista é seguro: sem valor no cofre, ela só
não chega. A exceção é o endpoint de disparo,
que recusa a chamada com 422 missing_secrets quando um secret da lista não
tem valor no ambiente.
Inventário no kadu.yaml
Cada ambiente do kadu.yaml pode listar as chaves
que deve ter. Isso não entrega nada a tarefa nenhuma: serve para a
sincronização avisar quando uma chave esperada não tem valor naquele
ambiente.
required_secrets (na tarefa) | secrets (no ambiente do kadu.yaml) | |
|---|---|---|
| O que é | lista de permissão da execução | inventário esperado do ambiente |
| Efeito | a variável chega à execução | aviso na sincronização se faltar valor |
Em desenvolvimento local
Não há cofre: os valores de teste vêm de um .env fora do git (por exemplo
sandbox/.env, a partir de um sandbox/.env.example versionado só com os
nomes). Fora do Kadu a instrumentação roda em modo de simulação, então nenhum
secret é enviado a lugar nenhum. Ver Desenvolvimento local.