Amazon Web Services ブログ

AWS Config ルールの評価結果を Security Hub にインポートする方法

2019年6月の re:Inforce 2019 で、AWS は AWS Security Hub の正式リリースを発表しました。AWS Security Hubは、お客様がコンプライアンスチェックとセキュリティの評価結果を AWS アカウント間で共有し、一元的に表示、管理できるセキュリティサービスです。AWS Security Hub は AWS Guard DutyAmazon InspectorAmazon Macie、および 30 以上の AWS パートナーセキュリティソリューションからセキュリティ検出結果をインポートできます。

デフォルトでは、Security Hubが有効になると、CIS AWS Foundations がお客様のアカウントにデプロイされます。 CIS AWS Foundations は、AWS アカウントを強化するためのセキュリティ設定のベストプラクティスのセットです。Security Hub が CIS AWS Foundations に含まれているルールでコンプライアンスチェックを実行するためには、AWS Security Hub を有効にしたアカウントと同じアカウントで AWS Config を有効にする必要があります。

AWS Security Hub を有効にする前に、独自の AWS Config ルールを作成したことがある場合は、それらを AWS Security Hub にインポートすることもできます。これによりセキュリティチームは、AWS GuardDuty、Amazon Inspector、Amazon Macie などのサービスからのセキュリティ検出結果とともに、全ての結果を Security Hub に表示できるようになります。この記事ではこの設定方法を説明します。

ソリューションの概要

AWS CloudFormation テンプレートを使用して以下のコンポーネントをデプロイし、AWS Config ルールの結果を AWS Security Hub にインポートできるようにします。このテンプレートで作成される主なリソースは次のとおりです。

  • AWS Lambda 関数と、必要な IAM ロールと IAM ポリシー :
    Config-SecHub-Lambda
    この Lambda 関数は、CloudFormation スタックの作成直後に実行されます。AWS Config ルールの結果を解析し、Security Hubにインポートします。
  • CloudWatch イベントルールと、AWS Lambda 関数を呼び出すのに必要なアクセス権限 :
    Config-Sechub-CW-Rule
    この CloudWatch イベントルールは、AWS Config からのコンプライアンス変更イベントと一致し、Lambda 関数に処理をルーティングします。

CloudFormation スタックデプロイから作成される AWS サービスの概要を次に示します。

Figure 1: Architecture diagram

図1:アーキテクチャ図

  1. AWS Security Hub を有効後に、新しい AWS Config ルールがデプロイされます。
  2. AWS Config ルールは、リソース設定とコンプライアンスの変更を検知し、これらの変更項目を AWS CloudWatch に送信します。
  3. AWS CloudWatch がコンプライアンスの変更を受け取ると、CloudWatch イベントルールによって AWS Lambda 関数がトリガーされます。
  4. Lambda 関数は CloudWatch から受信したイベントを解析し、Security Hubに結果としてインポートします。

ソリューションのデプロイ

  1. AWS Management Console にログインし、このサンプルデプロイ用の us-east-1 リージョン(バージニア北部)を選択します。
  2. テンプレートをデプロイするリージョンで AWS Config と AWS Security Hub が有効になっていることを確認します。
  3. 下の [Launch Stack] ボタンを選択して、サンプルデプロイをセットアップします。

このソリューションは、AWS Config および AWS Security Hub が有効になっているリージョンで起動する必要があり、作成されるリソースをサポートする任意のリージョンでデプロイできます。

Select this image to open a link that starts building the CloudFormation stack

スタックを実行するために、次の手順を行います。

  1. テンプレートのデフォルトの場所をそのままにして、[次へ] を選択します。
  2. [スタックの詳細を指定] ページで、スタック名を入力します。
  3. [スタックオプションの設定] ページで、[次へ] ボタンを選択します。
  4. [レビュー] ページで、チェックボックスをオンにし、[スタックの作成] ボタンを選択します。
  5. スタックの作成には 5~10分かかります。スタックが正常に作成されたら、[リソース] タブを選択して、デプロイされたリソースを表示します。

    Figure 2: AWS CloudFormation Resources tab

    図 2: [リソース]タブを選択すると、デプロイされたリソースが表示されます。

これで、次のリソースが正常に作成されました。

  • AWS Config と Security Hubを統合する Lambda 関数
  • Lambda 関数が他のサービスを呼び出すための Lambda 実行ロール
  • AWS Config コンプライアンス変更イベントに基づいて Lambda 関数をトリガーする CloudWatch イベントルール
  • Amazon CloudWatch が Lambda 関数を呼び出すことを許可するサービスアクセス許可

ソリューションの検証

正しく設定されていることを確認するには、コンソールから以下の手順に従って AWS Config と AWS Security Hub を統合する Lambda コードを確認します。

  1. AWS Lambda コンソールに移動します。
  2. Lambda 関数のリストから Config-SecHub-Lambda という名前の関数を開き、関数が正常にデプロイされていることを確認します。

    Figure 3: AWS Lambda console

    図3:Config-SecHub-Lambda 関数

次に、CloudWatch イベントルールが正常にデプロイされたことを確認します。

  1. Amazon CloudWatch サービスコンソールに移動します。
  2. [イベント] の [ルール] を選択します。Config-Sechub-CW-Rule という名前のルールが表示されます。
    Figure 4: Look for Config-Sechub-CW-Rule図4:Config-Sechub-CW-Rule

ソリューションのテスト

  1. AWS Config コンソールに移動します。
  2. 左ペインで、[ルール]、[ルールの追加] の順に選択します。
  3. 検索フィルタで、ec2 と入力し、テストする desired-instance-type ルールを選択します。

    Figure 5: AWS Config "add rule" page

    図 5: AWS Config 「ルールの追加」画面

  4. ルールのパラメータで、値として t2.micro を入力します。このアカウントで起動された他のインスタンスタイプは、このルールに違反し準拠していないことになります。次に、[保存] を選択します。
  5. Amazon EC2 コンソールに移動し、[インスタンスを起動] から [インスタンスを起動] を選択します。
  6. 任意の Amazon Linux AMIを選択します。

    Figure 6: Select an Amazon Linux AMI

    図 6: Amazon Linux AMI の選択

  7. ルールをテストするために、t2.micro 以外の インスタンスタイプを選択します。この例では、t2.nanoを選択しています。

    Figure 7: Choose your instance type

    図 7: インスタンスタイプの選択

  8. [確認と作成] と [起動] を選択します。ルールをテストするだけなので、[キーペアなしで続行] を選択し、 [このAMIに…] のチェックボックスをオンにして、[インスタンスの作成] を選択します。

    Figure 8: Select "Launch Instances"

    図 8:「インスタンスの起動」の選択

    インスタンスが起動されるまで数分待つ必要があります。EC2 コンソールをチェックして、インスタンスのステータスを表示できます。

  9. インスタンスが起動したら、AWS Config コンソールに戻り、左ペインから [ルール] を再度選択します。
  10. ドロップダウンメニューから [非準拠] フィルタを選択し、インスタンスタイプを確認するために作成したルールを表示します。

    Figure 9: Select the "Noncompliant" filter on the AWS Config Rules page

    図 9: [Config ルール] ページで「非準拠」フィルタを選択する

  11. [ルール名] で、desired-instance-type のルールを探し選択します。この後に、準拠していないリソースの数が表示されます。今回は、上記で起動した EC2 インスタンスに対応する非準拠のリソースが 1 つ存在するはずです。ルール名を選択すると、非準拠のリソースに関する詳細を表示できます。

    Figure 10: Look for the desired-instance-type rule

    図 10: desired-instance-typeの検索

  12. AWS Security Hub コンソールに移動します。左ペインで [検出結果] を選択します。
  13. 検索フィルタを選択し、ドロップダウンメニューから、フィルタとして [タイトル] を選択し、値として [desired-instance-type] を入力します。次に、[Apply] を選択します。

    Figure 11: Filter by title

    図 11: タイトルで絞り込む

  14. AWS Security Hub の [検出結果] に AWS Config ルールが表示されるはずです。

    Figure 12: Look for your Config rule under "Findings"

    図 12: Configルール名で検出結果をフィルタ

  15. Lambda 関数が正常に機能していることを確認したら、EC2 インスタンスを終了し、Config ルールを削除します。

バックグラウンドで何が起こっているのですか?

CloudFormation スタックをデプロイすると、Lambda 関数が他のリソースとともに作成されます。この関数は、AWS Config と AWS Security Hub を統合します。新しい Config ルールが追加され、コンプライアンスステータスが変更されると、すぐに AWS CloudWatch イベントルールがコンプライアンスイベントに基づいて Lambda 関数をトリガーします。この関数によって、CloudWatch イベントが解析され、必要なデータの取得、マッピングが行われ AWS Security Finding 形式 に変換されます。その後、BatchImportFindings API を使用して、結果を AWS Security Hub にインポートします。この GitHub repository で、CloudFormation テンプレートとコードファイルを取得することも可能です。

まとめ

このブログ記事では、AWS Config ルールを AWS Security Hub にインポートして、他のセキュリティ結果と一緒にAWS Config ルールを表示する方法について説明しました。これにより、AWS アカウント全体にわたる継続的なコンプライアンス統制において、AWS Config ルールをより簡単に使用できるようになります。インフラストラクチャの計画、構築、最適化についてサポートが必要な場合は、AWS Professional Services にお問い合わせください。また、この記事についてご質問がある場合は AWS Security Hub forumで新しいスレッドを開始してください。

Kahil author photo

Omar Kahil

Omarはプロフェッショナルサービスのコンサルタントで、お客様が DevOps の文化とベストプラクティスを採用することを支援しています。また、複雑なソリューションの実装を自動化することで、AWS サービスの導入を簡素化することにも取り組んでいます。

Shahzad author photo

Muhammad Shahzad

Muhammad は プロフェッショナルサービスの DevOps コンサルタントで、組織の原則とベストプラクティスを統合して説明することで お客様のDevOps推進を支援しています。

原文はこちら。翻訳は SA 桐谷 が担当しました。