如何查找管理存储账户密钥的Key Vault并解决SAS令牌过期问题
存储账户密钥由Key Vault管理时SAS令牌过期问题的解决方法
一、定位管理存储账户密钥的Key Vault
你可以通过Azure CLI或PowerShell直接查询存储账户的密钥关联属性:
Azure CLI
- 查询存储账户的密钥管理配置,直接获取关联的Key Vault信息:
az storage account show --name <你的存储账户名> --resource-group <资源组名> --query "properties.keyVaultProperties"
返回结果中的keyVaultUri和keyName会明确显示对应的Key Vault地址和存储的密钥名称。
- 若上述命令返回信息不明确,可先获取存储账户的托管标识主体ID,再查询Key Vault的访问策略:
# 获取存储账户的主体ID az storage account show --name <你的存储账户名> --resource-group <资源组名> --query "identity.principalId" -o tsv # 查询关联该主体ID的Key Vault az keyvault list --query "[?properties.accessPolicies[].objectId == '<主体ID>'].name" -o tsv
PowerShell
$storageAccount = Get-AzStorageAccount -ResourceGroupName <资源组名> -Name <你的存储账户名> $storageAccount.KeyVaultProperties
输出中的KeyVaultUri即为管理密钥的Key Vault地址,从中可提取Vault名称。
二、解决SAS令牌过期的可行方案
1. 用Key Vault创建SAS定义(推荐)
在找到对应的Key Vault后,创建SAS定义将SAS模板存储在Vault中,Key Vault会自动使用最新的存储账户密钥生成有效SAS令牌,无需手动维护:
示例:创建指定Blob目录的容器级SAS定义(Azure CLI)
az keyvault storage sas-definition create \ --vault-name <Key Vault名称> \ --account-name <存储账户名> \ --name <自定义SAS定义名称> \ --validity-period P90D \ # SAS令牌有效期,可按需调整 --protocols https \ --permissions rl \ # 权限:读取、列出 --resource-types co \ # 资源类型:容器、对象 --services b \ # 目标服务:Blob --container-name <容器名> \ --prefix <Blob目录路径> # 比如 "docs/reports/"
获取最新SAS令牌:
az keyvault storage sas-definition show --vault-name <Key Vault名称> --account-name <存储账户名> --name <SAS定义名称> --query "sasToken" -o tsv
2. 改用Azure AD身份验证
放弃SAS令牌,使用Azure AD身份验证访问Blob存储:
- 给需要访问的用户/服务主体分配
Storage Blob Data Reader或Storage Blob Data Contributor等角色(限定到目标容器/目录) - 通过Azure AD获取访问令牌,直接调用Blob存储API,完全不受密钥轮换影响
3. 调整密钥轮换周期(谨慎操作)
若业务对安全性要求不高,可修改Key Vault中存储账户密钥的轮换策略,延长轮换间隔,但此操作会降低账户安全性,需谨慎评估。
内容的提问来源于stack exchange,提问作者tony k
相关产品推荐
相关产品推荐

