AWS Config Rulesのマネージドルール一覧と詳細をぶっこ抜くスクリプト書いた

AWS Config Rulesの一覧と詳細を取得するPythonスクリプトを作成したので公開します。100個以上あるマネージドルールを活用しましょう!
2019.11.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

皆さん、スクリプト書いてますか?(挨拶

AWS Config Rulesは非常に楽しい機能です。AWSのリソースが設定変更されたときに、コンプライアンス条件に満たなければアラートを出したり、自動で修復したりできます。下記がわかりやすいです。

セキュリティグループのSSH全開放をAWS Configで自動修復したら3分くらいで直ったからみんな使ってほしい件

そんなConfig Rulesですが、ルールは2種類あって、AWSが提供するマネージドルールとユーザがLambdaで実装するカスタムルールがあります。マネージドルールは現状で100個以上もあり、すぐに使い始められるのでこれを活用しない手はありません。

しかしながら、たくさんありすぎてどれがどんなものなのかが分かりづらいです。オリジナルの情報は下記にあります。

AWS Config マネージドルールのリスト - AWS Config

それぞれ詳細ページにアクセスすれば詳細な内容がわかるので、スクレイピングするスクリプトを書きました。

スクリプト

Python 3.6で動かしています。BeautifulSoupを利用しているので事前にpip installしてください。

import re
import csv
import requests
from bs4 import BeautifulSoup

re_delete_indent = re.compile(r'\n +')
base_url = "https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/"
target_url = "https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/managed-rules-by-aws-config.html"
r = requests.get(target_url)
r.encoding = 'utf-8'

soup = BeautifulSoup(r.text, 'lxml')
# delete pankukzu list
soup.find(id="main-col-body").find("table").extract()
# get config rules child pages
link_list = soup.find(id="main-col-body").find_all("a")

rules = []
for child in link_list:
	child_url = base_url + child.get('href')
	r2 = requests.get(child_url)
	r2.encoding = 'utf-8'
	soup2 = BeautifulSoup(r2.text, 'lxml')
	detail = soup2.find(id="main-col-body").p.text.strip()
	# delete indent
	detail = re_delete_indent.sub(' ', detail)
	rules.append({'rule_name': soup2.h1.text, 'rule_detail': detail})

file_name = "config_rules_list.csv"
with open(file_name, 'w') as f:
	writer = csv.DictWriter(f, ["rule_name", "rule_detail"])
	writer.writeheader()
	writer.writerows(rules)
	print('success!')

実行するとルール名とルールの詳細のcsvが出来上がります。

まとめ

ちょっとしたスクリプトですがせっかくなので共有しました。

スクレイピングはちょっと面倒なので誰かの参考になれば幸いです。