[AWS] 脆弱性/侵入テスト申請をする前のチェック用bashスクリプト

2014.01.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

AWSにおいて脆弱性テストを行なうには事前申請が必要です。弊社ではこの申請を代行していますが、 m1.small もしくは t1.microを動作させていて申請が却下されるということがたまにあります。 このミスを防ぐためのチェック用のシェルスクリプトを作成したので紹介します。

脆弱性テスト申請前チェックスクリプト

必要なものは

  • jq
  • awscli

です。amazon linuxであればjqをインストールすればスクリプトが実行できます。

[ec2-user@ip-XXX-XXX-XXX-XXX ~]$ sudo yum install -y jq

スクリプトはこちらになります。

#!/bin/bash                                                                                          
EC2_REGION=ap-northeast-1

INSTANCES=`aws --region=$EC2_REGION ec2 describe-instances`
INSTANCE_TYPES=`echo $INSTANCES| jq -r ".Reservations[].Instances[].InstanceType"`
INSTANCE_IDS=(`echo $INSTANCES| jq -r ".Reservations[].Instances[].InstanceId"   | tr '\n' ' ' `)
INSTANCE_STATUS=(`echo $INSTANCES| jq -r ".Reservations[].Instances[].State.Name" | tr '\n' ' ' `)

i=0
result=0
for itype in ${INSTANCE_TYPES[@]}; do
  if [ "${itype}" = 'm1.small' -o "${itype}" = 't1.micro' ]; then
      if [ "${INSTANCE_STATUS[$i]}" = 'running' ]; then
          echo "${INSTANCE_IDS[$i]} : ${itype} is running."
          result=1
      fi
  fi
  i=$i+1
done

if [ ${result} = 1 ]; then
 echo "Please check instance type(s)."
 exit 1
else
 echo "You can send \"AWS Vulnerability / Penetration Testing Request Form\"."
 exit 0
fi

[2014/1/8追記]: 植木さんよりjqで"を消す方法、ふくださんより動作していないインスタンスは対象外という情報をおしえてもらったのでスクリプトを変更しました。

とてもシンプルなスクリプトです。awsコマンドでインスタンス情報をjson形式で取得。その文字列をjqをつかってインスタンスIDとインスタンスタイプの配列として格納、要素を一つずつチェックし、m1.small もしくは t1.microであれば、インスタンスIDとともに表示します。チェックが問題なくおわれば、成功のメッセージ、問題があれば失敗のメッセージだして終了です。

check_pen.shとして上のスクリプトを保存し実行した結果がこちらです。t1.microが動いているので、失敗のメッセージが表示されます。

[ec2-user@ip-XXX-XXX-XXX-XXX ~]$ ./check_pen.sh
i-XXXXXXXX : t1.micro is running.
Please check instance type(s).

おわりに

脆弱性テストを申請する前に実行すると便利なチェックスクリプトを紹介しました。こちら、ServerWorksさんのエンジニアブログ【30分で動かすシリーズ】AWS EC2の利用料金表を扱いやすくしてみるを参考にして作成してみました。 maedaさんありがとうございました。