Azure 使用KeyVault secret部署带有PowerShell的VM,而不进行明文转换

Azure 使用KeyVault secret部署带有PowerShell的VM,而不进行明文转换,azure,azure-powershell,azure-keyvault,azure-vm,Azure,Azure Powershell,Azure Keyvault,Azure Vm,我目前正在学习AZ-104,并尝试使用Powershell自动化VM部署 我想使用新建AzVMConfig和设置AzVMOperatingSystem-Credential$cred创建一个VM,但使用保存在AzureKeyVault中的凭据 我找到的唯一解决方案是使用.NET脚本将秘密转换为明文 $secret = Get-AzKeyVaultSecret -VaultName "somekeyvaultname" -Name "vmpassword"

我目前正在学习AZ-104,并尝试使用Powershell自动化VM部署

我想使用
新建AzVMConfig
设置AzVMOperatingSystem-Credential$cred
创建一个VM,但使用保存在AzureKeyVault中的凭据

我找到的唯一解决方案是使用.NET脚本将秘密转换为明文

$secret = Get-AzKeyVaultSecret -VaultName "somekeyvaultname" -Name "vmpassword"
$ssPtr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($secret.SecretValue)
try {
   $secretValueText = [System.Runtime.InteropServices.Marshal]::PtrToStringBSTR($ssPtr)
} finally {
   [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($ssPtr)
}
Write-Output $secretValueText

有没有一种方法可以在脚本中使用KeyVault对象,以便它自动用于VM?或者这仅适用于ARM模板吗?

您可以使用AZ CLI或Powershell从AzureKeyVault获取凭据

AZ CLI代码示例:

$Secret = az keyvault secret show --name "SecretName"--vault-name "KeyvaultName" | ConvertFrom-Json
$SecretValue= $Secret.value
$Secret = Get-AzKeyVaultSecret -VaultName "KeyvaultName" -Name "SecretName"
$SecretValue = $secret.SecretValue | ConvertFrom-SecureString -AsPlainText
Powershell代码示例:

$Secret = az keyvault secret show --name "SecretName"--vault-name "KeyvaultName" | ConvertFrom-Json
$SecretValue= $Secret.value
$Secret = Get-AzKeyVaultSecret -VaultName "KeyvaultName" -Name "SecretName"
$SecretValue = $secret.SecretValue | ConvertFrom-SecureString -AsPlainText