これが最も効率的なアプローチではないと確信していますが、このawsコマンドの結果の形式を指定するのに役立ちます。
aws ec2 describe-security-groups --group-ids sg-xxxxxxxxxxxxx --region=us-east-1 --profile=default | sed -n '/\"FromPort\"\: 22\,/,/\"ToPort\": 22\,/p'
結果には、ポート22に関連するデータが表示されます。結果の例は次のとおりです。
{
"CidrIp": "1.2.3.4/32"
},
{
"CidrIp": "5.6.7.8/32"
},
{
"Description": "test1",
"CidrIp": "4.3.2.1/32"
},
{
"Description": "test2",
"CidrIp": "8.7.6.5/32"
},
前述のように、一部の項目には説明が含まれている可能性がありますが、他の項目には説明が含まれていない場合があります。
結果の形式を次のように指定したいと思います。
1.2.3.4/32
5.6.7.8/32
4.3.2.1/32 <tab> test1
8.7.6.5/32 <tab> test2
awsコマンドに--filtersを追加しようとしましたが、目的の出力を取得する最善の方法は不明です。助けてくれてありがとう!
答え1
AWS CLI を使用しているため、必要な書式設定と出力を取得するには、および--query
/またはフラグを使用することをお勧めします。--filter
AWS CLI は、サーバー側およびクライアント側のフィルタリングを提供します。。
この--filter
フラグは、データセットが大きい場合にHTTP応答時間を向上させるのに役立つサーバー側のフィルタリングを提供しますが、このフラグはより強力なクライアント側のフィルタリングを提供します--query
。JMESパス構文フラグを使用して--query
フィルタリングします。
--query
以下は、このフラグを使用して目的の出力を取得する例です。
--query
注:+を組み合わせて使用する--filter
か、単独で使用して--query
スライスしてカットする方法はいくつかあります。
aws ec2 describe-security-groups --group-ids sg-xxxxxxxxx --filter 'Name=ip-permission.from-port,Values=[22]' 'Name=ip-permission.to-port,Values=[22]' --query 'SecurityGroups[*].IpPermissions[?FromPort == `22` && ToPort == `22`].IpRanges[*].[CidrIp,Description]' --region <AWS_REGION> --profile <PROFILE> --output text
各 API メソッドには、サーバー側の応答で「検索」できる特定のフィルターが用意されているため、API 呼び出しに関するドキュメントを参照してください。
また、--output text
何が使用されているか記録してください。これはタブの代わりに空白ですが、実際に探している形式で出力されます。
EC2 SG APIが提供するフィルタ(たとえば ip-permission.to-port
)を使用していることがわかります。また、上記のコマンドで使用されているバックティックも参照してください。私のMacでは正常に動作します。