0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

[AWS] Security Group と WAF に IP アドレスを登録するためのスクリプト

Last updated at Posted at 2024-07-10

はじめに

↓ の機能拡張版で、WAF にも登録するようにスクリプトを修正しました。

仕様

指定された IP アドレスのリストを AWS の SG と WAFに登録するためのスクリプトです。IP アドレスにCIDR 表記("/" が含まれているかどうか)によって条件分岐し、それに応じて適切に SG と WAF に登録します。(デフォルトで /32 を追加します)

コマンド

上記仕様に加えて以下のオプションがあります。

  • SG を二つ用意
    • SG_ID1 にはポート 3389 で登録、SG_ID2 にはポート 443 で登録
  • DESCRIPTION も含め登録する
#!/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
    if [ `echo ${IP_ARRAY[$i]} | grep '/'` ]; then
        aws ec2 authorize-security-group-ingress \
            --group-id $SG_ID1 \
            --ip-permissions IpProtocol=tcp,FromPort=3389,ToPort=3389,IpRanges="[{CidrIp=${IP_ARRAY[$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_ARRAY[$i]},Description="${DESCRIPTION[$i]}"}]"

        # waf は一件追加というのが出来ないため、現状の全量 + 更新したい 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更新
        aws wafv2 update-ip-set \
            --name $WAF_NAME \
            --scope REGIONAL \
            --region=ap-northeast-1 \
            --id $WAF_ID \
            --addresses $IPs ${IP_ARRAY[$i]} \
            --lock-token $LOCK_TOKEN

    else
        aws ec2 authorize-security-group-ingress \
            --group-id $SG_ID1 \
            --ip-permissions IpProtocol=tcp,FromPort=3389,ToPort=3389,IpRanges="[{CidrIp=${IP_ARRAY[$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_ARRAY[$i]}/32,Description="${DESCRIPTION[$i]}"}]"

        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更新
        aws wafv2 update-ip-set \
            --name $WAF_NAME \
            --scope REGIONAL \
            --region=ap-northeast-1 \
            --id $WAF_ID \
            --addresses $IPs ${IP_ARRAY[$i]}/32 \
            --lock-token $LOCK_TOKEN
    fi
done
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0