介绍工件认证–现在公开测试版

生成并验证您使用GitHub Actions生成的任何签名证明。

|
| 8分钟

2024年6月25日更新:人工制品认证现已正式提供!立即开始.

企业和开源生态系统越来越需要一种可验证的方式来将软件工件链接回其源代码和构建指令。由于有超过1亿名开发人员在GitHub上进行开发,我们希望确保开发人员拥有必要的工具来帮助保护其软件供应链的完整性。今天,我们很自豪地宣布了人工制品认证的公开测试版,这是一项新功能,将为文化转向期望知道软件的来源。

工件证明允许项目维护人员毫不费力地创建一个防篡改、不可伪造的书面线索,将其软件与创建它的过程链接起来。然后,该元数据的下游消费者可以使用它作为基础,通过策略评估(通过以下工具)进行新的安全性和有效性检查雷戈提示。我们从基于GitHub CLI的验证支持开始,但将在今年晚些时候扩展到将这些相同的控件引入Kubernetes生态系统。

工件证明由西格斯托尔,一个用于签署和验证软件工件的开源项目。这意味着开源维护者可以减少其项目受到供应链攻击的风险,并提高更广泛的软件生态系统的安全性——无论维护者在何处托管其代码或构建其工件。让我们跳进去。

流程图表明,如果客户操作工作流在公共存储库中,则可以使用public Good Sigstore进行验证,并存储在公共透明度日志中。如果它位于私有存储库中,则使用GitHub Sigstore进行认证,并且认证存储在私有透明日志中。

轻松的用户体验

安全功能不仅需要强大,还必须易于采用和配置,才能有效。工件证明的设置再简单不过了:您所需要做的就是在GitHub Actions工作流中添加一点YAML,以创建证明和安装GitHub CLI工具验证它。

  1. 启用GitHub操作工作流以写入证明存储:
    权限:id-token:写入证明:写入目录:读取
  2. 指导工作流创建证明,确保在工件生成后放置它:
    -名称:Attest Build Provence使用:操作/认证建造产地@897ed5eab6ed058a474202017ada7f40bfa52940#v1.0.0版本具有:subject-path:“bin/my-artifact.tar.gz”
  3. 构建完成并下载工件后,使用GitHub CLI(2.49.0或更高版本)要进行验证,请提供包含运行操作的存储库的组织的名称:
    gh认证验证my-artifact.tar.gz-o my-organization

还可以很容易地下载认证文档本身以进行存储或脱机验证(例如,在空包环境中),快速查看证书详细信息,或以JSON格式提取验证过的认证内容,以便您可以通过管道将其传输到类似的策略引擎OPA公司.

软件包认证.slsa1import future.keywords.ifapproved_repos:=["https://github.com/sigstore/sigstore-js","https://github.com/github/example",]#故障关闭默认允许:=false#如果存储库位于approved_repos列表中且谓词类型匹配,则允许允许{一些我#检查谓词type是否与所需类型匹配input[i].verificationResult.statement.predicateType==“https://slsa.dev/provance/v1"#尝试安全分配回购变量repo:=输入[i].verificationResult.statement.predicate.buildDefinition.externalParameters.workflow.repositoryrepo==批准的repo[_]}

您可以获取JSON格式的证明,并使用策略进行验证我的文件.zip来自策略中允许的存储库,如下所示:

$gh认证验证-R github/example--格式化json myfile.zip |\opa eval—标准输入-f原始\-d policy.rego“data.attestation.slsa1.allow==true”真的

我可以证明我构建中的其他东西吗,比如SBOM?

如果您有SBOM公司作为构建的一部分生成的,可以使用新的证明-证明行动将其与最终工件关联。您只需提供该工件的路径,操作将负责将其包装在一个in-toto证明谓词中,用我们的内部Sigstore实例对其进行签名,并将其发送到我们的证明存储。如果你不要您的构建中已经有一个SBOM,并且想要一种开始的方法anchore/sbom操作提供对容器图像和多种语言生态系统的支持。

要将构建工件与认证的SBOM关联,请执行以下步骤:

  1. 首先(就像来源一样),您需要为您的工作流授予认证存储的写入权限:
    权限:id-token:写入证明:写入目录:读取
  2. 确保您实际拥有一个符合您特定需求的SBOM。下面是一个使用Anchore的Syft要扫描生成目录,请执行以下操作:
    -用途:锚具/sbom-action@v0具有:路径:/建造/格式:'spdx-json'输出文件:'sbom.spdx.json'
  3. 最后,使用authest-sbom操作将生成的sbom文件内容包装在一个in-toto sbom谓词中,对其进行签名,将其与构建的工件关联,并将其发送到认证存储:
    -使用:操作/认证-sbom@v1具有:subject-path:“bin/my-artifact.tar.gz”sbom-path:'sbom.spdx.json'

它是如何工作的

工件证明有助于降低部署和管理公钥基础设施的复杂性,而不是信任GitHub帐户的安全性。我们通过用暂时的密钥对。公钥附加到与生成系统的工作负载标识,并且私钥永远不会离开进程内存,并且在签名后会立即丢弃。这与其他依赖人类身份或长期密钥的签名方法不同。我们认为证书吊销列表问题太大,无法有效使用,而且软件来源和签名的未来通过工作负载标识。方法如下:

  • 当执行认证操作时,我们的Sigstore客户端请求GitHub操作OIDC令牌与该工作流运行关联。然后,它创建一个密钥对并将公共部分发送给富尔西奥证书颁发机构,以及OIDC令牌。如果是公共存储库,Sigstore Public Good Instance的Fulcio签发证书专用存储库证书由GitHub的Fulcio内部实例颁发,确保没有客户信息离开GitHup。
  • 当接收到令牌时,Fulcio验证令牌的签名,并铸造一个新的短期X.509证书,将公钥绑定到工作流的OIDC标识。
  • Fulcio将证书返回给在GitHub Actions中运行的客户端,该客户端计算主题工件的SHA-256摘要,并写出一个toto语句将主题绑定到谓语包含OIDC令牌声明中的数据。
  • 客户端使用私钥在DSSE签名信封然后,它将私钥扔掉。信封的签名被发送给TSA,以获得时间戳签名,这证明签名是在证书的10分钟有效期内生成的。
  • 一切都被包装成Sigstore束并坚持使用GitHub的认证存储。如果是专用存储库,这就是流程的结束。如果是公共存储库,该证明被额外写入Sigstore公益诉讼,并于雷科尔项目的不可变账本。

在过去的几个月里,人工制品认证已经进入了早期访问预览阶段,我们对收到的早期反馈感到非常激动。

GitHub坚定不移地致力于使软件认证和工件完整性民主化。在GitHub工作流中仅利用六行代码,标志着构建链安全中的一个转折点,这是我利用、体验并热情接受的一项举措。

-Victor Martinez Rubio//弹性首席工程师

GitHub现在是根证书颁发机构

当我们开始设计此功能的需求时,我们很快意识到我们希望用户能够在GitHub Actions上签署工件,然后对其进行验证在任何地方甚至离线。公钥基础设施(PKI)是复杂且高风险的,我们从客户和开源项目那里都听说他们想要一种签署方式没有必须建立PKI或管理可能泄露或丢失的秘密。要做到这一点,我们首先需要将GitHub建立为签名软件的根证书颁发机构(CA),这样我们就可以拥有整个证书链。

2023年10月,我们与X.509证书颁发机构RFC 3161时间戳服务器,通过不同地域和角色的员工持有的法定人数的硬件令牌管理信任根。信任根是通过来自TUF项目(我们是贡献者),CA和时间戳服务是Sigstore应用程序的实例。中级证书存放在Azure KeyVault托管HSM,用于签署Sigstore Fulcio和Sigstore-Timestamp Authority颁发的叶证书。签名证书自颁发之日起10分钟内有效,因此无需管理证书吊销列表的复杂性(CRL)。

Sigstore,公开和私下

为了与我们向企业客户和开源社区提供尖端功能的承诺保持一致,Artifact Attestions支持在两种基本模式下提供的相同用户体验,这取决于存储库的可见性。对于公共存储库,GitHub Actions生成的证明将写入Sigstore Public Good Instance,以在不可变分类账。对于专用存储库GitHub企业计划中,证明被写入一个内部的、完全私有的数据库,而没有任何信息被写入公共分类账或日志。

更安全的未来

需要注意的是来源本身并不能保证工件或构建过程的安全.它是什么要做的是创建一个防篡改的保证执行绝对是你建造,可以阻止许多攻击向量。维护强大的应用程序安全流程仍然至关重要,比如要求对所有补丁进行代码审查,以及及时应用依赖项更新。

换句话说:证明为您提供了一个不可伪造的书面线索,将给定工件与给定GitHub Actions工作流运行联系起来。我们相信,这是现代信任模型的关键部分,此外,我们希望帮助实现文化向人们了解的转变他们的软件组件来自哪里.

工件认证将允许客户前所未有地了解其构建的软件工件的组成和使用情况,而这仅仅是一个开始。我们将提供证明与构建过程相关的其他类型工件的能力,例如漏洞报告和整体项目的定义谓词类型。寻找有关Kubernetes支持、发布新保证以及今年晚些时候更多令人兴奋的消息。

想了解更多关于GitHub如何减轻运送安全代码的压力的信息吗?

GitHub环球2024,我们将探索开发人员优先安全方面的前沿研究和最佳实践,以便您可以使用您已经熟悉和喜爱的工具来确保代码的安全。

我们的超级早鸟促销活动即将结束!现在就买票。

相关职位