#背景
業務で扱っているAWSアカウントが複数あります。下記エントリに記載した通り、CloudFormationのStackStesで10アカウントの検証環境でのGuardDuty有効化に成功したので、100アカウントの本番環境アカウントでGuardDuty有効化をトライしました。が、結果失敗。
複数アカウントの複数リージョンでGuardDuty有効化(少量アカウント)
CloudFormationインスタンスには上限がありました。
(やろうとしたのは 100アカウント × 15リージョン = 1500)
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
うーむ。。。大量生産向けではなさそうです。
ということで、pythonで一括有効化スクリプトを作成しました。
#前提
Windows 10
AWS CLI, Python, boto3 をインストール済み
CLIで複数アカウントのプロファイル(クレデンシャル)を設定済み
#手順
①プロファイルの一覧ファイルを準備する。
ファイル名:profiles.csv
内容:1行に [任意の数字], [任意のprofile名] を記載。行数は処理が必要な分だけ。
②下記スクリプトを実行する。
※GuardDuty有効化がまだされていない前提です。有効化済みのアカウントに実行するとエラーになります。
import csv
import boto3
from boto3.session import Session
# プロファイルを読み込み、ひとつづつ処理する
profiles = open('profiles.csv')
profiles_reader = csv.reader(profiles)
for row in profiles_reader:
id = row[0]
profile = row[1]
print(row)
session = Session(profile_name=profile)
ec2 = session.client('ec2')
regions = map(lambda x: x['RegionName'], ec2.describe_regions()['Regions'])
#全リージョンでGuardDuty有効化
for region in regions:
print(region)
guardduty = session.client('guardduty', region_name=region)
response = guardduty.create_detector(
Enable = True
)
print(response)
profiles.close()
CloudFormation StackSetsを使用しなくても、PythonでとってもシンプルにGuardDuty有効化することができました。
プロファイル一覧を読み込んで、リージョンを指定して処理を回すのは、他の用途でも大活躍しそうです。