LoginSignup
1
1

More than 1 year has passed since last update.

AWS:セキュリティグループのインバウンドルールを取得、操作

Posted at

AWSのセキュリティグループをコマンドで、ファイル出力して取得したい場合のやり方。
備忘兼メモ。

前提

  • CloudShell利用
  • またはAWSCLIがあるUNIX系マシン
    おすすめはCloudShell

やり方

行が複数に分かれていますが、行の末尾に「\」で改行しているため、全行をまるごとコピーペーストしてもOK。

情報取得系

  • セキュリティグループ インバウンドルール抽出(全SG、全インバウンドルールを表示)
CSVFILE=securitygroup-inboundrules.csv;\
echo "SgGrpDescription,SgGrpID,SgName,RuleType,PortRangeStart,Protocol,PortRangeEnd,IPType,IPRange,RuleDescription" > ${CSVFILE};\
aws ec2 describe-security-groups --query 'SecurityGroups[].{Name:GroupName, Description:Description, GroupId:GroupId, IngressRules:IpPermissions}' --output=text \
 | tr "\t" "," \
 | sed -e 's/^INGRESSRULES/,,,INGRESSRULES/g' -e 's/^IPRANGES/,,,,,,,IPRANGES/g'  -e 's/^PREFIXLISTIDS/,,,,,,,PREFIXLISTIDS/g' \
 >> ${CSVFILE}

securitygroup-inboundrules.csvがカレントにできるので、それをダウンロード。
1行目でCSVファイル名を定義。2行目でCSVのヘッダ部分を追記。3行目でセキュリティグループを取得。4行目で取得結果を整形(tr)。5行目で空欄、タブ部分をCSV化するためにカンマ区切りに変更。6行目でそれらの内容をCSVにぶっこみ。
最終的にこれにいきついたが、それまでにいくつか試行錯誤があった。

  • セキュリティグループの一覧を表示
    中身のルールではなく、セキュリティグループがいくつあるか、IDがなにかを見たいときに使う。
aws ec2 describe-security-groups --query 'SecurityGroups[].{Name:Tags[?Key==`Name`].Value|[0], SGId:GroupId, VpcId:VpcId, Description:Description}'

Name:Tags[?Key==``Name``].Value|[0], の部分は、タグの名前なので自身の環境の値(Key==Nameの部分)は置き換える。
表示されたら、スペースで次へ進み、止めるときはqを押す。

  • セキュリティグループの一覧を表示:CSV出力
    先のコマンドをCSVに吐く場合の方法。
aws ec2 describe-security-groups --query 'SecurityGroups[].{Name:Tags[?Key==`Name`].Value|[0], SGId:GroupId, VpcId:VpcId, Description:Description}' \
 | jq '.[]' | jq -rs '(.[0]|keys_unsorted),map([.[]])[]|@csv' > sg-all-list.csv

Name:Tags[?Key==``Name``].Value|[0], の部分は、タグの名前なので自身の環境の値(Key==Nameの部分)は置き換える。
sg-all-list.csvがカレントにできるので、それをダウンロード。

  • セキュリティグループ インバウンドルール抽出(特定SGのIDを指定して、インバウンドルールの許可IPを表示)
    そのセキュリティグループが、どのIPを許可しているのかを見たいとき用。
aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX --output=json --query 'SecurityGroups[].IpPermissions[].IpRanges[].{IP: CidrIp, Description: Description}' | jq -r ".[] | [.IP,.Description] | @csv"

sg-XXXXXXXXXXXXXXXXX は見たいセキュリティグループのIDに置換する。

  • セキュリティグループ インバウンドルール抽出(特定SGのIDを指定して、インバウンドルールの許可IPを表示):CSV出力
    先のコマンドをCSVに吐く場合の方法。
aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX --output=json --query 'SecurityGroups[].IpPermissions[].IpRanges[].{IP: CidrIp, Description: Description}' | jq -r ".[] | [.IP,.Description] | @csv" > sg-XXXXXXXXXXXXXXXXX-allowiplist.csv

sg-XXXXXXXXXXXXXXXXX は見たいセキュリティグループのIDに置換する。
sg-XXXXXXXXXXXXXXXXX-allowiplist.csvがカレントにできるので、それをダウンロード。

追加

  • インバウンドルールの追加
aws ec2 authorize-security-group-ingress \
    --group-id sg-XXXXXXXXXXXXXXXXX \
    --ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,IpRanges='[{CidrIp=XXX.XXX.XXX.XXX/32,Description="https allow"}]'

sg-XXXXXXXXXXXXXXXXX は対象のセキュリティグループIDに置換する。
IpProtocol=tcp,FromPort=443,ToPort=443は、穴あけしたいプロトコル、ポート番号のレンジに適宜修正。CidrIp=XXX.XXX.XXX.XXX/32は空けたいIPを記載。Descriptionは説明欄なので、ここではhttpsポートを空けてますよ、と書いているが任意適宜修正。

削除

  • インバウンドルールの削除
aws ec2 revoke-security-group-ingress \
    --group-id sg-XXXXXXXXXXXXXXXXX \
    --ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,IpRanges='[{CidrIp=XXX.XXX.XXX.XXX/32}]'

sg-XXXXXXXXXXXXXXXXX は対象のセキュリティグループIDに置換する。
IpProtocol=tcp,FromPort=443,ToPort=443は、設定されていて、なおかつ閉じる予定のプロトコル、ポート番号のレンジに適宜修正。CidrIp=XXX.XXX.XXX.XXX/32のIPについても設定済みなおかつ閉じたいIPを記載。

参考

【AWS CLI】セキュリティグループのルールの一覧が欲しい!
https://blog.serverworks.co.jp/aws-cli-security-group-rules

CLIを利用して特定のSGに紐づいたEC2一覧とSGルール内容一覧を作成する
https://cloud5.jp/cli-sg-data-get/

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1