この記事でわかること
-
AWS Lambda boto3でWAFのIP setsを更新するで扱う作業の全体像 - 手順を進める前に確認したい前提
- 今の環境で試すときに気をつけたい点
はじめに
AWS LambdaとBoto3を使って、AWS WAF v2のIP setを更新します。
CLOUDFRONTスコープのリソースを操作するため、クライアントのリージョンはバージニア北部のus-east-1にします。
update_ip_setのAddressesは、既存の一覧へ追加する引数ではなく、更新後の完全な一覧です。各値は203.0.113.10/32のようなCIDR表記にし、意図しない削除を防ぐため、更新前に内容を確認してください。
Lambdaのスクリプト
Lambda
import boto3
WAF_REGION = "us-east-1"
SCOPE = "CLOUDFRONT"
IP_SET_NAME = "IP set名"
IP_SET_ID = "IP set ID"
MAX_RETRIES = 3
waf = boto3.client("wafv2", region_name=WAF_REGION)
def handler(event, context):
addresses = ["203.0.113.10/32"]
return update_ip_addresses(IP_SET_NAME, IP_SET_ID, addresses)
def update_ip_addresses(ip_set_name, ip_set_id, addresses):
"""指定したCIDR一覧でIP setを置き換える。"""
normalized_addresses = sorted(set(addresses))
for _ in range(MAX_RETRIES):
current = waf.get_ip_set(
Name=ip_set_name,
Scope=SCOPE,
Id=ip_set_id,
)
# 競合時は最新のLockTokenを取り直して再試行する
try:
return waf.update_ip_set(
Name=ip_set_name,
Scope=SCOPE,
Id=ip_set_id,
Addresses=normalized_addresses,
LockToken=current["LockToken"],
)
except waf.exceptions.WAFOptimisticLockException:
continue
raise RuntimeError("IP setの更新が競合し、再試行回数を超えました")
実務で使うときの確認ポイント
- AWSアカウント、リージョン、IAM権限、料金影響を確認してから実行する。
- CloudFormationやTerraformを使う場合は、変更差分を確認してから反映する。
- 検証環境で動作確認し、不要なリソースは削除する。
- サービス仕様、上限、推奨設定は変わるため、公式ドキュメントで現在の内容を確認する。
- Boto3 WAFV2
update_ip_set - AWS WAF endpoints and quotas
おわりに
ここまで読んでいただきありがとうございました。
Wealthy Designでは、AWS・Webシステム開発・AI活用など、現場で使える技術を大切にしています。
会社の取り組みは、会社サイトにまとめています。

