如何在AWS CLI中仅按值过滤,无视标签名称?
解决方案
AWS CLI的describe-security-groups不支持用通配符*作为过滤器名称,你之前的写法不符合官方过滤器规则,所以报错。针对你的需求,分两种场景给出可行命令:
场景1:查找自身标签值包含EBM的安全组
如果目标是找安全组自己的标签里任意键对应的值包含EBM的,直接使用官方支持的tag-value过滤器:
aws --region sa-east-1 ec2 describe-security-groups --filters 'Name=tag-value,Values=*EBM*'
这个过滤器会匹配所有至少有一个标签值含EBM的安全组,不管标签键是什么。
场景2:查找关联了带EBM标签值的EC2实例的安全组
如果目标是找那些被带有任意标签值为EBM的EC2实例使用的安全组,需要分两步操作:
- 先获取所有符合条件的EC2实例ID:
INSTANCE_IDS=$(aws --region sa-east-1 ec2 describe-instances --filters 'Name=tag-value,Values=*EBM*' --query 'Reservations[*].Instances[*].InstanceId' --output text)
- 再根据实例ID查询对应的安全组:
aws --region sa-east-1 ec2 describe-security-groups --group-ids $(aws --region sa-east-1 ec2 describe-instances --instance-ids $INSTANCE_IDS --query 'Reservations[*].Instances[*].SecurityGroups[*].GroupId' --output text | tr '\t' ' ')
或者用jq工具一步完成(需提前安装jq):
aws --region sa-east-1 ec2 describe-security-groups --group-ids $(aws --region sa-east-1 ec2 describe-instances --filters 'Name=tag-value,Values=*EBM*' | jq -r '.Reservations[].Instances[].SecurityGroups[].GroupId' | sort -u)
关键说明
- AWS CLI的过滤器名称必须是官方预定义的(比如
tag-value、tag-key、group-name等),不能用通配符替代,这是你之前命令报错的核心原因。 tag-value过滤器支持通配符*,可以匹配包含指定字符串的标签值,且不限制标签键的名称。
内容的提问来源于stack exchange,提问作者TheHero
相关产品推荐
相关产品推荐

