Guardar AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY nos secrets do GitHub resolve o deploy, mas cria uma credencial permanente fora da AWS. Depois vêm a rotação, os consumidores esquecidos e a dúvida saudável sobre qual job ainda usa a chave antiga.
OIDC troca esse arranjo por uma credencial temporária: o job recebe um token do GitHub, apresenta esse token ao AWS STS e assume um IAM role. Não há access key de longa duração no repositório, e a AWS só aceita o token quando aud e sub correspondem ao que a trust policy autorizou.
O resultado que vamos montar é um pipeline com:
- provedor OIDC do GitHub cadastrado na conta AWS;
- IAM role restrito ao repositório e ao ambiente de produção;
- permissions boundary limitando o teto desse role;
aws-actions/configure-aws-credentials@v6.2.3no workflow;- testes que separam falha de autenticação de falha de autorização.
Por que a chave longa é um risco operacional
Uma access key de IAM user é uma credencial de longa duração formada pelo ID e pelo secret. O secret aparece uma única vez na criação. Se ele for perdido, não há botão para revelá-lo de novo: é preciso excluir a chave e criar outra.
Cada IAM user pode ter no máximo duas access keys. Por isso, a rotação costuma seguir esta sequência:
- criar a segunda chave;
- atualizar todos os consumidores;
- verificar que ninguém usa a primeira;
- excluir a primeira.
Se um workflow, script ou secret de outro repositório ficar para trás no passo 3, a remoção vira indisponibilidade. Se a chave vazar, ela continua válida até ser revogada.
A própria documentação de boas práticas do IAM recomenda credenciais temporárias e roles para workloads. Com OIDC, a credencial permanente deixa de existir no GitHub: cada job obtém uma sessão temporária para aquele deploy.
Pré-requisitos e nomes usados
Você precisa de permissão administrativa suficiente para criar um OIDC provider, policies e um IAM role. Nos exemplos, substitua estes valores pelos seus:
- conta AWS:
111122223333; - organização:
octo-org; - repositório:
octo-repo; - bucket:
meu-site-prod; - distribuição CloudFront:
E123EXAMPLE; - região:
us-east-1.
O role será chamado gha-deploy-prod. Evite o nome GitHubActions, conforme a observação mantida pelo próprio projeto da action. Um nome específico também ajuda quando o ARN aparece no STS.
A combinação usada aqui é o emissor https://token.actions.githubusercontent.com, audience sts.amazonaws.com e