培训
设置机密变量
本文内容
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
机密变量是可在管道中使用且无需公开其值的加密变量。 机密变量可用于密码、ID 等私人信息,以及不希望在管道中公开的其他标识数据。 机密变量使用 2048 位 RSA 密钥进行静态加密,并在代理上可供任务和脚本使用。
设置机密变量的建议方法包括 UI、变量组和 Azure 密钥保管库中的变量组。 还可以 使用日志记录命令 在脚本中设置机密变量,但不建议使用此方法,因为访问管道的任何人都可以查看机密。
在管道的管道设置 UI 中设置的机密变量的范围限定为设置它们的管道。 可以使用变量组跨管道共享机密变量。
编辑单个管道时,可以在管道编辑器中设置机密变量。 通过选择锁图标来加密和生成管道变量机密。
为 YAML 和经典设置机密变量的方式相同。
要在 Web 界面中设置机密,请执行以下步骤:
- 转到管道页,选择适当的管道,然后选择编辑。
- 找到该管道的变量。
- 添加或更新该变量。
- 选择“将此值保密”选项,以加密方式存储变量。
- 保存管道。
机密变量使用 2048 位 RSA 密钥进行静态加密。 代理上提供机密供任务和脚本使用。 请注意谁有权更改管道。
重要
我们要尽量屏蔽机密,使其不出现在 Azure Pipelines 输出中,但你仍然需要采取预防措施。 切勿将机密作为输出进行回显。 某些操作系统记录命令行参数。 切勿在命令行上传递机密。 相反,我们建议将机密映射到环境变量中。
我们从不屏蔽机密的子字符串。 例如,如果将“abc123”设置为机密,则不会从日志中屏蔽“abc”。 这是为了避免在过于精细的级别屏蔽机密,从而使日志不可读。 因此,机密不应包含结构化数据。 例如,如果“{ "foo": "bar" }”设置为机密,则不会从日志中屏蔽“bar”。
与普通变量不同,它们不会自动解密为脚本的环境变量。 你需要显式映射机密变量。
需要将机密变量映射为环境变量,以在 YAML 管道中引用它们。 在此示例中,UI 中定义了两个机密变量:SecretOne
和 SecretTwo
。 SecretOne
的值为 foo
,SecretTwo
的值为 bar
。
steps:
- powershell: |
Write-Host "My first secret variable is $env:FOO_ONE"
$env:FOO_ONE -eq "foo"
env:
FOO_ONE: $(SecretOne)
- bash: |
echo "My second secret variable: $FOO_TWO"
if [ "$FOO_TWO" = "bar" ]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
env:
FOO_TWO: $(SecretTwo)
管道输出:
My first secret variable is ***
True
My second secret variable: ***
Strings are equal.
备注
Azure Pipelines 在向管道日志发出数据时会努力屏蔽机密,因此你可能会在输出和日志中看到未设置为机密的其他变量和数据掩码。
有关更详细的示例,请参阅定义变量。
可以将机密添加到变量组,也可以链接现有 Azure 密钥保管库中的机密。
选择“管道”>“库”>“+ 添加变量组”。
为组输入名称和描述。
可选:移动开关以将 Azure 密钥保管库中的机密作为变量进行链接。 有关详细信息,请参阅使用 Azure 密钥保管库机密。
输入要包含在组中的每个变量的名称和值,为每个变量选择“+ 添加”。
要确保变量安全,请选择行末尾的“锁”图标。
添加完变量后,请选择“保存”。
变量组遵循库安全模型。
可以创建变量组并将其链接到现有的 Azure 密钥保管库,以便映射到密钥保管库中存储的机密。 只有机密名称会被映射到变量组中,而机密值不会被映射到变量组中。 链接到变量组的管道运行会从存储库中获取最新的机密值。 有关详细信息,请参阅将变量组链接到 Azure 密钥库中的机密。
可以使用 Azure 密钥保管库任务在管道中包含机密。 此任务允许管道连接到 Azure 密钥保管库并检索要用作管道变量的机密。
在管道编辑器中,选择“显示助手”以展开助手面板。
搜索
vault
,然后选择 Azure 密钥保管库任务。
Azure DevOps Server 2019 和 2020 目前不支持“使机密可供整个作业使用”选项。
要详细了解 Azure 密钥保管库任务,请参阅在 Azure Pipelines 中使用 Azure 密钥保管库机密。
可以使用 task.setvariable
日志记录命令在 PowerShell 和 Bash 脚本中设置变量。 此方法是处理机密变量最不安全的方法,但可用于调试。 设置机密变量的建议方法包括 UI、变量组和 Azure 密钥保管库中的变量组。
若要使用日志记录命令将变量设置为脚本,需要传递 issecret
标志。
当 issecret
设置为 true 时,变量的值将另存为机密并从日志中屏蔽。
备注
Azure Pipelines 在向管道日志发出数据时会努力屏蔽机密,因此你可能会在输出和日志中看到未设置为机密的其他变量和数据掩码。
设置机密变量 mySecretVal
。
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
获取机密变量 mySecretVal
。
- bash: |
echo "##vso[task.setvariable variable=mySecretVal;issecret=true]secretvalue"
- bash: |
echo $(mySecretVal)
bash 中的机密变量输出。
详细了解如何在脚本中设置和使用变量。