无法从 Azure DevOps Build Pipeline 中的 Azure PowerShell 任务中以纯文本形式读取 Key Vault 机密

Cant read Key Vault secrets as plain text from Azure PowerShell task in Azure DevOps Build Pipeline

我正在尝试使用 Azure DevOps 构建管道 PowerShell 任务中的服务主体登录 Azure 订阅。 我需要登录的原因是,我需要从同一个 PowerShell 任务执行一些日志分析查询,因此需要对订阅进行身份验证。 服务主体 ID 和密钥作为机密保存在 Key Vault 中。 我需要以纯文本形式阅读它们才能通过 Azure 订阅 并进行身份验证。

问题是,我无法以纯文本或纯字符串的形式读取它们,因为它们作为 Azure DevOps PowerShell 任务中的加密字符串值出现。我似乎无法找到直接将它们作为纯文本阅读的方法。

我不能使用下面的命令 (Get-AzKeyVaultSecret -VaultName $vaultName -Name $secretName).SecretValueText 因为我们需要已经通过 Azure 订阅的身份验证才能执行其他模块的命令。

尝试了以下(即)$Encrypted(服务主体 ID)的值作为纯文本在 KeyVault 中 当我使用下面的内容时,它说,输入格式不正确

$AppId = (ConvertTo-SecureString $Encrypted) $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($AppId) $AppId = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) 

寻找任何其他方法来完成此任务。

找到了答案。我使用的 PowerShell 任务类型为 AzurePowerShell@2

但将其更改为任务:AzurePowerShell@4 这让事情变得非常简单,因为我已经有了服务连接,我可以使用它对订阅进行身份验证,也可以读取和传递Key Vault 秘密成功。

你需要在构建任务中提到 azurePowerShellVersion: LatestVersion,它工作简单。

此外,这消除了使用服务主体的要求,现在我可以使用 Azure DevOps 服务连接对订阅进行身份验证。