如何安全/保护Azure服务主体机密

如何安全/保护Azure服务主体机密,azure,powershell,azure-devops,azure-pipelines-release-pipeline,azure-keyvault,Azure,Powershell,Azure Devops,Azure Pipelines Release Pipeline,Azure Keyvault,我的部署任务使用PowerShell脚本,该脚本使用服务主体连接Azure KeyVault以获取pull secret。机密(密码)以纯文本形式存储在PowerShell脚本的代码中。也许有另一种解决方案可以最小化令牌查看 我还在部署任务中使用powershell内联模式(不是单独的脚本)和Azure DevOps Secret变量,但这个解决方案很难支持(脚本有几个不同的操作,所以您必须保留多个版本的脚本) 脚本存储在Git存储库中,任何有权访问它的人都可以看到这个秘密并获得对其他密钥的访问

我的部署任务使用PowerShell脚本,该脚本使用服务主体连接Azure KeyVault以获取pull secret。机密(密码)以纯文本形式存储在PowerShell脚本的代码中。也许有另一种解决方案可以最小化令牌查看

我还在部署任务中使用powershell内联模式(不是单独的脚本)和Azure DevOps Secret变量,但这个解决方案很难支持(脚本有几个不同的操作,所以您必须保留多个版本的脚本)


脚本存储在Git存储库中,任何有权访问它的人都可以看到这个秘密并获得对其他密钥的访问权。也许我没有正确理解这个概念,但是如果密钥不能存储在代码中,那么我该怎么办?

I devops您可以使用变量组并定义变量直接从选定的密钥库中提取(如果您选择的服务主体具有对KV的读/列表访问权)


这意味着您可以在keyvault中定义所有机密,它们将在yaml中发生任何任务之前被提取。为了能够在脚本中使用它们,您可以将它们定义为脚本的env变量或参数,只需引用$env:variable或$variable,而不用在脚本中硬编码密码。

Full同意user3211888的回答。您可以使用变量组并将值设置为secret,这样您就可以保留多个版本的脚本。如果我正确理解,您建议使用变量组中的secret变量,并通过脚本参数将纯文本secret值传输到powershell脚本任务是的,所有机密在powershell中都作为system.string处理,你真的无法阻止它。即使您手动连接到KV并自己获取秘密,当您阅读它时,它仍然是system.string。