目次
はじめに
こんにちは、omkです。
前回はマネージドプレフィックスを用いてS3のIP制限を自動化しました。
今回は拠点IPでのホワイトリストを想定して、CloudFront向けのAWS WAFのIPSetsをマネージドプレフィックスリストで自動管理します。
Lambda関数
Python3で動かします。
import json
import boto3
import os
def lambda_handler(event, context):
prefixlist = os.environ['PrefixListId']
ipsetsname = os.environ['IPSets']
# Get IPs From Managed Prefix List
try:
ec2client = boto3.client('ec2')
response = ec2client.get_managed_prefix_list_entries(
PrefixListId=prefixlist,
MaxResults=100
)
except Exception as e:
print(e)
exit(1)
ips = []
for entry in response['Entries']:
ips.append(entry['Cidr'])
print(ips)
# Change IPs on WAF IPSets
client = boto3.client('wafv2', region_name='us-east-1')
try:
ipsets = client.list_ip_sets(
Scope='CLOUDFRONT'
)
except Exception as e:
print(e)
exit(1)
if len(ipsets) == 0:
print("no ipsets")
exit(0)
print(ipsets)
for ipset in ipsets['IPSets']:
if ipset['Name'] == ipsetsname:
id = ipset['Id']
locktoken = ipset['LockToken']
break
if not id :
print("no ipsets is matched to you provided")
exit(1)
try:
response = client.update_ip_set(
Name = ipsetsname,
Scope = 'CLOUDFRONT',
Id=id,
Addresses=ips,
LockToken=locktoken
)
except Exception as e:
print(e)
exit(1)
exit(0)
以下にざっくりポイントごとにコードの説明をば。
まずは対象のマネージドプレフィックスリストに登録されたIPの一覧を取得します。
response = ec2client.get_managed_prefix_list_entries(
PrefixListId=prefixlist,
MaxResults=100
)
次にWAFのクライアントを作りますが、CloudFront向けなのでリージョンを「us-east-1」で指定します。
client = boto3.client('wafv2', region_name='us-east-1')
対象IPSetのIDとLockTokenを取得します。
これらは設定の更新時に利用します。
for ipset in ipsets['IPSets']:
if ipset['Name'] == ipsetsname:
id = ipset['Id']
locktoken = ipset['LockToken']
break
マネージドプレフィックスのIPでIPSetを上書きします。
response = client.update_ip_set(
Name = ipsetsname,
Scope = 'CLOUDFRONT',
Id=id,
Addresses=ips,
LockToken=locktoken
)
あとはWAF ACLのホワイトリストに登録して利用すればIP制限の完成です。
このLambdaをEventBridgeから定期的に実行すればマネージドプレフィックスリストの更新後に自動で適用出来ます(現状はイベント駆動できないのでスケジュールのみ)。
終わりに
という感じでマネージドプレフィックスリストのIPでAWS WAFのIP制限を実装してみました。
今のところ直接的にはセキュリティグループにしか連携できないマネージドプレフィックスですが色々使いたい用途があるので諸々のIP関連のサービスと連携できるようになると良いなと思います。
以上、お付き合いありがとうございました。
アーキテクト課のomkです。
AWSについて雑多に取り組んだ内容を発信しています!!