Vault do ward

TLDR: Todo secret deste repo vive em vaults criptografados do ward, commitados no git; a chave privada nunca é. Todo comando de Terraform roda sob ward exec. SOPS foi removido por completo.

Pré-requisitos

A chave de decriptação:

Onde Como
local .ward/.key — gitignored, obtida com alguém de devops no config/access.yml
CI o GitHub Secret WARD_KEY

Passos

Rodar Terraform com os secrets injetados

bash ward exec -- terraform plan ward exec -- terraform apply

Os targets de make já embrulham o Terraform em ward exec — na prática você usa make shared.kubernetes.plan.

Editar um vault

bash ward edit .ward/vaults/infrastructure/core.ward ward edit .ward/vaults/infrastructure/shared/messagebroker.ward ward edit .ward/vaults/bootstrap/accounts.ward

Adicionar um secret novo

  1. ward edit <arquivo>.ward
  2. Adicionar a chave no formato KEY: value
  3. Salvar — o ward re-encripta sozinho
  4. Referenciar no Terraform como var.<key>; o ward injeta TF_VAR_* automaticamente

⚠️ Um override de ward substitui o arquivo inteiro, não faz merge por chave. Ao sobrescrever, leve todas as chaves existentes junto.

Inspecionar o que está sendo injetado

bash ward envs # variáveis de ambiente resolvidas ward tree # estrutura dos vaults

Vaults

Configurados em .ward/config.yaml:

Vault Caminho Chave
commons $COMMONS_DIR/.ward/vaults/commons WARD_KEY_COMMONS
infrastructure .ward/vaults/infrastructure chave default
bootstrap .ward/vaults/bootstrap chave default

infrastructure/core.ward

Credenciais globais, compartilhadas por todos os stacks.

Chave Descrição
TF_VAR_cloudflare_api_token token de API do Cloudflare
TF_VAR_cloudflare_zone_id zone ID do Cloudflare
TF_VAR_github_token PAT do GitHub — precisa de admin:org
TF_VAR_dd_api_key chave de API do Datadog
TF_VAR_domain domínio principal
TF_VAR_kubernetes_version versão do Kubernetes do cluster compartilhado
credenciais da conta AWS chaves da conta de management, usadas para assumir a TerraformRole
identificadores AWS ID da conta shared, ID da conta de management, ID da Organization, região
credencial do backend de state acesso ao bucket de state do Terraform

O TF_VAR_github_token precisa do escopo admin:org enquanto o stack shared/github gerir organization secrets — write:org não basta. Ver stack github precisa de token com admin:org.

infrastructure/shared/messagebroker.ward

Chave Descrição
TF_VAR_shared_messagebroker_admin_password senha do admin do RabbitMQ no Amazon MQ

O Amazon MQ tem restrição de senha: mínimo de 12 caracteres, sem vírgula.

bootstrap/accounts.ward

IDs de conta AWS e ARNs de role criados no bootstrap (make aws.account.create). Escrito automaticamente pelo Terraform — raramente editado à mão.

Chave Descrição
TF_VAR_aws_management_account_id ID da conta de management (12 dígitos)
TF_VAR_aws_shared_account_id ID da conta shared--production (12 dígitos)
TF_VAR_organization_id ID da AWS Organization — formato o-xxxxxxxxxx
TF_VAR_aws_region região dos recursos compartilhados
credenciais da conta de management chaves usadas pelo Terraform

A TerraformRole na conta shared precisa existir antes de qualquer outro stack compartilhado — ela é criada pelo bootstrap da conta.

Troubleshooting

terraform plan trava esperando entrada

Uma variável declarada no Terraform não existe no vault. ward envs | grep TF_VAR_ mostra o que está sendo injetado. Causa clássica: divergência de caixa entre o nome da variável e a chave do vault — os stacks deste repo usam nome minúsculo, e o ward mapeia TF_VAR_<name> direto.

O CI falha na decriptação

O GitHub Secret WARD_KEY está ausente ou desatualizado. Ele é o único secret de que o CI precisa além das credenciais do próprio GitHub.

Referências