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

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

こんにちは、臼田です。

みなさん、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.')

まとめ

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

ぜひみなさんもどうぞ。