如何通过Azure Vault机密列举Azure存储容器文件
基于Azure Key Vault读取SAS实现存储容器文件列举
前置依赖
- 安装Az模块合集(包含Key Vault、存储操作所需命令),执行以下命令为当前用户安装:
Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
- 提前确认以下参数:
- 存储SAS令牌所在Key Vault的实例名称
- SAS令牌对应的Key Vault机密名称
- 存储账户名、容器名、本地目标路径等原有业务参数
- 运行前执行
Connect-AzAccount登录Azure账号,所用账号需已授予目标Key Vault的机密读取权限。
修改说明
原有脚本硬编码SAS的逻辑替换为直接从Key Vault拉取机密值到内存变量,全程不需要输出SAS明文,直接传入存储上下文构造参数即可。注意:New-AzStorageContext要求SASToken参数以?开头,如果Key Vault中存储的SAS没有带这个前缀,需要在脚本中手动补全。
完整可用脚本
# 配置固定参数 $KeyVaultName = "替换为你的Key Vault名称" $SASSecretName = "替换为SAS对应的机密名称" $StorageAccountName = "trialstorageaccount3" $ContainerName = "trialcontainer1" $TargetFolderPath = "D:\Anand\Downloads\HTC\DATA\AzureBlob\" # 从Key Vault读取SAS令牌,结果仅存于内存,不打印明文 $ContainerSAS = Get-AzKeyVaultSecret -VaultName $KeyVaultName -Name $SASSecretName -AsPlainText # 补全SAS开头的?,如果Key Vault中存储的SAS已带?可注释掉本段判断 if (-not $ContainerSAS.StartsWith("?")) { $ContainerSAS = "?" + $ContainerSAS } # 构造存储上下文 $context = New-AzStorageContext -StorageAccountName $StorageAccountName -SASToken $ContainerSAS # 列举容器内所有Blob $blobs = Get-AzStorageBlob -Container $ContainerName -Context $context foreach($blob in $blobs) { Write-Host $blob.Name # 取消以下注释可开启Blob下载功能 # New-Item -ItemType Directory -Force -Path $TargetFolderPath # Get-AzStorageBlobContent -Container $ContainerName -Blob $blob.Name -Destination $TargetFolderPath -Context $context }
补充说明
- 脚本运行全程不会暴露SAS明文,符合组织的密钥管控要求
- 无人值守自动化场景下,可替换登录方式为服务主体或Azure托管身份,只要给对应身份分配Key Vault机密读取权限即可正常运行,无需交互式操作
- 旧版AzureRM模块已停止维护,统一使用Az模块可避免命令兼容性问题
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

