Allstar 是一款 GitHub 应用程序,可持续监控 GitHub 组织或存储库是否遵守安全最佳实践。如果 Allstar 检测到违反安全策略的行为,它会创建一个问题来警告存储库或组织所有者。对于某些安全策略,Allstar 还可以自动更改导致违规的项目设置,将其恢复到预期状态。
Allstar 的目标是让您对影响项目安全的文件和设置进行精细控制。您可以选择在组织和存储库级别监视哪些安全策略,以及如何处理策略违规。您还可以制定或贡献新政策。
Allstar 是作为 OpenSSF Scorecard 项目的一部分开发的。
如果您遇到 Allstar 创建的不需要的问题,请按照以下说明选择退出。
Allstar 具有高度可配置性。控制主要分为三个级别:
这些配置在组织的.allstar
存储库中完成。
存储库级别:使用 Allstar 的组织中的存储库维护者可以选择将其存储库加入或退出组织级别的强制执行。注意:这些存储库级别控件仅在组织级别设置中允许“存储库覆盖”时才起作用。这些配置是在存储库的.allstar
目录中完成的。
策略级别:管理员或维护人员可以选择在特定存储库上启用哪些策略以及在违反策略时 Allstar 采取哪些操作。这些配置是在组织的.allstar
存储库(管理员)或存储库的.allstar
目录(维护者)中的策略 yaml 文件中完成的。
在组织级别安装 Allstar 之前,您应该大约决定希望 Allstar 在多少个存储库上运行。这将帮助您在选择加入和选择退出策略之间进行选择。
选择加入策略允许您手动添加您希望 Allstar 运行的存储库。如果您不指定任何存储库,Allstar 尽管已安装,但也不会运行。如果您只想对一小部分存储库实施策略,或者想在单个存储库上尝试 Allstar,然后再在更多存储库上启用,请选择选择加入策略。从 v4.3 版本开始,支持 glob 来轻松添加多个具有相似名称的存储库。
选择退出策略(推荐)在所有存储库上启用 Allstar,并允许您手动选择存储库以选择退出 Allstar 强制执行。您还可以选择退出所有公共存储库或所有私人存储库。如果您想要在组织中的所有存储库上运行 Allstar,或者只想选择退出少量存储库或特定类型(即公共与私有)存储库,请选择此选项。从 v4.3 版本开始,支持 glob 来轻松添加多个具有相似名称的存储库。
选择退出(推荐) optOutStrategy = true | 选择加入 optOutStrategy = false | |
---|---|---|
默认行为 | 所有存储库均已启用 | 没有启用任何存储库 |
手动添加存储库 | 手动添加存储库会在这些存储库上禁用 Allstar | 手动添加存储库可在这些存储库上启用 Allstar |
附加配置 | optOutRepos:Allstar 将在列出的存储库上被禁用 optOutPrivateRepos:如果为 true,Allstar 将在所有私有存储库上禁用 optOutPublicRepos:如果为 true,Allstar 将在所有公共存储库上被禁用 (optInRepos:该设置将被忽略) | optInRepos:Allstar 将在列出的存储库上启用 (optOutRepos:该设置将被忽略) |
回购覆盖 | 如果为真:存储库可以使用自己的存储库文件中的设置选择退出其组织的 Allstar 强制执行。应用于该存储库的组织级别选择加入设置将被忽略。 如果为 false:存储库无法选择退出在组织级别配置的 Allstar 强制执行。 | 如果为 true:即使未在组织级别为存储库进行配置,存储库也可以选择加入其组织的 Allstar 强制执行。应用于该存储库的组织级别选择退出设置将被忽略。 如果为 false:如果未在组织级别配置,则 Repos 无法选择 Allstar 强制执行。 |
快速启动和手动安装选项都涉及安装 Allstar 应用程序。您可以查看所请求的权限。该应用程序要求对大多数设置和文件内容进行读取访问,以检测安全合规性。它请求对问题的写访问权限并进行检查,以便它可以创建问题并允许block
操作。
此安装选项将在您组织中的所有存储库上使用选择退出策略启用 Allstar。所有当前策略都将启用,Allstar 将通过提交问题来提醒您违反策略的情况。这是开始使用 Allstar 的最快、最简单的方法,您以后仍然可以更改任何配置。
努力:非常容易
步骤:
.allstar
就是这样!所有当前的 Allstar 策略现已在您的所有存储库上启用。如果违反政策,Allstar 将产生问题。
要更改任何配置,请参阅手动安装说明。
此安装选项将引导您根据选择加入或选择退出策略创建配置文件。此选项从一开始就提供对配置的更精细的控制。
努力程度:中等
步骤:
每个策略都可以配置 Allstar 在检测到存储库不合规时将采取的操作。
log
:这是默认操作,实际上对所有操作都会发生。记录所有策略运行结果和详细信息。目前日志仅对应用程序操作员可见,公开这些日志的计划正在讨论中。issue
:此操作会创建 GitHub 问题。每个策略仅创建一个问题,文本描述了策略违规的详细信息。如果问题已公开,则每 24 小时就会发出一条评论,而无需更新(当前用户不可配置)。如果政策结果发生变化,则会对该问题留下新的评论并链接到问题正文中。一旦违规问题得到解决,Allstar 将在 5-10 分钟内自动关闭该问题。fix
:此操作是特定于策略的。该策略将对 GitHub 设置进行更改以纠正策略违规行为。并非所有政策都能支持这一点(见下文)。已提议但尚未实施的行动。将来会添加定义。
block
:Allstar 可以设置 GitHub 状态检查,并在检查失败时阻止存储库中的任何 PR 被合并。email
:Allstar 将向存储库管理员发送一封电子邮件。rpc
:Allstar 会将 rpc 发送到某个组织特定的系统。有两个设置可用于配置问题操作:
issueLabel
在组织和存储库级别可用。设置它将覆盖 Allstar 用于识别其问题的默认allstar
标签。
issueRepo
在组织级别可用。设置它将强制在组织中创建的所有问题都在指定的存储库中创建。
与 Allstar 应用程序启用配置类似,所有策略均使用组织的.allstar
存储库或存储库的.allstar
目录中的 yaml 文件启用和配置。与应用程序一样,默认情况下策略是选择加入的,默认log
操作也不会产生可见的结果。启用所有策略的一个简单方法是为每个策略创建一个 yaml 文件,其中包含以下内容:
optConfig:
optOutStrategy: true
action: issue
下面详细介绍了每个策略的fix
操作如何发挥作用。如果下面省略,则fix
操作不适用。
该策略的配置文件名为branch_protection.yaml
,配置定义位于此处。
分支保护策略检查 GitHub 的分支保护设置是否根据指定的配置正确设置。问题文本将描述哪个设置不正确。请参阅 GitHub 文档以更正设置。
fix
操作将更改分支保护设置以符合指定的策略配置。
该策略的配置文件名为binary_artifacts.yaml
,配置定义位于此处。
该政策纳入了记分卡的检查。从存储库中删除二进制工件以实现合规性。由于记分卡结果可能很详细,您可能需要运行记分卡本身才能查看所有详细信息。
该策略的配置文件名为codeowners.yaml
,配置定义位于此处。
此策略检查您的存储库中是否存在CODEOWNERS
文件。
该策略的配置文件名为outside.yaml
,配置定义位于此处。
此策略检查是否有任何外部协作者对存储库具有管理员(默认)或推送(可选)访问权限。只有组织成员才应具有此访问权限,否则不受信任的成员可以更改管理级别设置并提交恶意代码。
该策略的配置文件名为security.yaml
,配置定义位于此处。
此策略检查存储库在SECURITY.md
中是否有安全策略文件并且该文件不为空。创建的问题将有一个指向 GitHub 选项卡的链接,可帮助您将安全策略提交到存储库。
该策略的配置文件名为dangerous_workflow.yaml
,配置定义位于此处。
此策略检查 GitHub Actions 工作流配置文件 ( .github/workflows
) 中是否存在与已知危险行为匹配的任何模式。有关此检查的更多信息,请参阅 OpenSSF 记分卡文档。
该策略的配置文件名为scorecard.yaml
,配置定义位于此处。
此策略运行checks
配置中列出的任何记分卡检查。运行的所有检查的分数必须等于或高于threshold
设置。有关每项检查的更多信息,请参阅 OpenSSF 记分卡文档。
该策略的配置文件名为actions.yaml
,配置定义位于此处。
此策略检查每个存储库中的 GitHub Actions 工作流程配置文件 ( .github/workflows
)(以及在某些情况下运行的工作流程),以确保它们符合组织级别配置中定义的规则(例如 require、deny)。政策。
该策略的配置文件名为admin.yaml
,配置定义位于此处。
此策略检查默认情况下所有存储库都必须有指定为管理员的用户或组。它允许您选择配置是否允许用户成为管理员(而不是团队)。
请参阅此存储库作为正在使用的 Allstar 配置的示例。作为组织管理员,请考虑 README.md,其中包含有关如何在组织中使用 Allstar 的一些信息。
默认情况下,组织级配置文件(例如上面的allstar.yaml
文件)应位于.allstar
存储库中。如果此存储库不存在,则.github
存储库allstar
目录将用作辅助位置。澄清一下,对于allstar.yaml
:
优先级 | 存储库 | 小路 |
---|---|---|
基本的 | .allstar | allstar.yaml |
中学 | .github | allstar/allstar.yaml |
对于各个策略的组织级别配置文件也是如此,如下所述。
Allstar 还将在组织的.allstar
存储库(位于与存储库同名的目录下)中查找存储库级别的策略配置。无论“repo override”是否被禁用,都会使用此配置。
例如,Allstar 将按以下顺序查找给定存储库myapp
的策略配置:
存储库 | 小路 | 健康)状况 |
---|---|---|
myapp | .allstar/branch_protection.yaml | 当允许“回购覆盖”时。 |
.allstar | myapp/branch_protection.yaml | 所有的时间。 |
.allstar | branch_protection.yaml | 所有的时间。 |
.github | allstar/myapp/branch_protection.yaml | 如果.allstar 存储库不存在。 |
.github | allstar/branch_protection.yaml | 如果.allstar 存储库不存在。 |
对于组织级别的 Allstar 和策略配置文件,您可以指定字段baseConfig
以指定包含基本 Allstar 配置的另一个存储库。最好用一个例子来解释这一点。
假设您有多个 GitHub 组织,但想要维护单个 Allstar 配置。您的主要组织是“acme”,存储库acme/.allstar
包含allstar.yaml
:
optConfig :
optOutStrategy : true
issueLabel : allstar-acme
issueFooter : Issue created by Acme security team.
您还有一个名为“acme-sat”的卫星 GitHub 组织。您想要重用主配置,但通过在某些存储库上禁用 Allstar 来应用一些更改。存储库acme-sat/.allstar
包含allstar.yaml
:
baseConfig : acme/.allstar
optConfig :
optOutRepos :
- acmesat-one
- acmesat-two
这将使用acme/.allstar
中的所有配置作为基本配置,然后将当前文件中的任何更改应用到基本配置之上。所应用的方法被描述为 JSON 合并补丁。 baseConfig
必须是 GitHub <org>/<repository>
。
请参阅 CONTRIBUTING.md