如何在 Azure Devops 中保护 azure-pipelines.yml 管道文件
How do I protect azure-pipelines.yml pipeline file in Azure Devops
也许我完全以错误的方式处理这个问题,但 Azure Devops Pipelines 中似乎存在一个相当大的安全漏洞。
我们的 devops 团队一直在管理我们的构建,一直回到本地 TFS,并贯穿我们 CI/CD 的旅程。这样做是为了使我们的构建和发布标准化,跟踪环境和工具集升级,因为 devops 人员在该领域拥有更好的领域知识,并且通常使开发人员的生活更轻松。这都是很好的做法。
现在有了 Azure Devops 和 yaml 管道,我们能够模板化我们的构建(这是一件很棒的事情,微软是时候赶上这个了)。但即使使用模板、“扩展”模板和阻止开发人员创建自己的管道的安全限制,这一切的根文件 (azure-pipelines.yml) 仍然存储在应用程序的源代码存储库中。
因此不允许开发人员创建新管道,但他们可以随心所欲地编辑 azure-pipelines.yml 文件,这意味着擦除我们的 devops 团队编写的 templating/extends 代码,并可能注入恶意或其他不受管理的更改。甚至完全删除文件并破坏管道。这是椰子。
在你说“好吧,在那里设置一些分支策略并强制代码 reviews/pull 请求”之前,这完全是愚蠢的,原因有两个:
- 开发运营团队不必批准分支中的每一个更改,因为代码更改不是他们的领域。他们应该只需要批准 azure-pipelines.yml 文件,其余的就不用管了。
- 这需要在我们所有的数十个回购协议上手动创建分支策略,更不用说这些回购协议中的每个分支。开发者还可以创建自己的分支,这完全规避了我们可能拥有的任何政策。
是的,我们现在可能已经更改了历史记录,但这只会在事后有所帮助。在构建环境被破坏之前不会。
简而言之,通过将管道定义插入应用程序存储库而不提供任何方式来巧妙地保护它们,Azure YAML 管道允许开发人员自由统治,在 devops 的世界中造成严重破坏。
我是不是漏掉了什么?人们如何保护和管理他们的 yaml 管道?对于拥有独立的 devops 团队的组织来说,当然有一些策略需要保护他们的工作。我们如何protect/secure azure-pipelines.yml?
您可以在重要分支上强制执行拉取请求,并在更改管道时要求审阅者。可以使用带通配符的分支策略对整个团队项目实施此类分支策略
https://jessehouwing.net/azure-repos-git-configuring-standard-policies-on-repositories/
尽管我个人反对如此强烈的责任划分。标准化是一回事,但它提供的保护微乎其微。最后,推动意识计划要好得多。
可选择保护目标环境以要求管道模板,并确保模板将自身注入目标管道,而不是选择加入模板的管道。在 Azure Pipeline Environments 中,您可以设置策略以要求使用特定模板。
也许我完全以错误的方式处理这个问题,但 Azure Devops Pipelines 中似乎存在一个相当大的安全漏洞。
我们的 devops 团队一直在管理我们的构建,一直回到本地 TFS,并贯穿我们 CI/CD 的旅程。这样做是为了使我们的构建和发布标准化,跟踪环境和工具集升级,因为 devops 人员在该领域拥有更好的领域知识,并且通常使开发人员的生活更轻松。这都是很好的做法。
现在有了 Azure Devops 和 yaml 管道,我们能够模板化我们的构建(这是一件很棒的事情,微软是时候赶上这个了)。但即使使用模板、“扩展”模板和阻止开发人员创建自己的管道的安全限制,这一切的根文件 (azure-pipelines.yml) 仍然存储在应用程序的源代码存储库中。
因此不允许开发人员创建新管道,但他们可以随心所欲地编辑 azure-pipelines.yml 文件,这意味着擦除我们的 devops 团队编写的 templating/extends 代码,并可能注入恶意或其他不受管理的更改。甚至完全删除文件并破坏管道。这是椰子。
在你说“好吧,在那里设置一些分支策略并强制代码 reviews/pull 请求”之前,这完全是愚蠢的,原因有两个:
- 开发运营团队不必批准分支中的每一个更改,因为代码更改不是他们的领域。他们应该只需要批准 azure-pipelines.yml 文件,其余的就不用管了。
- 这需要在我们所有的数十个回购协议上手动创建分支策略,更不用说这些回购协议中的每个分支。开发者还可以创建自己的分支,这完全规避了我们可能拥有的任何政策。
是的,我们现在可能已经更改了历史记录,但这只会在事后有所帮助。在构建环境被破坏之前不会。
简而言之,通过将管道定义插入应用程序存储库而不提供任何方式来巧妙地保护它们,Azure YAML 管道允许开发人员自由统治,在 devops 的世界中造成严重破坏。
我是不是漏掉了什么?人们如何保护和管理他们的 yaml 管道?对于拥有独立的 devops 团队的组织来说,当然有一些策略需要保护他们的工作。我们如何protect/secure azure-pipelines.yml?
您可以在重要分支上强制执行拉取请求,并在更改管道时要求审阅者。可以使用带通配符的分支策略对整个团队项目实施此类分支策略
https://jessehouwing.net/azure-repos-git-configuring-standard-policies-on-repositories/
尽管我个人反对如此强烈的责任划分。标准化是一回事,但它提供的保护微乎其微。最后,推动意识计划要好得多。
可选择保护目标环境以要求管道模板,并确保模板将自身注入目标管道,而不是选择加入模板的管道。在 Azure Pipeline Environments 中,您可以设置策略以要求使用特定模板。