でのコンプライアンススキャン AWS OpsWorks for Chef Automate - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

でのコンプライアンススキャン AWS OpsWorks for Chef Automate

重要

AWS OpsWorks for Chef Automate は 2024 年 5 月 5 日にサポートが終了し、新規および既存のお客様の両方で無効になっています。既存のお客様は、 Chef SaaS または代替ソリューションに移行することをお勧めします。ご質問がある場合は、 AWS re:Post または AWS Premium Support を通じて AWS Support チームにお問い合わせください。

コンプライアンススキャンを使用すると、事前定義されたポリシー (ルールとも呼ばれる) に基づいてインフラストラクチャ内の管理対象ノードのコンプライアンスを追跡できます。Compliance のビューを使用すると、アプリケーションの脆弱性と非準拠設定を定期的に監査できます。Chef には、コンプライアンススキャンに使用できる事前定義された 100 個を超える Compliance プロファイル (特定のノード設定に適用するルールの集合) が用意されています。Chef InSpec 言語を使用して、独自のカスタムプロファイルを作成することもできます。

サーバーでまだ Chef Automate 2.0 が実行されていない場合は、Audit クックブックをインストールすることで手動で Chef Compliance を設定できます。

注記

AWS OpsWorks for Chef Automate サーバーに関連付けられたノードでサポートされている Chef Infra クライアントエージェントソフトウェア (chef-client) の最小バージョンは 13.x です。最新の安定chef-clientバージョン、または少なくとも 14.10.9 を実行することをお勧めします。

Chef Automate 2.0 の Compliance

AWS OpsWorks for Chef Automate サーバーが Chef Automate 2.0 を実行している場合は、このセクションの手順を使用して Chef Compliance を設定します。

Chef Automate 2.0 を使用したコンプライアンススキャンジョブの実行

Chef Automate 2.0 には、以前は手動セットアップとクックブック設定が必要だった Chef InSpec コンプライアンススキャン機能が含まれています。Chef Automate 2.0 を実行している AWS OpsWorks for Chef Automate サーバーでスキャンジョブを実行できます。ジョブは、すぐに (1 回) 実行するか、後で実行するようにスケジュールするか、指定した間隔 (毎日または 2 時間ごとなど) で実行するようにスケジュールすることができます。スキャンジョブの結果はコンプライアンスレポートに送信されます。Chef Automate ダッシュボードで、コンプライアンススキャンの結果を表示して対処できます。[Compliance] タブを開いてレポートを表示するには、Chef Automate ダッシュボードの [Scan Jobs] タブで、管理対象ノード行の右側にある [Report] を選択します。

管理対象ノードでスキャンジョブを実行するには、以下のものが必要です。

  • 名前空間にインストールされた 1 つ以上の Compliance プロファイル。

  • 手動で追加された 1 つの以上のターゲットノード、または自動的に追加された EC2 インスタンス。

では AWS OpsWorks for Chef Automate、次のターゲットでスキャンジョブがサポートされています。

  • 手動で追加されたノード

  • aws-ec2 インスタンス

  • AWS リージョン

スキャンジョブの実行方法の詳細については、Chef のドキュメントの「Chef Automate Scan Jobs」を参照してください。

(オプション、Chef Automate 2.0) Audit クックブックによるコンプライアンスの設定

コンプライアンスはどの AWS OpsWorks for Chef Automate サーバーでも設定できます。 AWS OpsWorks for Chef Automate サーバーを起動した後、Chef Automate ダッシュボードからプロファイルをインストールしたり、Policyfile.rb ポリシーファイルで Audit クックブックの属性に目的のプロファイルを追加したりできます。スターターキットには、事前入力済みの Policyfile.rb ファイルが含まれています。

監査クックブックの属性として Policyfile.rb プロファイルを編集した後、chef push コマンドを実行して [Audit cookbook] (監査クックブック) と Policyfile.rb で指定された他のクックブックを Chef Automate サーバーにアップロードします。Audit クックブックをインストールすると、Chef InSpec が生成するオープンソースのテストおよび監査フレームワークである Chef の gem もインストールされます。Chef Automate 2.0 の場合は、Audit クックブックのバージョン 7.1.0 以降を選択します。 InSpec Gem はバージョン 2.2.102 以降である必要があります。

このセクションの手順は opsworks-audit クックブックを実装する方法を示しています。Audit クックブックは、Chef Automate サーバーから指定されたプロファイルをダウンロードし、DevSec SSH ベースラインプロファイルに対してノードを評価し、chef-client実行ごとにコンプライアンススキャンの結果を報告します。

Compliance プロファイルをインストールするには
  1. まだ行っていない場合は Chef Automate ウェブベースダッシュボードにサインインします。 AWS OpsWorks for Chef Automate サーバーの作成時にスターターキットをダウンロードした際に受信した認証情報を使用します。

  2. Chef Automate ダッシュボードで、[Asset Store] タブを選択します。

    Compliance プロファイル
  3. 定義済みのプロファイルを表示するには、[Available] タブを選択します。

  4. プロファイルのリストを参照します。オペレーティングシステムおよび少なくとも 1 つの管理対象ノードの設定に一致するプロファイルを選択します。プロファイルの対象となる違反の説明および基盤となるルールコードを含むプロファイルの詳細を表示するには、プロファイル項目の右にある [>] を選択します。複数のプロファイルを選択できます。Starter Kit で例を設定する場合は、DevSec SSH ベースライン を選択します。

    Chef Compliance プロファイルの詳細ビュー
  5. 選択されたプロファイルを Chef Automate サーバーにインストールするには、[Get] を選択します。

  6. プロファイルをインストールすると、それらは Chef Automate ダッシュボードの [Profiles] タブに表示されます。

Policyfile.rb を使用してクックブックをインストールするには
  1. スターターキットの Policyfile.rb を表示して、Audit クックブックの属性で ['profiles']ssh-baseline プロファイルが指定されていることを確認します。

    # Define audit cookbook attributes default["opsworks-demo"]["audit"]["reporter"] = "chef-server-automate" default["opsworks-demo"]["audit"]["profiles"] = [ { "name": "DevSec SSH Baseline", "compliance": "admin/ssh-baseline" } ]
  2. Policyfile.rb に定義されているクックブックをダウンロードしてインストールします。

    chef install

    すべてのクックブックはクックブックの metadata.rb ファイルでバージョニングされています。クックブックを変更するたびに metadata.rb にあるクックブックのバージョンを上げる必要があります。

  3. Policyfile.rb に定義されているポリシー opsworks-demo をサーバーにプッシュします。

    chef push opsworks-demo
  4. ポリシーのインストールを確認します。以下のコマンドを実行します。

    chef show-policy

    結果は以下のようになります。

    opsworks-demo-webserver ======================= * opsworks-demo: ec0fe46314
  5. まだ行っていない場合は、サーバーにノードを追加して管理できるようにします。最初のノードを AWS OpsWorks for Chef Automate サーバーに接続するには、このスターターキットに含まれているuserdata.shスクリプトを使用します。AssociateNode API を使用してノードを AWS OpsWorks サーバーに接続します。

    でノードを自動的に追加する AWS OpsWorks for Chef Automate」のステップに従ってノードの関連付けを自動化できます。または「ノードを個別に追加します」のステップに従ってノードを 1 度に 1 つずつ追加できます。

  6. ノードの実行リストを更新すると、chef-client エージェントが次回の実行時に、指定したレシピを実行します。この処理はデフォルトで 1,800 秒 (30 分) ごとに行われます。その実行後、Chef Automate ダッシュボードの [Compliance] タブからコンプライアンス結果を表示し、アクションを実行できます。

    Chef Compliance のスキャン結果

コンプライアンススキャンの実行

ノードの実行リストを設定した後、エージェントが初めて実行されるとすぐに、Chef Automate ダッシュボードにコンプライアンススキャンの結果が表示されます。

Chef Compliance レポートページビュー

Chef Automate ダッシュボードで、[Compliance] タブを選択します。左のナビゲーションペインの [Reporting] を選択します。[Profiles] タブを選択して [Scan Results] を選択した後、スキャンによって非準拠と見なされたノードを選択して、そのノードがどのルールに対して非準拠になったかを調べます。

非準拠結果のリスト

通常、新しいノードは DevSec SSH ベースラインプロファイルのすべてのルールをまだ満たしていないため、非準拠のスキャン結果が表示されます。コミュニティベースのプロジェクトである DevSec Hardening Framework は、DevSec SSH ベースラインプロファイルのルールに違反する問題を修正するためのクックブックを提供しています。

(オプション) 非準拠結果の解決

スターターキットにはオープンソースのクックブック が含まれておりssh-hardeningDevSec SSH ベースラインプロファイルに対する実行の非準拠の結果を修正するために実行できます。

注記

ssh-hardening クックブックは、DevSec SSH ベースラインルールに準拠するようにノードを変更します。このクックブックを本番稼働用ノードで実行する前に、Chef Automate コンソールの DevSec SSH ベースラインプロファイルの詳細を確認して、クックブックがターゲットとするルール違反を理解してください。本稼働ノードでこれを実行する前に、オープンソースの ssh-hardening クックブックに関する情報を確認します。

ssh-hardening クックブックを実行するには
  1. テキストエディタで、ssh-hardening の実行リストに Policyfile.rb クックブックを追加します。実行リスト Policyfile.rb は以下のようになります。

    run_list 'chef-client', 'opsworks-webserver', 'audit', 'ssh-hardening'
  2. Policyfile.rb を更新し、 AWS OpsWorks for Chef Automate サーバーにプッシュします。

    chef update Policyfile.rb chef push opsworks-demo
  3. opsworks-demo ポリシーに関連付けられているノードは実行リストを自動的に更新し、次の chef-client の実行時に ssh-hardening クックブックを適用します。

    chef-client クックブックを使用しているため、ノードが定期的にチェックインします (デフォルトでは 30 分ごと)。次のチェックインでは、ssh-hardeningクックブックが実行され、DevSec SSH ベースラインプロファイルのルールを満たすためにノードセキュリティが向上します。

  4. ssh-hardening クックブックの初回実行が完了したら 30 分待機し再びコンプライアンススキャンを実行します。Chef Automate ダッシュボードで結果を表示します。DevSec SSH ベースラインスキャンの初回実行時に発生した非準拠の結果は解決する必要があります。

Chef Automate 1.x の Compliance

AWS OpsWorks for Chef Automate サーバーが Chef Automate 1.x を実行している場合は、このセクションの手順を使用して Chef Compliance を設定します。

(オプション、Chef Automate 1.x) Chef Compliance の設定

Chef Compliance はどの AWS OpsWorks for Chef Automate サーバーでも設定できます。 AWS OpsWorks for Chef Automate サーバーを起動した後、Chef Automate ダッシュボードのプロファイルから実行するプロファイルを選択します。プロファイルをインストールした後、berks コマンドを実行して Audit クックブックを Chef Automate サーバーにアップロードします。Audit クックブックをインストールすると、 用の gem もインストールされます。これはInSpec、Chef によって生成されたオープンソースのテストフレームワークで、自動テストをデプロイパイプラインの任意のステージに統合できます。Chef Automate 1.x の場合は、監査クックブックのバージョン 5.0.1 以降を選択します。 InSpec Gem はバージョン 1.24.0 以降である必要があります。

AWS OpsWorks for Chef Automate スターターキットには、Chef の Audit クックブックの適切なバージョンをダウンロードしてインストールopsworks-auditするラッパークックブック が含まれています。このopsworks-auditクックブックでは、このトピックの後半で Chef の Compliance コンソールからインストールする DevSec SSH ベースラインプロファイルに対してノードを評価するようにchef-clientエージェントに指示します。独自の設定に適したように、いずれかのクックブックを使用してコンプライアンスをセットアップできます。このセクションの手順は opsworks-audit クックブックを実装する方法を示しています。

Compliance プロファイルをインストールするには
  1. まだ行っていない場合は Chef Automate ウェブベースダッシュボードにサインインします。 AWS OpsWorks for Chef Automate サーバーの作成時に Starter Kit をダウンロードしたときに受け取った認証情報を使用します。

  2. Chef Automate ダッシュボードで、[Compliance] タブを選択します。

    Chef Compliance プロファイル
  3. 左ナビゲーションバーで、[Profile Store] を選択してから [Available] タブを選択して、事前定義されたプロファイルを表示します。

  4. プロファイルのリストを参照します。オペレーティングシステムおよび少なくとも 1 つの管理対象ノードの設定に一致するプロファイルを選択します。プロファイルの対象となる違反の説明および基盤となるルールコードを含むプロファイルの詳細を表示するには、プロファイル項目の右にある [>] を選択します。複数のプロファイルを選択できます。

    Chef Compliance プロファイルの詳細ビュー
  5. 選択されたプロファイルを Chef Automate サーバーにインストールするには、[Get] を選択します。

  6. ダウンロードが完了したら、次の手順に進んでください。

opsworks-audit クックブックをインストールしてセットアップする
  1. このステップはオプションですが、ノードの実行リストにレシピを追加する場合のステップ 6 で時間の節約になります。 AWS OpsWorks for Chef Automate サーバーの作成時にダウンロードしたスターターキットに含まれている roles/opsworks-example-role.rb ファイルを編集します。次の行を追加します。コンプライアンススキャンを実行してから非準拠ノードを解決するために ssh-hardening クックブックとレシピを追加することはオプションなので、最後の行はコメントアウトされています。

    run_list( "recipe[chef-client]", "recipe[apache2]", "recipe[opsworks-audit]" # "recipe[ssh-hardening]" )
  2. テキストエディタを使用して Berksfile で希望のクックブックを指定します。サンプル Berksfile はスターターキットに含まれています。この例では、Chef Infra クライアント ([chef-client) クックブック、apache2クックブック、opsworks-audit クックブックをインストールします。Berksfile は以下のようになります。

    source 'https://supermarket.chef.io cookbook 'chef-client' cookbook 'apache2', '~> 5.0.1' cookbook 'opsworks-audit', path: 'cookbooks/opsworks-audit', '~> 1.0.0'

    すべてのクックブックはクックブックの metadata.rb ファイルでバージョニングされています。クックブックを変更するたびに metadata.rb にあるクックブックのバージョンを上げる必要があります。

  3. 次のコマンドを実行してローカルまたは使用中のコンピュータにある cookbooks フォルダにクックブックをダウンロードしインストールします。

    berks vendor cookbooks
  4. 次のコマンドを実行して、 AWS OpsWorks for Chef Automate サーバーにベンダーのクックブックをアップロードします。

    knife upload .
  5. opsworks-audit クックブックがインストールされていることを確認するには、次のコマンドを実行してサーバーで現在使用可能なクックブックのリストを表示します。

    knife cookbook list
  6. まだ行っていない場合は、サーバーにノードを追加して管理できるようにします。「でノードを自動的に追加する AWS OpsWorks for Chef Automate」のステップに従ってノードの関連付けを自動化できます。または「ノードを個別に追加します」のステップに従ってノードを 1 度に 1 つずつ追加できます。ノードの実行リストを編集して、ステップ 1 の opsworks-example-role で指定したロールを追加します。この例では RUN_LIST の属性を userdata スクリプトで編集します。これはノードの関連性を自動化するために使用します。

    RUN_LIST="role[opsworks-example-role]"

    ステップ 1 をスキップしロールを設定しなかった場合は、実行リストに各レシピの名前を追加します。変更を保存して ステップ 3: 自動関連付けスクリプトを使用してインスタンスを作成する のステップに従がって、ユーザーデータスクリプトをAmazon EC2 インスタンスに適用します。

    RUN_LIST="recipe[chef-client],recipe[apache2],recipe[opworks-audit]"
  7. ノードの実行リストを更新すると、chef-client エージェントが次回の実行時に、指定したレシピを実行します。この処理はデフォルトで 1,800 秒 (30 分) ごとに行われます。実行後、Chef Automate ダッシュボードでコンプライアンス結果を見ることができます。

コンプライアンススキャンの実行

ノードの実行リストを設定した後初めてエージェントデーモンが実行された後短時間で、Chef Automate ダッシュボードにコンプライアンススキャンの結果が表示されます。

Chef Compliance レポートページビュー

Chef Automate ダッシュボードで、[Compliance] タブを選択します。左のナビゲーションペインの [Reporting] を選択します。[Profiles] タブを選択して [Scan Results] を選択した後、スキャンによって非準拠と見なされたノードを選択して、そのノードがどのルールに対して非準拠になったかを調べます。

Chef Compliance 失敗結果リスト

通常、新しいノードは DevSec SSH ベースラインプロファイルのすべてのルールをまだ満たしていないため、非準拠のスキャン結果が表示されます。コミュニティベースのプロジェクトである DevSec Hardening Framework は、DevSec SSH ベースラインプロファイルのルールに違反する問題を修正するためのクックブックを提供しています。

(オプション) 非準拠結果の解決

スターターキットにはオープンソースのクックブック が含まれておりssh-hardeningDevSec SSH ベースラインプロファイルに対する実行の非準拠の結果を修正するために実行できます。

注記

ssh-hardening クックブックは、DevSec SSH ベースラインルールに準拠するようにノードを変更します。このクックブックを本番稼働用ノードで実行する前に、Chef Automate コンソールで DevSec SSH ベースラインプロファイルの詳細を確認して、クックブックがターゲットとするルール違反を理解してください。本稼働ノードでこれを実行する前に、オープンソースの ssh-hardening クックブックに関する情報を確認します。

ssh-hardening クックブックを実行するには
  1. テキストエディタで、ssh-hardening クックブックを Berksfile に追加します。Berksfile は以下のようになります。

    source 'https://supermarket.chef.io' cookbook 'chef-client' cookbook 'apache2', '~> 5.0.1' cookbook 'opsworks-audit', path: 'cookbooks/opsworks-audit', '~> 1.0.0' # optional cookbook 'ssh-hardening'
  2. 次のコマンドを実行して ssh-hardening クックブックをローカルのクックブックフォルダにダウンロードし、 AWS OpsWorks for Chef Automate サーバーにアップロードします。

    berks vendor cookbooks knife upload .
  3. ノードの実行リストに ssh-hardening レシピを追加します。この操作はステップ 1 とステップ 6 (opsworks-audit クックブックをインストールしてセットアップする) で説明されています。

    opsworks-example-role.rb ファイルを更新するには、次のコマンドを実行してサーバーに変更をアップロードします。

    knife upload .

    実行リストを直接更新するには、次のコマンドを実行して変更をアップロードします。通常、ノード名はインスタンス ID になります。

    knife node run_list add <node name> 'recipe[ssh-hardening]'
  4. chef-client クックブックを使用しているため、ノードが定期的にチェックインします (デフォルトでは 30 分ごと)。次のチェックインでは、ssh-hardeningクックブックが実行され、DevSec SSH ベースラインプロファイルのルールを満たすためにノードセキュリティが向上します。

  5. ssh-hardening クックブックの初回実行が完了したら 30 分待機し再びコンプライアンススキャンを実行します。Chef Automate ダッシュボードで結果を表示します。DevSec SSH ベースラインスキャンの初回実行時に発生した非準拠の結果は解決する必要があります。

Compliance の更新

AWS OpsWorks for Chef Automate サーバーでは、スケジュールされたシステムメンテナンス によってコンプライアンス機能が自動的に更新されます。Chef Automate、Chef Infra Server、Chef の更新リリースがサーバーで AWS OpsWorks for Chef Automate 利用可能 InSpec になると、サーバーで実行されている Audit クックブックと Chef InSpec gem のサポートされているバージョンを確認して更新する必要がある場合があります。 AWS OpsWorks for Chef Automate サーバーに既にインストールされているプロファイルは、メンテナンスの一環として更新されません。

コミュニティとカスタム Compliance プロファイル

Chef には現在 100 種類を超えるコンプライアンススキャンプロファイルが含まれています。コミュニティとカスタムプロファイルをリストに追加して、含まれているプロファイルと同様にそれらのプロファイルに基づいてコンプライアンススキャンをダウンロードして実行できます。コミュニティベースの Compliance プロファイルは Chef Supermarket から入手できます。カスタムプロファイルは Ruby ベースのプログラムであり、スキャンルールを指定するコントロールのフォルダが含まれています。

以下の資料も参照してください。