AWS奮闘記④ ~IPSetsへの登録~

ログイン画面で不正アクセスが複数回あった場合、
そのIPアドレスからのアクセスを遮断する仕組みを
WAFと連携する形でboto3を使用してLambda(Python)で作成した。
備忘録として残す。
1.まずは、IPアドレスグループ(IP Sets)の設定を行う
2.次にAWS WAFの設定を行う
・ACLの名前入力、リソース種別を設定する。(CloudFrontかリージョンを選択する。リージョンの方は、ALB、ApiGatewayとなる)
・対象のCloudFrontを選択する
・独自のルールを作成する
・ルールの設定を行う(指定のIPアドレスによるアクセスを防ぐ設定)
・その他の設定~確認画面
3.Lambda(Python)のソースコード
import boto3
client = boto3.client(‘wafv2′, region_name=’us-east-1’)
scope = ‘CLOUDFRONT’
acl_name = ‘{ACL作成時の入力した名前}’
acl_id = ‘{ACL作成後にACL一覧に表示されているID}’
rule_name = ‘{ACL作成時のルール設定した名前}’
ipsets_name = ‘{IP Sets作成時のIP Setsの名前}’
ipsets_id = ‘{IP Sets作成時のIP SetsのID}’
def lambda_handler(event, context) :
# ルールでブロックしたIPアドレスを取得
responseAddips = client.get_rate_based_statement_managed_keys(
Scope = scope,
WebACLName = acl_name,
WebACLId = acl_id,
RuleName = rule_name
)
responseAddips = responseAddips[‘ManagedKeysIPV4’][‘Addresses’]
# IP SetsよりIPアドレスを取得する
IPSets = client.get_ip_set(
Name = ipsets_name,
Scope = scope,
Id = ipsets_id
)
IPSets = IPSets[‘IPSet’][‘Addresses’]
# IP Setsに登録されていないIPのリストを作成
addIPList = list(set(ipaddress) – set(IPSets))
# IPリストから重複を削除する
addIPList = list(set(addIPList))
# IPがすでにIP Setsに登録されている場合終了
if len(addIPList) == 0:
return()
# upd_ip_setは指定されたIPを置き換えるため、既存のIPリストと追加するIPリストを結合する
addIPList = IPSets + addIPList
# IP Setsを更新するためのトークンを取得
responseToken = client.get_ip_set(
Name = ipsets_name,
Scope = scope,
Id = ipsets_id
)
Token = responseToken[“LockToken”]
# IP Setsを更新
response = client.update_ip_set(
Name = ipsets_name,
Scope = scope,
Id = ipsets_id
Addresses = addIPList,
LockToken = Token
)









