2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS Lambda boto3でWAFのIP setsを更新する

2
Last updated at Posted at 2020-11-27

AWS Lambda boto3でWAFのIP setsを更新するのアイキャッチ

この記事でわかること

  • AWS Lambda boto3でWAFのIP setsを更新する で扱う作業の全体像
  • 手順を進める前に確認したい前提
  • 今の環境で試すときに気をつけたい点

はじめに

AWS LambdaとBoto3を使って、AWS WAF v2のIP setを更新します。
CLOUDFRONTスコープのリソースを操作するため、クライアントのリージョンはバージニア北部のus-east-1にします。

update_ip_setAddressesは、既存の一覧へ追加する引数ではなく、更新後の完全な一覧です。各値は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活用など、現場で使える技術を大切にしています。

会社の取り組みは、会社サイトにまとめています。

2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?