1
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?

More than 5 years have passed since last update.

複数アカウントの複数リージョンでGuardDuty有効化(大量アカウント)

Last updated at Posted at 2018-09-16

#背景
業務で扱っているAWSアカウントが複数あります。下記エントリに記載した通り、CloudFormationのStackStesで10アカウントの検証環境でのGuardDuty有効化に成功したので、100アカウントの本番環境アカウントでGuardDuty有効化をトライしました。が、結果失敗。
複数アカウントの複数リージョンでGuardDuty有効化(少量アカウント)

WS000003.JPG

CloudFormationインスタンスには上限がありました。
(やろうとしたのは 100アカウント × 15リージョン = 1500)
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/cloudformation-limits.html
WS000002.JPG

うーむ。。。大量生産向けではなさそうです。
ということで、pythonで一括有効化スクリプトを作成しました。

#前提
Windows 10
AWS CLI, Python, boto3 をインストール済み
CLIで複数アカウントのプロファイル(クレデンシャル)を設定済み

#手順
①プロファイルの一覧ファイルを準備する。
 ファイル名:profiles.csv
 内容:1行に [任意の数字], [任意のprofile名] を記載。行数は処理が必要な分だけ。
②下記スクリプトを実行する。
 ※GuardDuty有効化がまだされていない前提です。有効化済みのアカウントに実行するとエラーになります。

create_guardduty_detectors.py
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有効化することができました。
プロファイル一覧を読み込んで、リージョンを指定して処理を回すのは、他の用途でも大活躍しそうです。

#参考
awscliの設定切り替え
Pythonでboto3を使って全リージョンで処理を回すコード書いてみた

1
0
5

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
1
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?