[aws cli]セキュリティグループへ一時的にパブリックIPアドレスを追加/削除するスクリプト

2015.07.21

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

はじめに

こんにちは、yokatsukiです。

AWSの運用をしていると、一時的なセキュリティグループの設定変更がしばしば発生します。例えばRDSにリモート環境からアクセスしたい、という場合です。その際に以下の画面操作が毎回発生します。

  1. Webページを開く
  2. Management Consoleにサインイン
  3. EC2 Dashboardにアクセス
  4. Security Group画面へ移動
  5. 目的のセキュリティグループに対してパブリックIPアドレス追加/削除

...面倒臭いですね。面倒臭いです。これをターミナル開いてコマンド一発で実施できるようにしました。

参考にしたのはたけたけさんの下記過去エントリです。

[AWS][CLI] EC2にSSHするときだけ、security groupに自分のアドレスを追加する

準備1:プロファイルの登録

事前に発行したAWSクレデンシャル情報をプロファイルとして登録しておきます。既にプロファイルを登録されている方は操作不要です。

$ aws configure --profile AAA
AWS Access Key ID [None]: ********************
AWS Secret Access Key [None]: ********************
Default region name [None]: ap-northeast-1
Default output format [None]: json

この操作によって、以下のファイルにプロファイル情報が追加されます。

$ cat ~/.aws/config
[profile AAA]
output = json
region = ap-northeast-1
$ cat ~/.aws/credentials
[AAA]
aws_access_key_id=********************
aws_secret_access_key=********************

準備2:セキュリティグループID確認

セキュリティグループのGroup IDを事前に確認しておきます。Group IDは、後述のスクリプトに記入します。

スクリプト作成、実行

IPアドレス追加スクリプト

以下のスクリプトを作成します。スクリプト内変数MYSECGROUPに先程確認したセキュリティグループIDを記載しておきます。

$ cat ./addSecEntry.sh
#!/bin/sh
if [ -e ./myip.txt ]; then
./delSecEntry.sh
fi
curl -s -o ./myip.txt http://checkip.amazonaws.com/
MYIP=`cat ./myip.txt`
MYSECGROUP=sg-********
aws --profile AAA ec2 authorize-security-group-ingress --group-id $MYSECGROUP --protocol tcp --port 5439 --cidr $MYIP/32

このスクリプトのポイントは以下です。

  • セキュリティグループに追加したIPアドレスをmyip.txtに保存する
  • myip.txtが既にある場合は、セキュリティグループ登録済みということで、一旦myip.txt記載のIPアドレスを削除して、現在のIPアドレスで再登録する
  • 現在のIPアドレスはAWSのパブリックIPアドレス検索サービス(http://checkip.amazonaws.com/)を使用
  • 参考:Linux インスタンス用の受信トラフィックの認可

IPアドレス削除スクリプト

以下のスクリプトを作成、実行します。前提として、上記IPアドレス追加スクリプトによって、myip.txtが作成されていることが必要になります。myip.txtが存在しない場合、事前に登録されたIPアドレスは存在しないとみなし、エラーになります。

$ cat ./delSecEntry.sh
#!/bin/sh
if [ ! -e ./myip.txt ]; then
echo "not found ./myip.txt. Did you run the configuration of the security group?"
exit
fi
MYIP=`cat ./myip.txt`
MYSECGROUP=sg-********
aws --profile AAA ec2 revoke-security-group-ingress --group-id $MYSECGROUP --protocol tcp --port 5439 --cidr $MYIP/32
rm ./myip.txt

まとめ

モバイル環境で必要な、セキュリティグループへ自身のパブリックIPアドレスを一時追加、削除を行うスクリプトを作成しました。基本的な操作だけに頻度が高く、これでだいぶ楽になりました。

今後改良するアイデアとして、プロファイルやセキュリティグループ名をパラメータ化すると、より便利になるかなと思いますが、まずはここまで。それでは、また。