VSTS构建定义可以选择创建一个秘密变量。这个变量有多秘密?存储特定于一组用户的用户凭证是否安全?其他用户(无权执行此操作)可以解密该变量吗?
假设用户具有内部版本修改权限,那么是否可以解密变量?
答案 0 :(得分:3)
存储的变量与运行构建的代理以及构建定义的完整性一样安全。
就像您说的那样,如果用户可以修改构建定义并可以访问机密,则可以将其传递给PowerShell或Curl任务等。或者,如果用户可以控制构建任务的脚本,则可以迭代所有可用机密(构建任务被构建系统信任)。
请考虑到对代理程序的工作目录具有写访问权的每个人都可以访问在构建代理程序上执行的构建定义可用的所有机密。他们可以更改构建任务使用的脚本,从而获得相同级别的信任。在这种情况下,在此更改之后直到任务的新版本推送到代理之前运行的所有构建都将受到损害。从理论上讲,每个构建定义都可以“感染”代理的_tasks
文件夹。防止这种情况的最佳方法是使用托管池或定期重置代理的VM。
YAML构建定义与Pull-Requests相结合,使您可以更好地控制构建定义的更改/批准过程。
使用变量库可以减少可以将秘密变量添加到其构建定义中的人数。
您必须以只有有限且受信任的用户才能访问这些资源的方式保护代理程序池和变量库/构建定义。 (可选)使用一次性使用的密码,这些密码会在短时间内过期或暂时授予这些权限。
请记住,将跟踪对Git存储库中的构建定义以及变量库和脚本的所有更改。
获取秘密的替代方法不适用于Azure DevOps,因为没有人可以访问Azure中的应用层,并且访问受到Microsoft的严格监控。