管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

SecurityGroupをシンプルに出力する(AWS CLI)

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"
    }, 
    ...
]

参考にしました