2017-07-06 68 views
0

我对此命令有点问题。我试图列出只有规则编号egressACL规则。所以这是我的命令:AWS CLI:描述网络ACL

aws ec2 describe-network-acls --network-acl-ids acl-c324a5a4 --output text --query 'NetworkAcls[*].Entries[*].{RN:RuleNumber}' --filter Name=entry.rule-action,Values=allow Name=entry.egress,Values=true 

这样做的回报是:

100 
110 
120 
130 
140 
150 
160 
170 
32767 
100 
110 
120 
130 
140 
150 
160 
170 
32767 

它基本上是上市既出口和入口规则。出口和入口规则具有相同的规则编号。它还列出了* DENY rule (32767),我也想避免这一点。

任何人都可以帮我用这个命令,我只想列出出口规则号码?

感谢

回答

1

所以你想这是允许的出口规则编号。你可以做到这一点通过下面的查询:

aws ec2 describe-network-acls \ 
    --output text \ 
    --network-acl-ids acl-c324a5a4 \ 
    --query 'NetworkAcls[*].Entries[?(RuleAction==`allow` && Egress==`true`)].{RN:RuleNumber}' 

你可以阅读更多关于Controlling Command Output from the AWS Command Line Interface

+0

权,所以这是你怎么做。非常感谢!最后一件事我能打扰你吗?如何添加到此查询端口范围?假设我在端口20和端口20上有规则...我如何查询特定的端口(包括之前的allow && egress)。谢谢! –

+1

其实,没必要。我应该在请求你获得更多帮助之前试过。只需要做到这一点:PortRange.To =='20' –

1

使用awk和grep的帮助下,我们可以得到如下图所示的只有出口规则列表中。

aws ec2 describe-network-acls --network-acl-ids acl-63092b1a --query 'NetworkAcls[*].Entries[*].[Egress,RuleNumber]' --output text | grep -v False | awk {'print $2'} | grep -v '^$\|^\s*\#' 

要按特定字段的值筛选结果,请使用JMESPath“?”运营商。下面的示例查询输出量仅在美国中西部-2A可用性区域:

$ aws ec2 describe-volumes --query 'Volumes[?AvailabilityZone==`us-west-2a`]' 

For More Information please go through this article

+0

好主意,使用awk。谢谢。但是您可能会同意我的看法,即利用查询字符串的正确使用方式,它看起来更专业 - 您怎么看? –

+0

我同意你@FelipeCaldas – sudheerchamarthi