VSTS 秘密变量实际上是不是秘密?

VSTS secret variables are actually secret or not?

VSTS 生成定义可以选择创建秘密变量。这个变量有多秘密?存储特定于一组用户的用户凭据是否安全?其他用户(未获授权的用户)能否解密该变量?

I came across this article.

假设用户具有构建修改权限,那么是否可以解密变量?

存储的变量与运行构建的代理和构建定义的完整性一样安全。

就像你说的,如果用户可以修改构建定义并有权访问机密,他们可以将其传递给 PowerShell 或 Curl 任务等。或者如果用户可以控制构建任务的脚本,他们可以迭代所有可用的秘密(构建任务被构建系统认为是可信的)。

请考虑对代理的工作目录具有写入权限的每个人都可以访问在构建代理上执行的构建定义可用的所有机密。他们可以更改构建任务使用的脚本,从而获得相同级别的信任。在这种情况下,在此更改之后运行的任何构建,直到将任务的新版本推送到代理为止,都将受到损害。理论上每个构建定义 "infect" 代理的 _tasks 文件夹也是如此。防止这种情况的最佳方法是使用托管池或定期重置代理的 VM。

YAML 构建定义与 Pull-Requests 相结合,使您可以更好地控制构建定义的 Change/approval 过程。

使用变量库可以减少可以将秘密变量添加到其构建定义的人数。

您必须以只有受限和受信任的用户才能访问这些资源的方式保护代理池和变量 Libraries/Build 定义。可选择使用短时间后过期的一次性密码或临时授予这些权限。

请记住,Git 存储库中构建定义和变量库和脚本的所有更改都会被跟踪。

访问机密的替代方法不适用于 Azure DevOps,因为 none 可以访问 Azure 中的应用程序层并且访问受到 Microsoft 的严格监控。