Secrets e variáveis de organização no GitHub

TLDR: O stack src/shared/github gere, por Terraform, os secrets e variáveis de nível de organização que todo repo da ibft-corp herda — 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:org não basta para gerir organization Actions secrets — o GitHub exige admin: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_REGISTRY define IMAGE_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

  1. ward edit no vault que contém a chave
  2. make 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.

Referências