SecurityGroupの内向きのルールをさっと確認したかったので、AWS CLIだけを極力利用してやってみた。
queryオプションをすらすら書ける自信がないので、備忘として書いときます。
確認環境
Windows 10 AWS CLI 1.16.148
コマンド
# 行折り返しはコマンドプロンプト式の「^」 aws ec2 describe-security-groups ^ --query "SecurityGroups[*].{GroupName:GroupName,GroupId:GroupId, IngressRoules:to_string(IpPermissions[*].[join(`:`,[join(`,`,IpRanges[*].CidrIp),to_string(ToPort)])])}" ^ --output json > ingress_roules.json # Powershell版(「`」をエスケープするために「``」& ConvertFrom-JSON → OutGridView対応) aws ec2 describe-security-groups ` --query "{IngressRoules:SecurityGroups[*].{GroupName:GroupName,GroupId:GroupId, IpPermissions:IpPermissions[*].[join(``:``,[join(``,``,IpRanges[*].CidrIp),to_string(ToPort)])]}}" ` --output json
queryのところで、入れ子になっているIpPermisshions.IpRanges.CidrIpを1行の文字列に変換しています。「JMESPath」というので配列の文字列化なども外部ツールを使わずにできます。が、長くなってしまい、行分割ができないので、適宜ツールの力も借りるのが良いと思いました。
実行例
[ { "GroupName": "default", "IngressRoules": "[[\":null\"]]", "GroupId": "sg-XXXXXXXXXXXXXXX" }, ..., { "GroupName": "local_rules", "IngressRoules": "[[\"192.168.0.0/16:5439\"],[\"192.168.0.0/16:80\"],]", "GroupId": "sg-XXXXXXXXXXXXXXX" }, ... ]
参考にしました