如何通过Azure CLI列出Azure Key Vault中所有已过期的机密
列出Azure Key Vault中所有已过期机密的实现方案
Azure CLI的--query参数基于JMESPath语法实现,本身不支持动态调用系统时间函数,无法直接在查询语句内完成过期时间 < 当前时间的筛选,你可以通过终端先获取当前时间再传入查询语句的方式实现需求,两种常用环境的实现命令如下:
PowerShell 环境(全平台兼容)
适用于Windows、macOS、Linux安装了PowerShell的场景,执行命令前将<MyVault>替换为你的密钥保管库名称即可:
$utcNow = (Get-Date).ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssZ") az keyvault secret list --vault-name <MyVault> ` --query "[?attributes.expires != null] | [?attributes.expires < ``$utcNow``].{Id:id, ExpireTime:attributes.expires}" ` --output table
注意:Key Vault存储的时间均为UTC时区,必须将本地时间转换为UTC后再做比对,否则会因时区偏差导致筛选结果错误。
Bash 环境(Linux/macOS/WSL默认终端)
适用于类Unix系统默认终端环境,替换<MyVault>后执行:
utcNow=$(date -u +"%Y-%m-%dT%H:%M:%SZ") az keyvault secret list --vault-name <MyVault> \ --query "[?attributes.expires != null] | [?attributes.expires < \`$utcNow\`].{Id:id, ExpireTime:attributes.expires}" \ --output table
逻辑说明
- 第一层筛选
attributes.expires != null用于排除未设置过期时间的永久有效机密,避免空值比对引发错误 - Key Vault返回的过期时间为标准ISO8601格式字符串,字典序和时间先后顺序完全一致,直接做字符串大小比对即可得到正确的时间判断结果,无需额外做类型转换
- 如果只需要返回机密名称而非完整资源ID,可以把查询语句中的
Id:id替换为SecretName:name - 如果需要其他输出格式,修改
--output后的参数为json、tsv等支持的格式即可
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

