【Security Hub修復手順】[Config.1] AWS Config を有効にする必要があります

AWS SecurityHub 基礎セキュリティのベストプラクティスコントロール修復手順をご紹介します。
2023.01.31

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

こんにちは!AWS事業本部のおつまみです。

皆さん、お使いのAWS環境のセキュリティチェックはしていますか?

当エントリでは、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介します。

本記事の対象コントロール

[Config.1] AWS Config を有効にする必要があります

[Config.1] AWS Config should be enabled

前提条件

本記事はAWS Security Hubで「AWS基礎セキュリティのベストプラクティススタンダード」を利用されている方向けの内容となります。 AWS Security Hubの詳細についてはこちらのブログをご覧ください。

対象コントロールの説明

このコントロールは、ローカルリージョンのアカウントで Config が有効になっているかどうか、およびすべてのリソースを記録しているかどうかをチェックします。

AWS ConfigとはAWSリソースの変更の追跡を行うことができるサービスです。
リソースの変更履歴をタイムラインとして表示することもできるため、インシデント発生時の調査等に役立つため設定を有効にしておきましょう。

諸注意

  • このコントロールは、Security Hub を使用するリージョンで AWS Config が有効になっているかどうかを確認します。Security Hub はリージョナルサービスです。そのため、このコントロールに対して実行されるチェックでは、アカウントで指定しているリージョンのみがチェックされます。すべてのリージョンが確認されるわけではありません。

  • このコントロールは、すべてのリソースを記録しているかどうかを確認します。そのため、一部のリソースのみを記録するように設定している場合は、このコントロールは失敗します。基本的にはコントロール是正のために、すべてのリソースを記録することが必要です。ただし、頻繁にリソース変更する仕組みを作っている場合は、料金がかさむため注意しなければいけません。

クラスメソッドメンバーズでベーシックアカウントをお使いのお客様は、初期設定として一部のリソースのみを記録するようConfigが設定されています。そのためこのコントロールに失敗します。セキュリティ要件として、すべてのリソースを記録する必要がない場合は、このコントロールを無効化することを検討して下さい。
  • AWS Configを設定する際に、IAMリソースなどのグローバルリソースを記録するかどうか選択できます。全リージョンでConfigを有効化する場合は、基本的に1 つのリージョンにのみグローバルリソースを含めるように設定し、それ以外のリージョンではグローバルリソースを含めないよう設定することを推奨しています。なおグローバルリソース記録を含めないように設定したリージョンでSecurityHubを有効にした場合は、IAM.1、IAM.2、IAM.3、IAM.5、IAM.8、IAM.21 を無効にすることも検討してください。

修復手順

Security Hub では、すべてのリージョンで AWS Config を有効にすることを推奨しています。
そのためすべてのリージョンで AWS Config を有効化する方法を2パターンご紹介します。
どちらか実施しやすい方法で設定をしてください。

1. マネジメントコンソールで有効にする場合

  1. AWS Configサービスより「今すぐ始める」を選択します。

  2. [設定]画面にて、下記の通り設定します。設定後、[次へ]をクリックします。

    フィールド名 入力値(設定値) 備考
    記録するリソースタイプ このリージョンでサポートされているすべてのリソースを記録します 記録するリソースを設定する項目です。
    デフォルトのままで問題ありません。
    グローバルリソース( AWS IAMリソースなど)を含める 有効 グローバルリソースを含めるかどうか選択する項目です。

    デフォルトでは無効が選択されています。
    ※メインリージョンのみ有効を選択して下さい。

    データ保持期間 AWS Configデータを7年間(2557日)保持する AWS Configのデータ保持期間を設定できます。
    デフォルトのままで問題ありません。
    AWS Configロール AWS Configサービスにリンクされたロールの作成 AWS Configのロールを設定する項目です。
    デフォルトのままで問題ありません。
  3. 同じ[設定]画面にて、下記の通り設定します。

    フィールド名 入力値(設定値) 備考
    Amazon S3バケット 任意 Configログを配信するS3バケットを指定する項目です。

    Config用のS3バケットを未作成の場合は、バケットの作成を選択してください。
    既に作成済の場合は、アカウントからバケットを選択もしくは別のアカウントからバケットを選択を選択してください。

    S3バケット名 任意のバケット名もしくは既存のバケット名 ログを保管するS3バケット名を指定する項目です。

    Config用のS3バケットを未作成の場合は、任意のバケット名を入力してください。
    既に作成済の場合は、既存のバケット名を選択してください。

    Amazon SNSトピック 無効 ログがバケットに配信されるたびに通知されるようにする設定項目です。
    デフォルトで無効が選択されています。大量に通知が来る可能性があるため、デフォルトのままで問題ありません。
  4. [ルール]画面の設定は不要です。[次へ]をクリックします。

  5. [レビュー]画面にて、設定内容に誤りがないか確認します。確認後、[確認]をクリックします。

  6. 1~2分後にAWS Configが有効化されます。ナビゲーションペインから[ダッシュボード]が表示されるようになります。

  7. 同様な手順でアカウント内で有効な全リージョンの設定を行います。画面右上のヘッダーナビゲーションよりリージョンの変更ができます。なおアカウント内で有効な全リージョンの一覧は下記のコマンドで入手できます。

    $ aws ec2 describe-regions --query 'Regions[].[RegionName]' --output text | sort
    ap-northeast-1
    ap-northeast-2
    ap-south-1
    ap-southeast-1
    ap-southeast-2
    ca-central-1
    eu-central-1
    eu-north-1
    eu-west-1
    eu-west-2
    eu-west-3
    sa-east-1
    us-east-1
    us-east-2
    us-west-1
    us-west-2

  8. 上記に記載の全リージョンでConfigが有効になれば、設定完了です。

2. AWS CLIで有効にする場合

前提条件として、Amazon S3 バケット、ポリシーが添付された IAM ロールを作成する必要があります。作成方法はこちらの公式ドキュメントを参考にして下さい。

  1. AWS マネージメントコンソールを開きます。
  2. 画面右上のヘッダーナビゲーションより「CloudShell」のアイコンを選択します。

  3. 1〜2分すると、CloudShellの実行画面が表示されます。

  4. 設定を有効化するために、下記のシェルスクリプトをCloudShellで実行します。
    IAM Role ARN for AWS CONFIGS3 Bucket Nameは作成済のものに置き換えて下さい。全リージョン共通のものとなります。
    ※グローバルリソースを記録するメインリージョンをap-northeast-1(東京リージョン)とします。

    role_arn_for_aws_config=<IAM Role ARN for AWS CONFIG>
    s3_bucket_name=<S3 Bucket Name>
    main_region=ap-northeast-1
    
    REGIONS=( \
    ap-northeast-1 \
    ap-northeast-2 \
    ap-south-1 \
    ap-southeast-1 \
    ap-southeast-2 \
    ca-central-1 \
    eu-central-1 \
    eu-north-1 \
    eu-west-1 \
    eu-west-2 \
    eu-west-3 \
    sa-east-1 \
    us-east-1 \
    us-east-2 \
    us-west-1 \
    us-west-2 \
    )
    
    # サポートされているすべてのサービスにつき記録を有効化(allSupported=true)
    # IAMなどのグローバルリソースはメインのリージョンにおいてのみ有効化(includeGlobalResourceType=true)
    for region in ${REGIONS[@]}; do
        echo "Processing ${region} configuration for recorder..."
        if [ ${region} = ${main_region} ]; then
            aws configservice put-configuration-recorder --region ${region} --configuration-recorder name=default,roleARN=${role_arn_for_aws_config} --recording-group allSupported=true,includeGlobalResourceTypes=true
        else
            aws configservice put-configuration-recorder --region ${region} --configuration-recorder name=default,roleARN=${role_arn_for_aws_config} --recording-group allSupported=true,includeGlobalResourceTypes=false
        fi
    done
     
    # 記録先バケットの設定
    for region in ${REGIONS[@]}; do
        echo "Processing ${region} configuration for delivery channels..."
        aws configservice put-delivery-channel --region ${region} --delivery-channel name=default,s3BucketName=${s3_bucket_name}
    done

  5. 設定確認のために、下記のシェルスクリプトをCloudShellで実行します。

    REGIONS=( \
    ap-northeast-1 \
    ap-northeast-2 \
    ap-south-1 \
    ap-southeast-1 \
    ap-southeast-2 \
    ca-central-1 \
    eu-central-1 \
    eu-north-1 \
    eu-west-1 \
    eu-west-2 \
    eu-west-3 \
    sa-east-1 \
    us-east-1 \
    us-east-2 \
    us-west-1 \
    us-west-2 \
    )
    
    # 記録有効化のチェック
    echo 'region allSupported includeGlobalResourceTypes'
    for region in ${REGIONS[@]}; do
        echo ${region} $(aws configservice describe-configuration-recorders --region ${region} --query 'ConfigurationRecorders[*].recordingGroup.[allSupported,includeGlobalResourceTypes]' --output text)
    done
    
    # バケット設定のチェック
    echo -e 'region s3BucketName'
    for region in ${REGIONS[@]}; do
        echo ${region} $(aws configservice describe-delivery-channels --region ${region} --query 'DeliveryChannels[*].s3BucketName' --output text)
    done

     

  6. 下記の通り出力されていれば、Configは有効化されています。設定は完了です。
    S3 Bucket Nameは設定したバケット名です。

    # 記録有効化のチェック
    ap-northeast-1 True True
    ap-northeast-2 True False
    ap-south-1 True False
    ap-southeast-1 True False
    ap-southeast-2 True False
    ca-central-1 True False
    eu-central-1 True False
    eu-north-1 True False
    eu-west-1 True False
    eu-west-2 True False
    eu-west-3 True False
    sa-east-1 True False
    us-east-1 True False
    us-east-2 True False
    us-west-1 True False
    us-west-2 True False
    
    # バケット設定のチェック
    ap-northeast-1 <S3 Bucket Name>
    ap-northeast-2 <S3 Bucket Name>
    ap-south-1 <S3 Bucket Name>
    ap-southeast-1 <S3 Bucket Name>
    ap-southeast-2 <S3 Bucket Name>
    ca-central-1 <S3 Bucket Name>
    eu-central-1 <S3 Bucket Name>
    eu-north-1 <S3 Bucket Name>
    eu-west-1 <S3 Bucket Name>
    eu-west-2 <S3 Bucket Name>
    eu-west-3 <S3 Bucket Name>
    sa-east-1 <S3 Bucket Name>
    us-east-1 <S3 Bucket Name>
    us-east-2 <S3 Bucket Name>
    us-west-1 <S3 Bucket Name>
    us-west-2 <S3 Bucket Name>

クラスメソッドメンバーズのお客様はメンバーズサービス設定画面の[セキュリティ設定]→[AWS Config(セキュア設定)]のオプトインをオンにすることで、今回ご紹介した手順を実施せずに簡単に設定を有効化することができます。(ただしリソースの変更が多い環境では利用費にご注意ください。)

最後に

今回は、AWS Security HubによるAWS環境のセキュリティ状況スコアリングに該当する項目についての修正手順をご紹介しました。

コントロールを修正して、お使いのAWS環境のセキュリティをパワーアップさせましょう!

最後までお読みいただきありがとうございました!
どなたかのお役に立てれば幸いです。

以上、おつまみ(@AWS11077)でした!

参考

AWS Configのすべてのリソース記録を全リージョンで有効化するシェルスクリプト書いた | DevelopersIO

AWS CLI を利用して、AWS Config の記録される対象リソースタイプをリージョン毎で確認する方法を教えてください

CloudFormation で特定リージョンの Config のみ有効化する方法を考えてみた | DevelopersIO