我正在尝试了解在密钥库中维护机密的最佳实践:
问题 1:我们是否应该授予基础结构对 Azure Key Vault 的访问权限并让团队成员访问以维护机密?
问题 2:第二个选项是使用一个脚本来读取 ADO 变量组中的值,然后该脚本会将它们添加/更新到密钥保管库中。
我试图实现第二个选项,以便我们可以从一个地方管理所有秘密,这就是发生的事情。
计划是让那些应该位于 KeyVault 中的变量以静态字符串
KeyVault_
开头,然后使用 az pipeline variable group show -- group-id $GROUP_ID
读取这些变量,但正如预期的那样,秘密值的值为空。
如何实现类似的方法并从 ADO 机密更新密钥保管库机密。
$variable_group.variables.GetEnumerator() | ForEach-Object {
if ($_.Key.StartsWith("KeyVault_")) {
$SecretName = $_.Key -replace "KeyVault_", ""
$SecretValue = $_.Value.value
if ($SecretValue) {
Write-Output "Creating secret for $SecretName."
az keyvault secret set --vault-name $KeyVaultName --name $SecretName --value $SecretValue --output none
Write-Output "Added secret '$SecretName' to Key Vault '$KeyVaultName'."
} else {
Write-Warning "No value found for variable '$($_.Key)'."
}
}
}
我怎样才能正确分配
$SecretValue
的值,我已经尝试过$($_.Key)
但没有运气!
最好将 Azure DevOps 变量组链接到 Key Vault,详细信息请参见 https://learn.microsoft.com/azure/devops/pipelines/library/link-variable-groups-to-key-vaults?view=azure -devops。您还应该为不同的项目创建单独的保管库,因为它们相对便宜 - 实际上根据使用情况是免费的,DevOps 不太可能超越这一点。
是的,您应该根据需要授予可信成员更新机密的权限,但最好使用 RBAC 而不是旧访问策略来管理分配给角色的这些成员:https://learn.microsoft.com/azure/key-vault /general/rbac-guide?tabs=azure-cli。这使他们能够更新或以其他方式旋转秘密。
这实际上只是通过让人们访问 DevOps 变量组来在 Key Vault 中设置这些变量来转移问题。在某些时候,必须信任一组个人才能设置甚至查看资源。但 Key Vault 为您提供比 DevOps 变量组更好的保护和审核。
注意:如果您使用机密来保护 Azure 中服务之间的访问,实际上最好尽可能使用 托管身份。