はじめに
サーバー(EC2 インスタンス)へのアクセス制御は Security Group(以下 SG)の IP アドレスで制御しています。
CICD で IP アドレスを登録しに行くスクリプトが必要になり用意しました。
仕様
指定された IP アドレスのリストを AWS の SG に登録するためのスクリプトです。IP アドレスにCIDR 表記("/" が含まれているかどうか)によって条件分岐し、それに応じて適切に SG に登録します。(デフォルトで /32 を追加します)
コマンド
上記仕様に加えて以下のオプションがあります。
- SG を二つ用意
- SG_ID1 にはポート 3389 で登録、SG_ID2 にはポート 443 で登録
- DESCRIPTION も含め登録する
#!/bin/bash
set -euo pipefail
# SGにIP登録。/があろうとなかろうと場合分けで登録できる
# 変数格納
IP=("5.5.5.5/32" "6.6.6.6/32" "7.7.7.7" "8.8.8.8/32" "9.9.9.9")
DESCRIPTION=("go" "roku" "nana" "hati" "kyu")
SG_ID1="sg-XXXXXXXXXXXXXXXXX"
SG_ID2="sg-YYYYYYYYYYYYYYYYY"
for (( i=0; i < ${#IP[*]}; i++ )); do
if [ `echo ${IP[$i]} | grep '/'` ]; then
aws ec2 authorize-security-group-ingress \
--group-id $SG_ID1 \
--ip-permissions IpProtocol=tcp,FromPort=3389,ToPort=3389,IpRanges="[{CidrIp=${IP[$i]},Description="${DESCRIPTION[$i]}"}]"
aws ec2 authorize-security-group-ingress \
--group-id $SG_ID2 \
--ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,IpRanges="[{CidrIp=${IP[$i]},Description="${DESCRIPTION[$i]}"}]"
else
aws ec2 authorize-security-group-ingress \
--group-id $SG_ID1 \
--ip-permissions IpProtocol=tcp,FromPort=3389,ToPort=3389,IpRanges="[{CidrIp=${IP[$i]}/32,Description="${DESCRIPTION[$i]}"}]"
aws ec2 authorize-security-group-ingress \
--group-id $SG_ID2 \
--ip-permissions IpProtocol=tcp,FromPort=443,ToPort=443,IpRanges="[{CidrIp=${IP[$i]}/32,Description="${DESCRIPTION[$i]}"}]"
fi
done