

• AWS Systems Manager CloudWatch ダッシュボードは、2026 年 4 月 30 日以降は利用できなくなります。お客様は、これまでと同様に Amazon CloudWatch コンソールを使用して、Amazon CloudWatch ダッシュボードの表示、作成、管理を継続できます。詳細については、「[Amazon CloudWatch ダッシュボードのドキュメント](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)」を参照してください。

# Systems Manager Compliance で Chef InSpec プロファイルを使用する
<a name="integration-chef-inspec"></a>

AWS Systems Manager は [https://www.chef.io/products/chef-inspec](https://www.chef.io/products/chef-inspec) に統合されています。Chef InSpec はオープンソースのテストフレームワークで、人が読み取り可能なプロファイルを作成して GitHub または Amazon Simple Storage Service (Amazon S3) に保存できます。その後、Systems Manager を使用してコンプライアンススキャンを実行し、準拠または非準拠のノードを表示できます。プロファイルは、コンピューティング環境のセキュリティ、コンプライアンス、またはポリシー要件です。例えば、AWS Systems Manager のツールである Compliance でノードをスキャンするとき、次のチェックを実行するプロファイルを作成できます
+ 特定のポートが開いているか閉じているかをチェックします。
+ 特定のアプリケーションが実行中かどうかをチェックします。
+ 特定のパッケージがインストールされているかどうかをチェックします。
+ 特定のプロパティの Windows レジストリキーをチェックします。

Systems Manager で管理している Amazon Elastic Compute Cloud (Amazon EC2) インスタンス用の InSpec プロファイル*のみ*作成できます。オンプレミスサーバーまたは仮想マシン (VM) は、サポートされていません。次のサンプル 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 には、チェックや監査コントロールを迅速に書き込みするのに役立つリソースのコレクションが含まれています。InSpec は [InSpec ドメイン固有言語 (DSL)](https://docs.chef.io/inspec/7.0/reference/glossary/#dsl) を使用して、これらのコントロールを Ruby で書き込みます。InSpec ユーザーの大規模なコミュニティで作成されたプロファイルを使用することもできます。例えば、GitHub の [DevSec chef-os-hardening](https://github.com/dev-sec/chef-os-hardening) プロジェクトには、ノードをセキュリティで保護するのに役立つ数多くのプロファイルが含まれています。プロファイルを記述して GitHub または Amazon S3 に保存できます。

## 仕組み
<a name="integration-chef-inspec-how"></a>

ここでは、Compliance で InSpec プロファイルを使用するプロセスの仕組みを説明します。

1. 事前定義された InSpec プロファイルを使用するよう指定するか、独自に作成します。GitHub の[事前定義されたプロファイル](https://github.com/search?p=1&q=topic%3Ainspec+org%3Adev-sec&type=Repositories)を使用して開始できます。独自の InSpec プロファイルを作成する方法については、[Chef InSpec プロファイル](https://www.inspec.io/docs/reference/profiles/)に関するページを参照してください。

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

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

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

**注記**  
以下の情報に注意してください。  
Chef はノードのクライアントを使用してプロファイルを処理します。クライアントをインストールする必要はありません。Systems Manager が SSM ドキュメント `AWS-RunInspecChecks` を実行すると、システムはクライアントがインストールされているかどうかをチェックします。インストールされていない場合、Systems Manager はスキャン中に Chef クライアントをインストールし、スキャンが完了した後にクライアントをアンインストールします。
このトピックで説明するように、SSM ドキュメント `AWS-RunInspecChecks` を実行すると、対象となる各ノードにタイプ `Custom:Inspec` のコンプライアンスエントリが割り当てられます。このコンプライアンスタイプを割り当てるために、ドキュメントは [PutComplianceItems](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_PutComplianceItems.html) API オペレーションを呼び出します。

## InSpec コンプライアンススキャンの実行
<a name="integration-chef-inspec-running"></a>

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

### State Manager (コンソール) を使用して InSpec コンプライアンススキャンを実行する
<a name="integration-chef-inspec-running-console"></a>

**AWS Systems Manager コンソールを使用して State Manager で InSpec コンプライアンススキャンを実行するには**

1. AWS Systems Manager コンソール ([https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)) を開きます。

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

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

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

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

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

1. **[パラメータ]** セクション内の **[ソースタイプ]** リストで、**[GitHub]** または **[S3]** を選択します。

   **[GitHub]** を選択した場合は、**[ソース情報]** フィールドのパブリックまたはプライベート GitHub リポジトリに InSpec プロファイルへのパスを入力します。Systems Manager チームによって提供された以下の場所からのパブリックプロファイルの例です [https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck](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 からのスクリプトの実行](integration-remote-scripts.md)」を参照してください。

1. **[ターゲット]** セクションで、タグの指定、インスタンスやエッジデバイスの手動選択、リソースグループの指定により、このオペレーションを実行するマネージドノードを選択します。
**ヒント**  
表示されるはずのマネージドノードが表示されない場合は、トラブルシューティングのヒントについて「[マネージドノードの可用性のトラブルシューティング](fleet-manager-troubleshooting-managed-nodes.md)」を参照してください。

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

1. **[レート制御]** の場合:
   + **[同時実行数]** の場合、コマンドを同時に実行するマネージドノードの数または割合を指定します。
**注記**  
マネージドノードに適用されるタグを指定するか、AWS リソースグループを指定してターゲットを選択し、ターゲットとなるマネージドノードの数が不明な場合は、割合を指定してドキュメントを同時に実行できるターゲットの数を制限します。
   + **[エラーのしきい値]** で、ノードの数または割合のいずれかで失敗した後、他のマネージドノードでのコマンドの実行をいつ停止するか指定します。例えば、3 つのエラーを指定した場合、4 番目のエラーが受信されると、システムマネージャー はコマンドの送信を停止します。コマンドを処理しているマネージドノードもエラーを送信する可能性があります。

1. (オプション) コマンド出力をファイルに保存する場合は、**[出力オプション]** の **[S3 バケットにコマンド出力を書き込む]** ボックスを選択します。ボックスにバケット名とプレフィックス (フォルダ) 名を入力します。
**注記**  
S3 バケットにデータを書き込む機能を許可する S3 許可は、このタスクを実行する IAM ユーザーのものではなく、インスタンスに割り当てられたインスタンスプロファイル (EC2 インスタンスの場合) または IAM サービスロール (ハイブリッドアクティベーションマシン) のものです。詳細については、「[Systems Manager に必要なインスタンスのアクセス許可を設定する](setup-instance-permissions.md)」または「[ハイブリッド環境に IAM サービスロールを作成する](hybrid-multicloud-service-role.md)」を参照してください。さらに、指定された S3 バケットが別の AWS アカウント にある場合は、マネージドノードに関連付けられたインスタンスプロファイルまたは IAM サービスロールが、そのバケットへの書き込みに必要なアクセス許可があることを確認してください。

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

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

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

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

### Run Command (AWS CLI) を使用した InSpec コンプライアンススキャンの実行
<a name="integration-chef-inspec-running-cli"></a>

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

   詳細については、「[AWS CLI の最新バージョンをインストールまたは更新します。](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

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

    コマンドでは、以下のパラメータを使用します。
   + **sourceType**: GitHub または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}}/{{amzn-s3-demo-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}}/amzn-s3-demo-bucket/InSpec/PortCheck.yml\"}"]}' 
   ```

1. コンプライアンススキャンの概要を表示するには、次のコマンドを実行します。

   ```
   aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
   ```

1. 次のコマンドを実行して、準拠していないノードの詳細を表示します。

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