AWS Security Hubの統合コントロール結果をCloudShellから全リージョン設定変更してみた

CloudShellからパッと使えるスクリプトの公開です。みんなもやろう。
2023.05.30

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

こんにちは、臼田です。

みなさん、AWSのセキュリティチェックしてますか?(挨拶

今回はタイトル通りCloudShellでパッとAWS Security Hubの統合コントロール結果をオンにしたりオフにしたりするスクリプトを共有します。

概要

先日AWS Security Hubに統合コントロール結果が追加されました。詳細は以下を確認してください。

この設定を全リージョンで一括変更をしたくなったので、CloudShellでパッと行うためのスクリプトを作ったので共有します。オンとオフ両方あります。自分で踏んだエラーだけ処理していますので、お好みで味付けしてください。

スクリプト

CloudShellを起動して、python3のインタラクティブモードで以下を貼り付けてください。

統合コントロール結果をオフにする

import boto3


ec2 = boto3.client('ec2')
regions = list(map(lambda x: x['RegionName'], ec2.describe_regions()['Regions']))

for region in regions:
    print(region)
    sh = boto3.client('securityhub', region_name=region)
    try:
        control_finding_generator = sh.describe_hub()['ControlFindingGenerator']
        print(region + ': ' + control_finding_generator)
        if control_finding_generator == 'SECURITY_CONTROL':
            print('Control Changing...')
            sh.update_security_hub_configuration(ControlFindingGenerator='STANDARD_CONTROL')
            control_finding_generator = sh.describe_hub()['ControlFindingGenerator']
            print(region + ': ' + control_finding_generator)
    except sh.exceptions.InvalidAccessException:
        print(region + ': InvalidAccessException. Region disabled or region controlled by administrator account.')

統合コントロール結果をオンにする

import boto3


ec2 = boto3.client('ec2')
regions = list(map(lambda x: x['RegionName'], ec2.describe_regions()['Regions']))

for region in regions:
    print(region)
    sh = boto3.client('securityhub', region_name=region)
    try:
        control_finding_generator = sh.describe_hub()['ControlFindingGenerator']
        print(region + ': ' + control_finding_generator)
        if control_finding_generator == 'STANDARD_CONTROL':
            print('Control Changing...')
            sh.update_security_hub_configuration(ControlFindingGenerator='SECURITY_CONTROL')
            control_finding_generator = sh.describe_hub()['ControlFindingGenerator']
            print(region + ': ' + control_finding_generator)
    except sh.exceptions.InvalidAccessException:
        print(region + ': InvalidAccessException. Region disabled or region controlled by administrator account.')

まとめ

ちょっとしたやりたいことをやるスクリプトの公開は楽しいですよね。

ぜひみなさんもどうぞ。