2024年10月,Elastic经历了一场令整个开发社区瞩目的重大事件。由于一次自动化工作流中的疏忽,Elastic最受欢迎的公共GitHub仓库突然被错误地标记为私有,导致客户和开源用户的构建流水线骤然中断。这起事故不仅揭示了源代码供应链安全管理的复杂性,也暴露了企业在大规模仓库管理自动化过程中的潜在风险。 Elastic作为一个庞大且活跃的GitHub用户,旗下管理着近3000个仓库,这些仓库涵盖全球多个国家的员工、承包商和贡献者。公司服务的客户从小型企业延伸至情报机构,依赖高可靠性的源代码和供应链安全来保护其关键数据。为了加强安全保障,Elastic团队决定将存在漏洞的"内部可见性"仓库统一迁移为"私有"仓库,以更加严格地控制访问权限。
GitHub的仓库可见性主要分为三种:公共、内部和私有。公共仓库向任何人开放且无需身份验证,内部仓库提供给同一GitHub企业组织内的所有成员访问权限,而私有仓库则仅限于特定授权的用户。Elastic自2023年中开始逐步弃用内部可见性仓库,准备将其全部转为私有仓库,以符合集团的访问许可策略。 为此,Elastic依赖一种名为Terrazzo的内部工具,它通过存放在另一个GitHub仓库里的YAML文件来管理目标仓库的配置。当有拉取请求合并后,Terrazzo会自动应用相关变更。然而,只有部分仓库完全通过Terrazzo管理,部分仓库的配置只有一部分被管理,还有少部分仓库根本不受Terrazzo控制。
这种多状态的管理体系,为后续事故埋下了隐患。 变更计划开始之前,团队通过GitHub API收集了所有内部可见性的仓库,并将这些数据与Terrazzo管理的仓库数据交叉验证。为了避免Terrazzo恢复原有设置,团队准备了3个清单:不受Terrazzo管理的内部仓库、完全或部分由Terrazzo管理的内部仓库,以及需要为特定自动化服务账户授予访问权限的仓库。该清单共约350个仓库,被整理在一个电子表格中发给全体工程师审阅。 然而,这个审核流程存在缺陷。虽然通知了相关负责人,但并没有强制确认机制,导致审核相对宽松。
此外,脚本还发现有63个缺少显示可见性配置且实际为公共的仓库被错误地标记为内部仓库并加入了更改列表。最致命的是,这部分仓库并未再次征求工程师确认。 实施变更时,团队准备了一套自动化脚本,通过循环遍历预先准备的清单,批量将仓库的可见性由"内部"或"未明确"改为"私有",并为指定团队分配了访问权限。与此同时,Terrazzo仓库的配置文件也被更新,明确将仓库设置为私有。该变更提交包含了349个文件的编辑,经过两名工程师的代码审查后上线。 令团队措手不及的是,变更脚本执行后仅六分钟,最受欢迎的elastic/kibana和elastic/elasticsearch等核心仓库即被错误设为私有。
团队立即中止脚本执行,但已有63个公共仓库陷入"私有"状态,引发构建流水线的广泛失败,严重影响Elastic自身及其客户和开源生态。 幸而,Elastic拥有详尽而成熟的事件管理体系。故障报告后数分钟内,事件响应团队成立专门沟通频道,并在十分钟内升级为高优先级重大事件。团队实时通报影响范围,确认这是一场内部变更失误,排除恶意攻击的可能性。与此同时,他们迅速联系GitHub支持团队,开始协调恢复操作。 GitHub团队解释,仓库从公共切换到私有涉及后台诸多复杂任务,如对分叉网络的重新关联、PR建议链路的调整,以及移除观察者和星标等。
这些操作花费时间不一,更大仓库通常需要约90分钟才能重新公开访问。在连续七小时的紧密配合与施救后,全部63个受影响仓库相继恢复为公共状态。 虽然受损的GitHub星标在初期无法恢复,令负责人倍感失落,但经过数周努力,GitHub最终将这些仓库的星标数量恢复,为用户重塑信心。此次事件暴露了多个问题,最主要的包括一次变更涵盖范围过大、脚本对输入数据缺乏严密验证以及审批流程不完善。 Elastic总结经验后,采取了一系列改进措施,其中包括限制仅组织所有者拥有修改仓库可见性的权限,显著缩小潜在误操作的人数。同时,团队通过强化内部配置管理工具、增加代码级保护措施及开发访问权限管理等手段,防范未来同类错误。
此外,Elastic也转变策略,不再由中央团队单方面推动关键变更,而是回归到仓库所有者主导,确保变更由业务线负责人掌控并对潜在风险有第一时间的感知与反应。这样的分散式管理进一步降低了全局性风险。 事件也强化了团队间协作和企业文化的重要性。面对挑战,响应团队相互支持,强调无责备的氛围,保持冷静和效率。GitHub方面虽身处年会期间,仍全力协助解决问题,体现了优秀的合作精神。 这次"星辰消失"事件不仅是一个关于技术失误的案例,更是一堂关于大规模自动化管理、安全策略执行和人机协作的深刻课程。
它提醒企业在追求效率的同时,必须严守验证和审查流程,尊重真实世界的复杂性。 未来,Elastic将继续推进安全和自动化的融合,但同时对质量控制和变更管理保持高度警醒。供应链安全已经成为信息安全体系的核心部分,任何环节的失误都可能带来巨大影响。透过这场风波,Elastic以及广大开源社区都获得了宝贵的教训,也为构建更稳健的开发生态注入了新动力。 。