AWSのSecurityGroup関連の調査・更新CLIメモ
こんにちは。小宮です。
今回ご紹介するのはpiculetでgroupファイルでルール更新というのではありません。
ちょっと整理とか削除とかしたいけど手でポチぽちするには量が多いしオペミスが心配だし手間だし早く帰りたいので
どれに紐づいてるのか一括で調べたい一括更新したいといった時にforループとCLIでなんとかする方法です。
SecurityGroupの上限緩和申請の際にSGの書き方的に通信パフォーマンスがアレで引っ掛かった時等にこんなような作業が必要に。
あんまり使いこなせてるほうでもないのですが、一応載せておきます。ご利用は自己責任でお願いします。
みなさま似たようなことしててもっと洗練されたやり方をご存知の方も沢山いそうです。
弊社だと稲田さんほか協力部隊の方々がもっと詳しそうな気がします。マサカリ歓迎いたします。
稲田さんに聞いたらもっとoutputはtextにしてjoinを使いこなせと言っていたのでそのうち何か書いてくれると思います。
SecurityGroupのidから紐づくインスタンス情報を得る
これは既存の情報を得るだけで更新しないので気軽に実行できると思います。
まずリストを作る(消したいSGをいれる)
1 2 3 4 5 6 7 8 |
vi listfile sg-xxxxxxxx,SG_hoge_dev1 sg-yyyyyyyy,SG_fuga_dev2 ... list=listfile profile=xxxx |
リストを読み込んでdescribe-instancesを実行
1 2 3 4 5 6 7 8 9 10 11 |
for i in `cat $list|grep -v elb` do groupid=`echo $i |awk -F, '{print $1}'` groupname=`echo $i |awk -F, '{print $2}'` echo $i aws ec2 describe-instances --profile ${profile} --filters Name=instance.group-id,Values=$groupid --output text \ --query 'Reservations[].Instances[*].[InstanceId,PrivateIpAddress,Tags[?Key==`Name`].Value[]]' --output json \ |sed -e '/\]/d' -e '/\[/d' -e '/^$/d' -e 's/ //g'|perl -pe 's/,[ ]*\n/,/g'|sort -t , -k 3 echo "" done |
出てきた結果からlistfileをつくりSGはずしたり替えたりするときにつかいます。
SecurityGroupのidから紐づくELB情報を得る
1 2 3 4 5 6 7 8 9 10 11 12 |
for i in `cat $list` do groupid=`echo $i |awk -F, '{print $1}'` groupname=`echo $i |awk -F, '{print $2}'` echo $i aws elb describe-load-balancers --profile ${profile} \ --query 'LoadBalancerDescriptions[*].[LoadBalancerName,SecurityGroups]' --output=json \ |sed -e 's/\[//g' -e 's/\],//g' -e 's/\]//g' -e 's/ //g'|perl -pe "s/,\n/,/g" \ |sed -e '/^$/d'|perl -pe 's/,\n/,/g'|grep $groupid echo "" done |
出てきた結果からlistfileをつくりSGはずしたり替えたりするときにつかいます。
インスタンスのSecurityGroupを特定のSecurityGroupに変える
こちら以降は更新されるのでご利用は自己責任でお願いします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
list=xxxxx for i in `cat $list|grep -v xxxxx` do instanceid=`echo $i|awk -F, '{print $1}'|sed -e 's/"//g'` attached_groups=`aws ec2 describe-instance-attribute --instance-id ${instanceid} --attribute groupSet --profile ${profile} --output=text|grep GROUPS|awk '{print $2}'|perl -pe 's/\n/ /g'` add_groupid="sg-xxxxxxxx" groupids=`echo ${add_groupid}` echo $i echo "curgroupids: ${attached_groups}" echo "newgroupids: ${groupids}" aws ec2 modify-instance-attribute --instance-id ${instanceid} --groups ${groupids} --profile ${profile} --no-dry-run echo "result:" aws ec2 describe-instance-attribute --instance-id ${instanceid} --attribute groupSet --profile ${profile} --output=text|grep GROUPS|awk '{print $2}' echo "" done |
※現状だけ調べたい場合は、modify-instance-attributeの行を外して実行してください。リテラルの文字列は適宜変えてください。
インスタンスのSecurityGroupから特定のSecurityGroupをはずす
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
for i in `cat $list|grep xxxxxxx` do instanceid=`echo $i|awk -F, '{print $1}'|sed -e 's/"//g'` attached_groups=`aws ec2 describe-instance-attribute --instance-id ${instanceid} --attribute groupSet --profile ${profile} --output=text|grep GROUPS|awk '{print $2}'|perl -pe 's/\n/ /g'` groupids=`echo ${attached_groups}|sed -e 's/sg-aaaaaaaa//g'|tr -s ' '` echo $i echo "curgroupids: ${attached_groups}" echo "newgroupids: ${groupids}" aws ec2 modify-instance-attribute --instance-id ${instanceid} --groups ${groupids} --profile ${profile} --no-dry-run echo "result:" aws ec2 describe-instance-attribute --instance-id ${instanceid} --attribute groupSet --profile ${profile} --output=text|grep GROUPS|awk '{print $2}' echo "" done |
※現状だけ調べたい場合は、modify-instance-attributeの行を外して実行してください。リテラルの文字列は適宜変えてください。
ELBのSecurityGroupを特定のSecurityGroupに変える
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
for i in `cat $list|grep ELB` do elbname=`echo $i|awk -F, '{print $1}'|sed -e 's/"//g'` add_groupid="sg-bbbbbbbb" echo $elbname current_groups=`aws elb describe-load-balancers --profile ${profile} --load-balancer-names ${elbname} --query 'LoadBalancerDescriptions[*].[LoadBalancerName,SecurityGroups]' --output=text|grep sg-|sed -e 's/\t/ /'` newgroupids=`echo ${add_groupid}` echo "curgroupid: ${current_groups}" echo "newgroupid: ${newgroupids}" aws elb apply-security-groups-to-load-balancer --load-balancer-name ${elbname} --security-groups ${newgroupids} --profile ${profile} echo "result:" aws elb describe-load-balancers --profile ${profile} --load-balancer-names ${elbname} --query 'LoadBalancerDescriptions[*].[LoadBalancerName,SecurityGroups]' --output=text|grep sg- echo "" done |
※現状だけ調べたい場合は、apply-security-groups-to-load-balancerの行を外して実行してください。リテラルの文字列は適宜変えてください。
ELBのSecurityGroupから特定のSecurityGroupをはずす
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
for i in `cat $list|grep ELB` do elbname=`echo $i|awk -F, '{print $1}'|sed -e 's/"//g'` echo $elbname current_groups=`aws elb describe-load-balancers --profile ${profile} --load-balancer-names ${elbname} --query 'LoadBalancerDescriptions[*].[LoadBalancerName,SecurityGroups]' --output=text|grep sg-|sed -e 's/\t/ /'` newgroupids=`echo ${current_groups}|sed -e 's/sg-cccccccc//g'|tr -s ' '` echo "curgroupid: ${current_groups}" echo "newgroupid: ${newgroupids}" aws elb apply-security-groups-to-load-balancer --load-balancer-name ${elbname} --security-groups ${newgroupids} --profile ${profile} echo "result:" aws elb describe-load-balancers --profile ${profile} --load-balancer-names ${elbname} --query 'LoadBalancerDescriptions[*].[LoadBalancerName,SecurityGroups]' --output=text|grep sg- echo "" done |
※現状だけ調べたい場合は、apply-security-groups-to-load-balancerの行を外して実行してください。リテラルの文字列は適宜変えてください。
意味不なところはhelpやmanみたり分かるところまでパイプでつなげて渡してるところを削っていって実行結果みていただけるとよいかと思います。
aws elb describe-load-balancers helpとか打つとマニュアルが表示されます。
ではみていただいてありがとうございました。