
GitHub App para definir e aplicar políticas de segurança
[!IMPORTANT] O GitHub App Allstar hospedado pela OpenSSF foi descontinuado. O Allstar, subprojeto do OpenSSF Scorecard, continua sendo mantido — você agora deve executá-lo você mesmo, seja como uma GitHub Action ou como um daemon de serviço.
Consulte ossf/allstar#881 para mais detalhes.
Se sua organização dependia do app hospedado, consulte Migrando do app hospedado.
O 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 no nível 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.
O 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 do repositório: Mantenedores de repositórios 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. Observação: esses controles de nível de repositório só funcionam quando a "substituição 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 toma 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 quantos repositórios deseja que o Allstar execute. 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 execute. 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 do total de seus repositórios, ou quiser testar o Allstar em um único repositório antes de habilitá-lo em mais. Desde o lançamento v4.3, globs são suportados para adicionar facilmente vários repositórios com um nome semelhante.
A estratégia Opt Out (recomendada) habilita o Allstar em todos os repositórios e permite que você selecione manualmente os repositórios para optar por não participar 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 quiser optar por não participar apenas de um pequeno número de repositórios ou de um tipo específico (ou seja, público vs. privado) de repositório. Desde o lançamento v4.3, globs são suportados para adicionar facilmente vários repositórios com um nome semelhante.
| Opt Out (Recomendado) optOutStrategy = true | Opt In optOutStrategy = false | |
|---|---|---|
| Comportamento padrão | Todos os repositórios estão habilitados | Nenhum repositório está habilitado |
| Adicionar repositórios manualmente | Adicionar repositórios manualmente desativa o Allstar nesses repositórios | Adicionar repositórios manualmente habilita 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á habilitado nos repositórios listados (optOutRepos: esta configuração será ignorada) |
| Substituição 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 configurado 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. |
O Allstar atua na sua organização como um GitHub App: você cria o app e executa o processo que se autentica como ele. A configuração, portanto, consiste em duas etapas comuns a todas as implantações — crie o app e crie o repositório de controle — e depois uma escolha de como executá-lo:
| GitHub Action | Daemon de serviço | |
|---|---|---|
| Como é executado | Tarefa agendada no seu repositório .allstar | Processo persistente que você hospeda |
| O que você fornece | Nada além do GitHub | Um servidor ou orquestrador de contêineres |
| Cadência | O que você definir no cron | Contínua, com resultados em 5 a 10 minutos |
| Esforço de configuração | Moderado | Alto |
| Melhor quando | Você quer a opção de menor infraestrutura | Você quer o máximo de controle, ou já executa serviços |
A Action é a opção de menor sobrecarga das duas e é por onde a maioria das organizações deve começar; você pode migrar para um daemon mais tarde sem alterar nenhuma configuração de política.
Um App é uma identidade semelhante a um usuário com um conjunto de permissões na sua organização.
O Allstar precisa de acesso de leitura à maioria das configurações e conteúdos de arquivos para detectar
conformidade, e acesso de escrita a problemas e verificações para registrar problemas e
suportar a ação block.
Siga as Instruções do operador - Crie um GitHub App e registre o ID do App e a chave privada. Ambos os modos de execução precisam deles.
.allstarO Allstar lê sua configuração de um repositório chamado .allstar na sua
organização.
A maneira mais rápida de criar um é a partir do exemplo:
.allstarIsso habilita todas as políticas atuais do Allstar em todos os repositórios
usando a estratégia Opt Out, com a ação issue. Você pode alterar qualquer coisa depois.
Para controle granular desde o início — escolhendo a estratégia Opt In ou Opt Out e escrevendo arquivos de política individuais você mesmo — siga as instruções de instalação manual em vez disso.
Esta opção executa o Allstar como uma tarefa agendada usando GitHub Actions, portanto não há infraestrutura para operar além do próprio GitHub.
Siga as instruções de instalação do GitHub
Actions para configurar uma Action recorrente no seu
repositório .allstar, protegê-la e monitorar seus resultados.
Esta opção executa o Allstar como um processo persistente, que detecta e resolve violações continuamente em vez de em um cronograma.
Consulte as Instruções do operador para executar o processo, gerenciar segredos, dimensionamento e as variáveis de ambiente disponíveis.
Se sua organização usava o app hospedado pela OpenSSF, sua configuração é
mantida como está. O repositório de controle .allstar, o allstar.yaml e cada
arquivo de política continuam funcionando sem alterações; o que você está substituindo é apenas o processo
que os lê.
Para migrar:
.allstar existente exatamente como está.allstar-app da sua organização, se ele ainda aparecer em
Configurações -> GitHub Apps.Os problemas registrados anteriormente pelo app hospedado permanecem nos seus repositórios. Sua própria
instância identifica seus problemas pelo mesmo rótulo allstar (ou seu
issueLabel configurado), portanto ela os adotará e fechará conforme as violações forem resolvidas,
em vez de registrar duplicatas.
Cada política pode ser configurada com uma ação que o Allstar tomará 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 e detalhes da execução da política são registrados. Os logs atualmente são
visíveis apenas para o operador do app; planos para expô-los estão em discussão.issue: Esta ação cria um problema no 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 é notificado 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á fechado automaticamente pelo Allstar em 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. As 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 e-mail ao(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 problema:
issueLabel está disponível no nível da organização e do repositório. Definir isso
substituirá o rótulo padrão allstar usado pelo Allstar para identificar seus
problemas.
issueRepo está disponível no nível da organização. Definir isso forçará todos os
problemas criados na organização a serem criados no repositório especificado.
Semelhante à configuração de habilitação do app Allstar, todas as políticas são habilitadas e
configuradas com um arquivo yaml no repositório .allstar da organização,
ou no diretório .allstar do repositório. Como no app, as políticas são opt-in
por padrão; além disso, a ação padrão log não produzirá resultados visíveis. Uma
maneira simples de habilitar 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 Branch
O arquivo de configuração desta política é chamado `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 branch verifica se as [configurações de proteção de branch](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 issue
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 branch para estar em conformidade com a configuração da política especificada.
### Artefatos Binários
O arquivo de configuração desta política é chamado `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 alcançar a conformidade. Como os resultados
do scorecard podem ser detalhados, talvez seja 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 é chamado `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 é chamado `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 de 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 é chamado `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 ele não está vazio. O issue 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 você a enviar uma política de segurança para o seu repositório.
### Workflow Perigoso
O arquivo de configuração desta política é chamado `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 **todas** as branches, veja a justificativa [aqui](https://github.com/ossf/allstar/issues/569).
Esta política verifica os arquivos de configuração do GitHub Actions
(`.github/workflows`), procurando por 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 obter mais informações sobre esta verificação.
### Verificação Genérica do Scorecard
O arquivo de configuração desta política é chamado `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 do scorecard listada na configuração `checks`. Todas as
verificações executadas devem ter uma pontuação igual ou superior à configuração `threshold`. Consulte a
[documentação do OpenSSF
Scorecard](https://github.com/ossf/scorecard/blob/main/docs/checks.md)
para obter mais informações sobre cada verificação.
#### Upload de SARIF
A política do Scorecard pode opcionalmente enviar resultados como
[SARIF](https://sarifweb.azurewebsites.net/) para a aba
**Security > Code Scanning** de cada repositório. Isso dá aos administradores da organização
visibilidade sobre os achados do Scorecard junto com outras ferramentas de segurança (CodeQL,
Dependabot, etc.) sem exigir configuração de workflow por repositório.
Para habilitar o upload de 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). Esta
não está entre as permissões que o Allstar normalmente precisa, então adicione-a ao seu app
antes de habilitar o upload de SARIF.O upload de SARIF funciona com ambas as formas de executar o Allstar: como um daemon de serviço ou como uma GitHub Action.
O arquivo de configuração desta política é chamado actions.yaml, e as definições de configuração
estão
aqui.
Esta política verifica os arquivos de configuração de fluxo de trabalho do GitHub Actions
(.github/workflows) (e execuções de fluxo de trabalho em alguns casos) em cada repositório para garantir
que estejam em conformidade com as regras (por exemplo, exigir, negar) definidas na
configuração de nível organizacional para a política.
O arquivo de configuração desta política é chamado 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 atribuído como Administrador. Ela permite que você configure 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 na sua organização.
Por padrão, os arquivos de configuração de nível organizacional, como o arquivo allstar.yaml
acima, devem estar em um repositório .allstar. Se este repositório não
existir, então o diretório allstar do repositório .github é usado como uma
localização secundária. Para esclarecer, para allstar.yaml:
| Precedência | Repositório | Caminho |
|---|---|---|
| Primária | .allstar | allstar.yaml |
| Secundária | .github | allstar/allstar.yaml |
Isso também se aplica aos arquivos de configuração de nível organizacional das políticas individuais, conforme descrito abaixo.
O Allstar também procurará configurações de políticas de 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 a "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:
| Repositório | Caminho | Condição |
|---|---|---|
myapp | .allstar/branch_protection.yaml | Quando a "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. |
Para arquivos de configuração de política e do Allstar de nível organizacional, você pode especificar o campo
baseConfig para indicar outro repositório que contenha a configuração base do
Allstar. Isso é melhor explicado com um exemplo.
Suponha que você tenha várias organizações no GitHub, mas queira 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.
You also have a satellite GitHub organization named "acme-sat". You want to
re-use the main config, but apply some changes on top by disabling Allstar on
certain repositories. The repository `acme-sat/.allstar` contains
`allstar.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 por cima da configuração base. O
método pelo qual isso é aplicado é descrito como um JSON Merge
Patch. O baseConfig deve ser
um <org>/<repositório> do GitHub.
Consulte CONTRIBUTING.md