O que é autorização? Decidindo o que você pode fazer
A autorização é o portão depois da porta de entrada: uma vez que um sistema sabe quem você é, ele decide o que você tem permissão para fazer.
A autorização é a aplicação de permissões. Depois que a autenticação confirma uma identidade, a autorização verifica se essa identidade pode realizar uma ação específica em um recurso específico. Em CI/CD, a autorização é o que impede um pipeline de testes de fazer deploy em produção ou um token somente leitura de fazer push de código.
Autenticação versus autorização
A autenticação responde "quem é você"; a autorização responde "o que você pode fazer". Você pode estar autenticado e ainda assim ter uma ação negada. Bons sistemas mantêm essas preocupações separadas e verificam a autorização em toda operação sensível, não apenas no login.
Como as permissões são modeladas
- Baseado em papéis: permissões associadas a papéis, papéis atribuídos a identidades.
- Baseado em atributos: regras avaliadas em relação a atributos do usuário, do recurso e do contexto.
- Listas de controle de acesso: listas explícitas por recurso de quem pode fazer o quê.
Escopos e tokens
Em sistemas automatizados, a autorização é frequentemente incorporada ao próprio token por meio de escopos. Um token com escopo somente leitura não pode escrever, mesmo que vaze. Escopos estreitos são uma defesa primária em CI, porque um token de pipeline tende a rodar sem supervisão e com amplo alcance.
Privilégio mínimo em pipelines
O padrão mais seguro é conceder a um job exatamente as permissões de que ele precisa e nada mais. Um workflow que só roda testes não deveria ter credenciais de deploy. O GitHub Actions, por exemplo, permite definir as permissões do GITHUB_TOKEN por job, para que um step não possa fazer mais do que sua tarefa exige.
Quando a autorização falha
Tokens amplos demais, verificações ausentes em endpoints internos e escalonamento de privilégios por meio de papéis mal configurados são falhas comuns. Em CI, o erro clássico é uma única credencial poderosa reutilizada em todos os lugares, de modo que um único vazamento concede tudo aos atacantes.
Autorização e o runner
Um runner herda tudo o que um job está autorizado a fazer. Delimitar bem as permissões do job limita o raio de impacto se um runner for comprometido. Runners efêmeros e isolados (como os runners gerenciados da Latchkey) contêm ainda mais esse raio ao não carregar o contexto de autorização entre jobs.
Principais conclusões
- A autorização governa o que uma identidade autenticada tem permissão para fazer.
- Modelos baseados em papéis, baseados em atributos e ACL são as formas comuns de expressá-la.
- O escopo de privilégio mínimo em tokens de pipeline limita o dano causado por um vazamento.