目次
とある日
AWS Configのマネージドルールの精査しててルール一覧がなくて困ったので作った話です。
↓できたやつ。(マネージドルールのところだけプログラムで作ってほかは手作業で編集してます)
経緯
上記で少し話しましたが、ないから作っただけです。
AWS Config マネージドルールのリスト - AWS Config
マネージドルールのドキュメントは下記のように個別に分かれてます。
個別ページ
access-keys-rotated - AWS Config
これはこれで助かるのですが、タイトルに一貫性がないのでEC2関連のやつを調べたいと思っても、タイトルにEC2入っていないものなどあります。
そのため、ルールの概要でキーワード検索したいと思ってもページが個別に分けれているので検索が難しいのです。
(boto3のドキュメントは全部がまとまっているので翻訳するとChromeが固まるので個別のほうが助かる)
なので、キーワード検索しやすいようにマネージドルールの概要がまとまったページがほしいと思ったのが作成した理由です。
作成
air-flow/AWSConfigManagedRules: AWSConfigManagedRules
コードといっても、スクレイピングして整形して出力するだけですが。
スクレイピングとなる基礎の部分は他の方がやられているのを参考にしました。
AWS Config Rulesのマネージドルール一覧と詳細をぶっこ抜くスクリプト書いた | DevelopersIO
↓こんな感じで出力されます。実行結果のファイルもGitHubに上がってます。
### access-keys-rotated >アクティブなアクセスキーが、maxAccessKeyAge で指定された日数内にローテーションされるかどうかを確認します。アクセスキーが最大日数の maxAccessKeyAge を超えても更新されていない場合、ルールは NON_COMPLIANT です。 >[access-keys-rotated](https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/access-keys-rotated.html)
プログラム
かいつまんで少しだけ解説します。
ScrapingAWSDocument()
2回にわたってスクレイピングをしています。
一回目でルール一覧を取得
二回目で個別のルール概要を取得
def ScrapingAWSDocument(): 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') link_list = soup.find(id="main-col-body").find_all("li") rules = [] for child in link_list: child_url = base_url + child.find('a').get("href")[2:] r2 = requests.get(child_url) r2.encoding = 'utf-8' soup2 = BeautifulSoup(r2.text, 'lxml') detail = soup2.find(id="main-col-body").p.text.strip() detail = re_delete_indent.sub(' ', detail) rules.append( { 'rule_name': soup2.h1.text, 'rule_detail': detail, "url": child_url } ) return rules
ConvertMarkdown()
取ってきたルールをMarkdownように変換しているだけです。
見出しレベルとか好みで。
完成図
### access-keys-rotated >アクティブなアクセスキーが、maxAccessKeyAge で指定された日数内にローテーションされるかどうかを確認します。アクセスキーが最大日数の maxAccessKeyAge を超えても更新されていない場合、ルールは NON_COMPLIANT です。 >[access-keys-rotated](https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/access-keys-rotated.html)
ただただ、上記のようにまとめているだけ。
def ConvertMarkdown(rules): result = [] n = "\n" s = "#" * 3 for i in rules: text = s + " " + i["rule_name"] + n text += n text += ">" + i["rule_detail"] + n text += ">[" + i["rule_name"] + "](" + i["url"] + ")" + n text += n result.append(text) return result
cd()
便利なので使ってます。
def cd(): os.chdir(os.path.dirname(__file__))
詳細は下記記事をご覧下さい。
今日は、Pythonでファイル操作するときの助けの日。 - 今日はなにの日。
〆
スクレイピングの大本があったのでさくっと一時間ぐらいで作成はできました。
むしろマネージドルール全部を把握するほうが時間かかりました。