You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JMESPath按双条件筛选AWS IAM MFA设备的SerialNumber

解决方案

你可以通过JMESPath的条件表达式实现需求,核心是先判断MFA设备总数,再分支处理:

aws iam list-mfa-devices --profile xxx --query 'length(MFADevices) == 1 ? MFADevices[0].SerialNumber : (MFADevices[].SerialNumber | [?contains(@, `cli`)] | [0])'

表达式逻辑拆解

  • 判断设备总数:length(MFADevices) == 1 直接检查根节点下的MFADevices数组长度
  • 分支处理:
    • 当设备数为1时:直接取第一个设备的SerialNumber → MFADevices[0].SerialNumber
    • 当设备数大于1时:先提取所有SerialNumber,再筛选包含cli的项,最后取第一个匹配结果 → MFADevices[].SerialNumber | [?contains(@, cli)] | [0]

场景验证

  • 单个MFA设备场景:命令会直接输出该设备的SerialNumber
  • 多个MFA设备场景:自动筛选出带cli标识的设备SerialNumber;若无匹配项,返回null

之前表达式报错原因

你之前的错误是因为管道过滤后,上下文切换到了SerialNumber的数组,此时MFADevices已不在当前上下文内,length(MFADevices)会返回null,触发类型错误。上面的表达式始终基于根节点判断长度,避免了这个问题。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:10:35