如何通过PowerShell获取与指定Key Vault关联的Azure VM列表
关联指定Azure Key Vault的VM清单查询及PowerShell导入流程
前置准备
- 已安装Azure PowerShell Az模块,最低版本要求6.0.0以上,未安装可执行
Install-Module -Name Az -AllowClobber -Scope CurrentUser完成安装 - 已通过
Connect-AzAccount命令登录Azure账号,且账号对目标Key Vault、对应VM资源有至少读取权限 - 明确目标Key Vault的名称、所属资源组、订阅ID信息
实现逻辑说明
VM和Key Vault的关联主要覆盖三类主流场景:Azure磁盘加密的密钥/密钥加密密钥存储在Key Vault、VM配置了自动从Key Vault拉取机密/证书、VM扩展绑定了Key Vault,以下操作会覆盖上述场景的关联VM查询。
注意:如果你的VM使用用户分配托管身份关联Key Vault,需要额外补充托管身份访问权限的筛选逻辑,下述脚本默认覆盖系统分配托管身份+磁盘加密的主流关联场景
PowerShell完整操作步骤
步骤1:配置目标Key Vault参数
# 替换为实际的Key Vault信息 $keyVaultName = "替换为你的Key Vault名称" $keyVaultRG = "替换为Key Vault所属资源组名称" $subscriptionId = "替换为Key Vault所属订阅ID" # 切换到目标Key Vault所在订阅 Set-AzContext -Subscription $subscriptionId
步骤2:查询所有关联该Key Vault的VM
# 获取目标Key Vault的唯一资源ID $kvId = (Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $keyVaultRG).Id # 筛选所有关联该Key Vault的VM资源 $associatedVMs = Get-AzVM | Where-Object { # 匹配磁盘加密关联场景 ($_.StorageProfile.OsDisk.EncryptionSettings.Enabled -eq $true -and $_.StorageProfile.OsDisk.EncryptionSettings.DiskEncryptionKey.KeyVaultId -eq $kvId) -or ($_.StorageProfile.OsDisk.EncryptionSettings.Enabled -eq $true -and $_.StorageProfile.OsDisk.EncryptionSettings.KeyEncryptionKey.KeyVaultId -eq $kvId) -or # 匹配VM扩展、机密拉取关联场景 ($_.Identity -ne $null -and ($_.Extensions | Where-Object {$_.Settings.ToString().Contains($kvId)})) }
步骤3:导出/导入关联VM清单
- 导出为可通用导入的CSV格式:
# 将关联VM清单导出到本地指定路径,可直接导入Excel、资产管理系统等 $associatedVMs | Select-Object Name,ResourceGroupName,Id,Location,ProvisioningState | Export-Csv -Path "C:\KeyVault关联VM清单.csv" -NoTypeInformation -Encoding UTF8
- 从CSV文件导入清单到PowerShell会话:
# 读取本地已导出的CSV清单,导入到当前PowerShell会话中使用 $importedVMList = Import-Csv -Path "C:\KeyVault关联VM清单.csv" -Encoding UTF8
结果验证
- 执行
$associatedVMs.Name可直接输出所有关联VM的名称 - 导入完成后执行
$importedVMList可查看已导入的所有VM明细信息 - 需要确认单台VM的关联关系时,可执行
Get-AzVM -Name <VM名称> -ResourceGroupName <VM资源组> | Select-Object -ExpandProperty StorageProfile.OsDisk.EncryptionSettings查看加密配置绑定的Key Vault信息
内容的提问来源于stack exchange,提问作者Joseph
相关产品推荐
相关产品推荐

