Systems Manager Compliance でのChef InSpecプロファイルの使用 - AWS Systems Manager

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

Systems Manager Compliance でのChef InSpecプロファイルの使用

AWS Systems Manager は と統合されていますChef InSpec。 Chef InSpecは、 GitHubまたは Amazon Simple Storage Service (Amazon S3) に保存するための人間が読めるプロファイルを作成できるオープンソースのテストフレームワークです。その後、Systems Manager を使用してコンプライアンススキャンを実行し、準拠または非準拠のノードを表示できます。プロファイルは、コンピューティング環境のセキュリティ、コンプライアンス、またはポリシー要件です。例えば、 AWS Systems Managerの一機能である Compliance でノードをスキャンするとき、次のチェックを実行するプロファイルを作成できます

  • 特定のポートが開いているか閉じているかをチェックします。

  • 特定のアプリケーションが実行中かどうかをチェックします。

  • 特定のパッケージがインストールされているかどうかをチェックします。

  • 特定のプロパティの Windows レジストリキーをチェックします。

Amazon Elastic Compute Cloud (Amazon EC2) インスタンス、オンプレミスサーバー、または Systems Manager で管理する仮想マシン (VMsの InSpec プロファイルを作成できます。次のサンプルChef InSpecプロファイルは、ポート 22 が開いているかどうかを確認します。

control 'Scan Port' do impact 10.0 title 'Server: Configure the service port' desc 'Always specify which port the SSH server should listen to. Prevent unexpected settings.' describe sshd_config do its('Port') { should eq('22') } end end

InSpec には、チェックと監査コントロールをすばやく記述するのに役立つリソースのコレクションが含まれています。 は、これらのコントロールを Ruby で記述するためにInSpec ドメイン固有の言語 (DSL) InSpec を使用します。大規模な InSpec ユーザーコミュニティによって作成されたプロファイルを使用することもできます。例えば、 の DevSec chef-os-hardeningプロジェクトには、ノードの保護に役立つ多数のプロファイルGitHubが含まれています。プロファイルは、 GitHubまたは Amazon S3 で作成して保存できます。

仕組み

Compliance で InSpec プロファイルを使用するプロセスは、次のとおりです。

  1. 使用する定義済みプロファイルを特定するか、独自の InSpec プロファイルを作成します。で事前定義されたプロファイルを使用してGitHub開始できます。独自の InSpec プロファイルを作成する方法については、「Chef InSpecChef Profiles」を参照してください。

  2. パブリックリポジトリまたはプライベートGitHubリポジトリ、または S3 バケットにプロファイルを保存します。

  3. Systems Manager ドキュメント (SSM ドキュメント) を使用して、 InSpec プロファイルで Compliance を実行しますAWS-RunInspecChecks。Compliance スキャンはRun Command、 AWS Systems Managerの一機能である を使用してオンデマンドスキャンを開始することも、 の一機能State Managerである を使用して定期的な Compliance スキャンをスケジュールすることもできます AWS Systems Manager。

  4. Compliance API または Compliance コンソールを使用して、準拠していないノードを識別します。

注記

以下の情報に注意してください。

  • Chef はノード上のクライアントを使用してプロファイルを処理します。クライアントをインストールする必要はありません。Systems Manager が SSM ドキュメント AWS-RunInspecChecks を実行すると、システムはクライアントがインストールされているかどうかをチェックします。そうでない場合、Systems Manager はスキャン中にChefクライアントをインストールし、スキャンの完了後にクライアントをアンインストールします。

  • このトピックで説明するように、SSM ドキュメント AWS-RunInspecChecks を実行すると、対象となる各ノードにタイプ Custom:Inspec のコンプライアンスエントリが割り当てられます。このコンプライアンスタイプを割り当てるために、 ドキュメントは PutComplianceItems API オペレーションを呼び出します。

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

このセクションでは、Systems Manager コンソールと AWS Command Line Interface () を使用して InSpec コンプライアンススキャンを実行する方法について説明しますAWS CLI。コンソールの手順では、State Manager を設定してスキャンを実行する方法を示します。 AWS CLI この手順では、 を設定Run Commandしてスキャンを実行する方法を示します。

でコンプライアンススキャンを実行する InSpec State Manager (コンソール)

コンソールState Managerを使用して AWS Systems Manager で InSpec コンプライアンススキャンを実行するには
  1. https://console.aws.amazon.com/systems-manager/ で AWS Systems Manager コンソールを開きます。

  2. ナビゲーションペインで、[State Manager] を選択します。

    -または-

    AWS Systems Manager ホームページが最初に開いたら、メニューアイコン (      The menu icon   ) を選択してナビゲーションペインを開き、 State Managerを選択します。

  3. [関連付けの作成] を選択します。

  4. [関連付けの詳細の指定] セクションで、名前を入力します。

  5. [ドキュメント] リストで、[AWS-RunInspecChecks] を選択します。

  6. [ドキュメントのバージョン] リストで、[ランタイムの最新] を選択します。

  7. Parameters セクションのソースタイプリストで、 GitHubまたは S3 を選択します。

    を選択した場合はGitHubソース情報 フィールドにパブリックリポジトリまたはプライベートGitHubリポジトリの InSpec プロファイルへのパスを入力します。Systems Manager チームが https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/ PortCheckから提供するパブリックプロファイルへのパスの例を次に示します。

    {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}

    S3 を選択した場合は、ソース情報 フィールドに S3 バケットの InSpec プロファイルへの有効な URL を入力します。

    Systems Manager が GitHubおよび Amazon S3 と統合する方法の詳細については、「」を参照してくださいGitHub からのスクリプトの実行

  8. [ターゲット] セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。

    ヒント

    表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「マネージドノードの可用性のトラブルシューティング」を参照してください。

  9. [スケジュールを指定] セクションで、スケジュールビルダーオプションを使用してコンプライアンススキャンを実行するタイミングを指定するスケジュールを作成します。

  10. [レート制御] の場合:

    • [同時実行数] の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。

      注記

      マネージドノードに適用されるタグを指定するか、 AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。

    • [エラーのしきい値] で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、Systems Manager はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

  11. (オプション) コマンド出力をファイルに保存する場合は、[出力オプション][S3 バケットにコマンド出力を書き込む] ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。

    注記

    S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「Systems Manager にインスタンスのアクセス許可を設定する」または「ハイブリッド環境に IAM サービスロールを作成する」を参照してください。さらに、指定した S3 バケットが別の にある場合は AWS アカウント、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールに、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

  12. [関連付けの作成] を選択します。システムにより関連付けが作成され、コンプライアンススキャンが自動的に実行されます。

  13. スキャンが完了するまで数分待ってから、ナビゲーションペインの [コンプライアンス] を選択します。

  14. [対応するマネージドインスタンス] で、[コンプライアンスタイプ] の列が [Custom:Inspec] であるノードを見つけます。

  15. 非準拠ステータスの詳細を表示するには、ノード ID を選択します。

でコンプライアンススキャンを実行する InSpec Run Command (AWS CLI)

  1. AWS Command Line Interface (AWS CLI) をまだインストールして設定していない場合は、インストールして設定します。

    詳細については、「AWS CLIの最新バージョンをインストールまたは更新します。」を参照してください。

  2. 次のコマンドのいずれかを実行して、 GitHubまたは Amazon S3 InSpec のいずれかから プロファイルを実行します。

    コマンドでは、以下のパラメータを使用します。

    • sourceTypeGitHub: または Amazon S3

    • sourceInfo : GitHubまたは S3 バケットの InSpec プロファイルフォルダへの URL。フォルダには、ベース InSpec ファイル (*.yml) と関連するすべてのコントロール (*.rb) が含まれている必要があります。

    GitHub

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"Inspec.yml_file"}"]}'

    以下はその例です。

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'

    Amazon S3

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/DOC-EXAMPLE-BUCKET/Inspec.yml_file\"}"]}'

    以下はその例です。

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/DOC-EXAMPLE-BUCKET/InSpec/PortCheck.yml\"}"]}'
  3. コンプライアンススキャンの概要を表示するには、次のコマンドを実行します。

    aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
  4. 次のコマンドを実行して、準拠していないノードの詳細を表示します。

    aws ssm list-compliance-items --resource-ids node_ID --resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks