
GitHub App para definir e aplicar políticas de segurança
Allstar é um GitHub App que monitora continuamente organizações ou repositórios do GitHub quanto à adesão a práticas recomendadas de segurança. Se o Allstar detectar uma violação de política de segurança, ele cria um problema para alertar o proprietário do repositório ou da organização. Para algumas políticas de segurança, o Allstar também pode alterar automaticamente a configuração do projeto que causou a violação, revertendo-a para o estado esperado.
O objetivo do Allstar é dar a você controle finamente ajustado sobre os arquivos e configurações que afetam a segurança dos seus projetos. Você pode escolher quais políticas de segurança monitorar tanto no nível da organização quanto do repositório, e como lidar com violações de política. Você também pode desenvolver ou contribuir com novas políticas.
O Allstar é desenvolvido como parte do projeto OpenSSF Scorecard.
Se você está recebendo problemas indesejados criados pelo Allstar, siga estas instruções para optar por não participar.
Allstar é altamente configurável. Existem três níveis principais de controles:
Essas configurações são feitas no repositório .allstar da organização.
Nível de repositório: Os mantenedores de repositório em uma organização que usa
o Allstar podem optar por incluir ou excluir seu repositório das aplicações
de nível de organização. Nota: esses controles de nível de repositório só funcionam quando a "sobrescrita de repositório"
é permitida nas configurações de nível de organização. Essas configurações são
feitas no diretório .allstar do repositório.
Nível de política: Administradores ou mantenedores podem escolher quais políticas
estão habilitadas em repositórios específicos e quais ações o Allstar executa quando uma política
é violada. Essas configurações são feitas em um arquivo yaml de política no
repositório .allstar da organização (administradores) ou no diretório
.allstar do repositório (mantenedores).
Antes de instalar o Allstar no nível da organização, você deve decidir aproximadamente em quantos repositórios deseja que o Allstar seja executado. Isso ajudará você a escolher entre as estratégias de Opt-In e Opt-Out.
A estratégia Opt In permite que você adicione manualmente os repositórios nos quais deseja que o Allstar seja executado. Se você não especificar nenhum repositório, o Allstar não será executado, apesar de estar instalado. Escolha a estratégia Opt In se quiser aplicar políticas em apenas um pequeno número de seus repositórios totais, ou quiser experimentar o Allstar em um único repositório antes de ativá-lo em mais. Desde o lançamento v4.3, globs são suportados para facilitar a adição de vários repositórios com um nome semelhante.
A estratégia Opt Out (recomendada) ativa o Allstar em todos os repositórios e permite que você selecione manualmente os repositórios para excluir das aplicações do Allstar. Você também pode optar por excluir todos os repositórios públicos, ou todos os repositórios privados. Escolha esta opção se quiser executar o Allstar em todos os repositórios de uma organização, ou se quiser excluir apenas um pequeno número de repositórios ou um tipo específico (por exemplo, público vs. privado) de repositório. Desde o lançamento v4.3, globs são suportados para facilitar a adição de vários repositórios com um nome semelhante.
Tanto a opção Instalação Rápida quanto a Instalação Manual envolvem a instalação do aplicativo Allstar na sua Organização do GitHub. O aplicativo Allstar é operado pela OpenSSF e é uma boa escolha para a maioria dos repositórios de código aberto. Você pode revisar as permissões solicitadas. O aplicativo solicita acesso de leitura à maioria das configurações e conteúdos de arquivos para detectar conformidade de segurança. Ele solicita acesso de escrita a problemas e verificações para que possa criar problemas e permitir a ação block.
Se você não quiser usar o aplicativo Allstar operado pela OpenSSF, pode auto-hospedar o Allstar, criando seu próprio aplicativo Allstar. Isso fornece controle direto do aplicativo, com a contrapartida de precisar configurar, proteger, monitorar e manter o aplicativo.
A instalação Rápida ou Manual é recomendada, a menos que você tenha restrições específicas de segurança ou conformidade que impeçam o uso do aplicativo Allstar gerenciado pela OpenSSF.
Esta opção de instalação ativará o Allstar usando a estratégia Opt Out em todos os repositórios da sua organização. Todas as políticas atuais serão ativadas, e o Allstar alertará você sobre violações de política abrindo um problema. Esta é a maneira mais rápida e fácil de começar a usar o Allstar, e você ainda pode alterar quaisquer configurações depois.
Esforço: muito fácil
Passos:
.allstarÉ isso! Todas as políticas atuais do Allstar estão agora ativadas em todos os seus repositórios. O Allstar criará um problema se uma política for violada.
Para alterar quaisquer configurações, consulte as instruções de instalação manual.
Esta opção de instalação irá guiá-lo na criação de arquivos de configuração de acordo com a estratégia Opt In ou Opt Out. Esta opção fornece controle mais granular sobre as configurações desde o início.
Esforço: moderado
Passos:
Auto-hospede apenas se for necessário! O aplicativo Allstar requer configuração, proteção e manutenção contínua. Quando uma nova versão do Allstar for lançada, você precisará atualizar sua solução auto-hospedada.
Duas abordagens de auto-hospedagem são descritas:
Esta opção de instalação executa o Allstar como um trabalho agendado usando GitHub Actions.
Esforço: alto
Siga as instruções de instalação do GitHub Actions para:
.allstar de nível de organização conforme descrito em
instalação rápida ou
instalação manual. (Ignore os passos para instalar
o aplicativo Allstar gerenciado pela OpenSSF na sua organização.).allstar para executar o Allstar em modo batch.Esta opção de instalação executa o Allstar como um processo persistente.
Esforço: muito alto
Consulte Instruções para operador para mais informações, incluindo criação de um aplicativo Allstar, gerenciamento de segredos e variáveis de ambiente disponíveis.
Cada política pode ser configurada com uma ação que o Allstar executará quando detectar que um repositório está fora de conformidade.
log: Esta é a ação padrão, e na verdade ocorre para todas
as ações. Todos os resultados de execução de política e detalhes são registrados. Os logs atualmente
são visíveis apenas para o operador do aplicativo; planos para expô-los estão em discussão.issue: Esta ação cria um problema do GitHub. Apenas um problema é criado por
política, e o texto descreve os detalhes da violação da política. Se o
problema já estiver aberto, ele é cutucado com um comentário a cada 24 horas sem atualizações
(atualmente não configurável pelo usuário). Se o resultado da política mudar, um novo comentário
será deixado no problema e vinculado no corpo do problema. Uma vez que a violação seja
resolvida, o problema será automaticamente fechado pelo Allstar dentro de 5 a 10 minutos.fix: Esta ação é específica da política. A política fará as alterações nas
configurações do GitHub para corrigir a violação da política. Nem todas as políticas poderão
suportar isso (veja abaixo).Ações propostas, mas ainda não implementadas. Definições serão adicionadas no futuro.
block: O Allstar pode definir uma Verificação de Status do
GitHub
e bloquear qualquer PR no repositório de ser mesclado se a verificação falhar.email: O Allstar enviaria um email para o(s) administrador(es) do repositório.rpc: O Allstar enviaria um rpc para algum sistema específico da organização.Duas configurações estão disponíveis para configurar a ação de issue:
issueLabel está disponível no nível da organização e do repositório. Configurá-lo
substituirá o rótulo padrão allstar usado pelo Allstar para identificar seus
problemas.
issueRepo está disponível no nível da organização. Configurá-lo forçará todos os
problemas criados na organização a serem criados no repositório especificado.
Semelhante à configuração de ativação do aplicativo Allstar, todas as políticas são ativadas e
configuradas com um arquivo yaml no repositório .allstar da organização
ou no diretório .allstar do repositório. Assim como no aplicativo, as políticas são opt-in
por padrão, e a ação padrão log não produzirá resultados visíveis. Uma
maneira simples de ativar todas as políticas é criar um arquivo yaml para cada política com o
conteúdo:```yaml
optConfig:
optOutStrategy: true
action: issue
Os detalhes de como a ação `fix` funciona para cada política são descritos abaixo. Se omitido abaixo, a ação `fix` não é aplicável.
### Proteção de Ramo
O arquivo de configuração desta política é denominado `branch_protection.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/branch#OrgConfig).
A política de proteção de ramo verifica se as [configurações de proteção de ramo](https://docs.github.com/en/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches) do GitHub estão configuradas corretamente de acordo com a configuração especificada. O texto do problema descreverá qual configuração está incorreta. Consulte a [documentação do GitHub](https://docs.github.com/en/github/administering-a-repository/defining-the-mergeability-of-pull-requests/about-protected-branches) para corrigir as configurações.
A ação `fix` alterará as configurações de proteção de ramo para estar em conformidade com a configuração de política especificada.
### Artefatos Binários
O arquivo de configuração desta política é denominado `binary_artifacts.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/binary#OrgConfig).
Esta política incorpora a [verificação do scorecard](https://github.com/ossf/scorecard/#scorecard-checks). Remova o artefato binário do repositório para obter conformidade. Como os resultados do scorecard podem ser verbosos, pode ser necessário executar o [próprio scorecard](https://github.com/ossf/scorecard) para ver todas as informações detalhadas.
### CODEOWNERS
O arquivo de configuração desta política é denominado `codeowners.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/codeowners#OrgConfig).
Esta política verifica a presença de um arquivo [`CODEOWNERS`](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners) nos seus repositórios.
### Colaboradores Externos
O arquivo de configuração desta política é denominado `outside.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/outside#OrgConfig).
Esta política verifica se algum [Colaborador Externo](https://docs.github.com/en/organizations/managing-access-to-your-organizations-repositories/adding-outside-collaborators-to-repositories-in-your-organization) tem acesso de administrador (padrão) ou push (opcional) ao repositório. Apenas membros da organização devem ter esse acesso, caso contrário, membros não confiáveis podem alterar configurações de nível de administrador e enviar código malicioso.
### SECURITY.md
O arquivo de configuração desta política é denominado `security.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/security#OrgConfig).
Esta política verifica se o repositório possui um arquivo de política de segurança em `SECURITY.md` e se não está vazio. O problema criado terá um link para a [aba do GitHub](https://docs.github.com/en/code-security/getting-started/adding-a-security-policy-to-your-repository) que ajuda a confirmar uma política de segurança no seu repositório.
### Workflow Perigoso
O arquivo de configuração desta política é denominado `dangerous_workflow.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/workflow#OrgConfig).
Esta política será executada em **todos** os ramos, veja a justificativa [aqui](https://github.com/ossf/allstar/issues/569).
Esta política verifica os arquivos de configuração do GitHub Actions Workflows (`.github/workflows`), em busca de padrões que correspondam a comportamentos perigosos conhecidos. Consulte a [documentação do OpenSSF Scorecard](https://github.com/ossf/scorecard/blob/main/docs/checks.md#dangerous-workflow) para mais informações sobre esta verificação.
### Verificação Genérica de Scorecard
O arquivo de configuração desta política é denominado `scorecard.yaml`, e as [definições de configuração estão aqui](https://pkg.go.dev/github.com/ossf/allstar/pkg/policies/scorecard#OrgConfig).
Esta política executa qualquer verificação de scorecard listada na configuração `checks`. Todas as verificações executadas devem ter uma pontuação igual ou acima da configuração `threshold`. Consulte a [documentação do OpenSSF Scorecard](https://github.com/ossf/scorecard/blob/main/docs/checks.md) para mais informações sobre cada verificação.
#### Upload SARIF
A política de Scorecard pode opcionalmente fazer upload dos resultados como [SARIF](https://sarifweb.azurewebsites.net/) para a aba **Segurança > Varredura de Código** de cada repositório. Isso dá aos administradores da organização visibilidade sobre as descobertas do Scorecard juntamente com outras ferramentas de segurança (CodeQL, Dependabot, etc.) sem exigir configuração de workflow por repositório.
Para ativar o upload SARIF, adicione o campo `upload` ao seu `scorecard.yaml`:```yaml
optConfig:
optOutStrategy: true
action: issue
checks:
- Binary-Artifacts
- Signed-Releases
threshold: 8
upload:
sarif: true
Requisitos:
security_events).
Operadores auto-hospedados precisam adicionar esta permissão ao seu GitHub App. O
App Allstar público operado pela OpenSSF ainda não inclui esta permissão.O envio de SARIF funciona com ambos os modos de implantação auto-hospedados: executando como um daemon de serviço ou como uma GitHub Action.
O arquivo de configuração desta política é nomeado actions.yaml, e as definições de configuração estão
aqui.
Esta política verifica os arquivos de configuração dos workflows do GitHub Actions
(.github/workflows) (e execuções de workflow em alguns casos) em cada repositório para garantir
que estejam em conformidade com as regras (ex.: exigir, negar) definidas na
configuração de nível de organização para a política.
O arquivo de configuração desta política é nomeado admin.yaml, e as definições de configuração estão
aqui.
Esta política verifica que, por padrão, todos os repositórios devem ter um usuário ou grupo designado como Administrador. Permite configurar opcionalmente se usuários podem ser administradores (em vez de equipes).
Consulte este repositório como um exemplo do uso da configuração do Allstar. Como administrador da organização, considere um README.md com algumas informações sobre como o Allstar está sendo usado em sua organização.
Por padrão, os arquivos de configuração em nível de organização, como o allstar.yaml acima,
são esperados em um repositório .allstar. Se este repositório não existir,
o diretório allstar do repositório .github é usado como localização secundária. Para esclarecer, para allstar.yaml:
| Precedência | Repositório | Caminho |
|---|---|---|
| Primário | .allstar | allstar.yaml |
| Secundário | .github | allstar/allstar.yaml |
Isso também é verdadeiro para os arquivos de configuração em nível de organização das políticas individuais, conforme descrito abaixo.
O Allstar também procurará configurações de política em nível de repositório no
repositório .allstar da organização, sob o diretório com o mesmo nome do
repositório. Esta configuração é usada independentemente de "substituição de repositório"
estar desabilitada.
Por exemplo, o Allstar consultará a configuração de política para um determinado repositório
myapp na seguinte ordem:
Para arquivos de configuração de política e Allstar em nível de organização, você pode especificar o campo
baseConfig para indicar outro repositório que contém a configuração base do Allstar.
Isto é melhor explicado com um exemplo.
Suponha que você tenha várias organizações no GitHub, mas deseje manter uma única
configuração do Allstar. Sua organização principal é "acme", e o repositório
acme/.allstar contém allstar.yaml:```yaml
optConfig:
optOutStrategy: true
issueLabel: allstar-acme
issueFooter: Issue created by Acme security team.
Você também tem uma organização satélite no GitHub chamada "acme-sat". Você deseja reutilizar a configuração principal, mas aplicar algumas alterações adicionais desativando o Allstar em alguns repositórios. O repositório `acme-sat/.allstar` contém `allstar.yaml`:
```yaml```yaml
baseConfig: acme/.allstar
optConfig:
optOutRepos:
- acmesat-one
- acmesat-two
Isto usará toda a configuração de acme/.allstar como configuração base, mas depois aplicará quaisquer alterações no arquivo atual sobre a configuração base. O método pelo qual isto é aplicado é descrito como um JSON Merge Patch. O baseConfig deve ser um GitHub <org>/<repository>.
Veja CONTRIBUTING.md
| Opt Out (Recomendado) optOutStrategy = true | Opt In optOutStrategy = false |
|---|
| Comportamento padrão | Todos os repositórios estão ativados | Nenhum repositório está ativado |
| Adicionar repositórios manualmente | Adicionar repositórios manualmente desativa o Allstar nesses repositórios | Adicionar repositórios manualmente ativa o Allstar nesses repositórios |
| Configurações adicionais | optOutRepos: o Allstar será desativado nos repositórios listados optOutPrivateRepos: se true, o Allstar será desativado em todos os repositórios privados optOutPublicRepos: se true, o Allstar será desativado em todos os repositórios públicos (optInRepos: esta configuração será ignorada) | optInRepos: o Allstar será ativado nos repositórios listados (optOutRepos: esta configuração será ignorada) |
| Sobrescrita de Repositório | Se true: os repositórios podem optar por não participar das aplicações do Allstar da sua organização
usando as configurações no próprio arquivo do repositório. As configurações de opt-in de nível de organização que
se aplicam a esse repositório são ignoradas. Se false: os repositórios não podem optar por não participar das aplicações do Allstar conforme configuradas no nível da organização. | Se true: os repositórios podem optar por participar das aplicações do Allstar da sua organização mesmo
que não estejam configurados para o repositório no nível da organização. As configurações de opt-out de nível de organização
que se aplicam a esse repositório são ignoradas. Se false: os repositórios não podem optar por participar das aplicações do Allstar se não estiverem configurados no nível da organização. |
| Repositório | Caminho | Condição |
|---|
myapp | .allstar/branch_protection.yaml | Quando "substituição de repositório" é permitida. |
.allstar | myapp/branch_protection.yaml | Sempre. |
.allstar | branch_protection.yaml | Sempre. |
.github | allstar/myapp/branch_protection.yaml | Se o repositório .allstar não existir. |
.github | allstar/branch_protection.yaml | Se o repositório .allstar não existir. |