如何保护机密信息并允许修改流水线

123次阅读
没有评论

问题描述

正在使用GitHub Actions编写CI流水线。该流水线将构建一个Docker镜像,并将其推送到他们的Docker仓库(AWS ECR)。为了与ECR通信,他们需要提供一个机密信息(以及其他一些细节)。他们计划从Hashicorp Vault中获取这个机密信息,但是访问Vault本身也需要一个机密信息,所以在某种程度上,他们只是将问题转移到了另一个地方。流水线的代码与其运行的代码存储在同一个代码库中(开发人员可以访问该代码库)。但是,如果需要,他们可以将一些由该代码调用的操作存储在一个单独的代码库中(只有DevOps团队可以访问)。尽管我们相信我们的开发人员,但在可能的情况下,将事物尽可能地锁定是一种良好的做法。因此,有没有办法设置这样的环境,使开发人员可以修改流水线,而无法(故意或无意地)暴露这些机密信息?在这种情况下,有没有任何最佳实践?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

默认情况下,GitHub Actions不会将配置的机密信息显示给开发人员或仓库的管理员。即使在调试GitHub Actions工作流时意外记录了机密信息,GitHub也会用***标记它们。因此,我能想到的唯一攻击向量是高度故意的,并且需要修改GitHub Actions工作流代码,并将机密信息传输到预先配置的互联网上的某个接收者。如果您担心这种攻击向量超出了常规的代码审查范围,您可以尝试使用CODEOWNERS来保护.github目录。CODEOWNERS是一种保护.github目录的方法,详情请参考:https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners

方案2

另一种方法是将机密信息存储在外部的安全存储中,而不是直接在GitHub Actions工作流中使用。您可以使用Hashicorp Vault等工具来管理机密信息,并在工作流中使用Vault提供的API来获取机密信息。这样,开发人员就无需直接访问机密信息,而是通过Vault进行访问。这种方法可以将机密信息与代码分离,并提供更高的安全性。

请注意,无论使用哪种方法,都应该定期审查和更新机密信息,以确保安全性。此外,还应该限制对机密信息的访问权限,并定期监控和审计对机密信息的使用。

以上是保护机密信息并允许修改流水线的一些解决方案。根据您的具体需求和安全要求,您可以选择适合您的方法。

正文完