Secrets e variáveis de organização no GitHub
TLDR: O stack
src/shared/githubgere, por Terraform, os secrets e variáveis de nível de organização que todo repo daibft-corpherda — hoje as credenciais AWS que o CI usa para dar push no ECR, mais o host do registry e a região.
Pré-requisitos
| Item | Detalhe |
|---|---|
TF_VAR_github_token |
PAT com escopo admin:org (mais repo), no vault ward |
| credenciais AWS | TF_VAR_aws_terraform_access_key_id / _secret_access_key do usuário IAM que o CI usa |
| identificadores | TF_VAR_aws_shared_account_id, TF_VAR_aws_region |
⚠️
write:orgnão basta para gerir organization Actions secrets — o GitHub exigeadmin:org. Ver stack github precisa de token com admin:org.
Todos vêm do vault ward — ver guia do vault ward. Nunca cole token no chat; atualize com ward edit.
Passos
bash
make shared.github.init # uma vez, por diretório de trabalho
make shared.github.plan
make shared.github.apply
O CI também aplica este stack no merge para main, quando o PR toca src/shared/github/**.
O que o stack gere hoje
| Recurso | Nome | Visibilidade | Para quê |
|---|---|---|---|
| secret | AWS_ACCESS_KEY_ID |
all |
o CI autentica e assume a TerraformRole (que detém ecr:*) |
| secret | AWS_SECRET_ACCESS_KEY |
all |
idem |
| variável | DOCKER_REGISTRY |
all |
<account_id>.dkr.ecr.<region>.amazonaws.com — alimenta o IMAGE_NAME de todo workflow |
| variável | AWS_REGION |
all |
consumida por aws-actions/configure-aws-credentials |
DOCKER_REGISTRYdefineIMAGE_NAME(${DOCKER_REGISTRY}/${app_name}) em todos os workflows de pipeline. Mudar essa variável move o push e o deploy de todos os apps de uma vez — as imagens precisam já estar espelhadas no destino antes de aplicar.
Escopo: organização vs. repositório
| Use secret de organização para | Use secret de repositório para |
|---|---|
| credencial de infraestrutura, compartilhada por todos os repos | secret específico de aplicação |
| derivada do estado da infraestrutura | com rotação independente |
Para restringir um secret a repos específicos, troque visibility = "all" por visibility = "selected" mais selected_repository_ids.
Atualizar um valor
ward editno vault que contém a chavemake shared.github.apply
O valor é propagado a todos os repos da organização automaticamente.
Troubleshooting
403 You must be an org admin or have the actions secrets fine-grained permission
Escopo do PAT. Confira os escopos efetivos do token antes de suspeitar do CI ou do gestor de secret:
bash
curl -I -H "Authorization: token <token>" https://api.github.com/user # veja x-oauth-scopes
Resource already exists
O secret já existe no nível de organização. Importe em vez de recriar:
bash
ward exec -- terraform import github_actions_organization_secret.<nome> <SECRET_NAME>
Secret duplicado no nível de repositório
Depois que o secret existe na organização, remova a cópia por repositório (via UI em Settings → Secrets and variables → Actions, ou no Terraform do próprio repo) — senão o valor do repositório sobrepõe o da organização.