はじめに
↓ の機能拡張版で、Security Group と WAF に設定されている IP を削除するスクリプトを修正しました。
仕様
AWS の SG と WAF から 指定された IP アドレスを削除するためのスクリプトです。IP アドレスにCIDR 表記("/" が含まれているかどうか)によって条件分岐し、それに応じて適切に削除します。(デフォルトで /32 を追加します)
コマンド
上記仕様に加えて以下のオプションがあります。
- SG を二つ用意
- SG_ID1 ではポート 3389 のもの、SG_ID2 ではポート 443 のものを削除
#!/bin/bash
set -euo pipefail
# 変数格納
IP_ARRAY=("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"
WAF_ID="XXX"
WAF_NAME="testip"
for (( i=0; i < ${#IP_ARRAY[*]}; i++ )); do
aws ec2 revoke-security-group-ingress \
--group-id $SG_ID1 \
--protocol tcp \
--port 3389 \
--cidr ${IP_ARRAY[$i]}
aws ec2 revoke-security-group-ingress \
--group-id $SG_ID2 \
--protocol tcp \
--port 443 \
--cidr ${IP_ARRAY[$i]}
# 現在登録されているIPを取得
json=$(aws wafv2 get-ip-set \
--name $WAF_NAME \
--scope REGIONAL \
--region=ap-northeast-1 \
--id $WAF_ID)
IPs=$(echo $json | jq -r '.IPSet.Addresses[]')
LOCK_TOKEN=$(echo $json | jq -r '.LockToken')
# リストから指定のIPを省き、それを登録するようにする
NEW_IPs=$(echo ${IPs//${IP_ARRAY[$i]}/})
# IP更新
aws wafv2 update-ip-set \
--name $WAF_NAME \
--scope REGIONAL \
--id $WAF_ID \
--addresses $NEW_IPs \
--lock-token $LOCK_TOKEN
done