

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

# スターターキットを使用して Chef サーバーを設定する
<a name="opscm-starterkit"></a>

**重要**  
AWS OpsWorks for Chef Automate は 2024 年 5 月 5 日にサポート終了となり、新規および既存のお客様の両方で無効になっています。既存のお客様は、 Chef SaaS または代替ソリューションに移行することをお勧めします。ご質問がある場合は、[AWS re:Post](https://repost.aws/) または[AWS プレミアムサポート](https://aws.amazon.com/support)を通じて AWS サポート チームにお問い合わせください。

Chef サーバー作成の進行中に、 AWS OpsWorks for Chef Automate コンソールでプロパティページを開きます。新しい Chef サーバーの初回操作時に、[Properties] ページで 2 つの必須項目をダウンロードするように求められます。Chef サーバーがオンラインになる前に、これらの項目をダウンロードします。新しいサーバーがオンラインになった後は、ダウンロードボタンは使用できません。

![\[AWS OpsWorks for Chef Automate 新しいサーバープロパティページ\]](http://docs.aws.amazon.com/ja_jp/opsworks/latest/userguide/images/opscm_serverpropsdownload.png)

+ [**Sign-in credentials for the Chef server (Chef サーバー用のサインイン認証情報)**]。これらの認証情報を使用して Chef Automate ダッシュボードにサインインします。ここでは、ワークフローやコンプライアンススキャンなどの Chef Automate のプレミアム機能を使用します。 OpsWorks は、これらの認証情報を保存しません。これは、表示およびダウンロードできる最後の時間です。必要であれば、これらの認証情報で提供されたパスワードをサインイン後に変更できます。
+ **Starter Kit** (スターターキット)。スターターキットには、サンプル付きの README ファイル、`knife.rb` の設定ファイル、およびプライマリユーザーまたは主要ユーザー用のプライベートキーが含まれています。スターターキットをダウンロードするごとに、新しいキーペアが生成され、以前のキーはリセットされます。

Starter Kit .zip ファイルには、新しいサーバーでのみ機能する認証情報に加えて、任意の AWS OpsWorks for Chef Automate サーバーで動作する Chef リポジトリの簡単な例が含まれています。Chef リポジトリには、Chef で管理するノード用のクックブック、ロール、設定ファイル、および他のアーティファクトが保存されます。このリポジトリは、バージョン管理システム (Git など) に保存し、ソースコードとして扱うことをお勧めします。Git で追跡されるように Chef リポジトリをセットアップする方法に関する情報およびサンプルについては、Chef ドキュメントの「[About the chef-repo](https://docs.chef.io/chef_repo.html)」(chef-repo について) を参照してください。

## 前提条件
<a name="finish-server-prereqs"></a>

1. サーバー作成の進行中に、Chef サーバーのサインイン認証情報をダウンロードし、セキュアだが便利な場所に保存します。

1. スターターキットをダウンロードし、スターターキットの .zip ファイルをワークスペースディレクトリに解凍します。スターターキットのプライベートキーは共有しないでください。他のユーザーが Chef サーバーを管理する場合は、後で Chef Automate ダッシュボードでそのユーザーを管理者として追加します。

1. [[Chef Workstation]](https://downloads.chef.io/products/workstation) (以前はChef Development Kit または Chef DK として知られていた)をダウンロードして、Chef サーバおよびノードの管理に使用するコンピュータにインストールします。[https://docs.chef.io/knife.html](https://docs.chef.io/knife.html) ユーティリティは Chef Workstation の一部です。その手順については、Chef のウェブサイトにある[「Install Chef Workstation」](https://docs.chef.io/workstation/install_workstation/)(Chef Workstationのインストール) を参照してください。

## スターターキットの内容を見る
<a name="w2ab1b9c28c15c15"></a>

スターターキットの内容は以下のとおりです。
+ `cookbooks/` - 作成するクックブックのディレクトリ。`cookbooks/` フォルダには、[Chef スーパーマーケット](https://supermarket.chef.io/cookbooks/nginx)ウェブサイトの `nginx` クックブックに依存する `opsworks-webserver` クックブック、ラッパークックブックが含まれています。クックブックの依存関係が `cookbooks/` のディレクトリ内で利用できない場合、`Policyfile.rb` のデフォルトでは Chef supermarket を二次ソースとして使用します。
+ `Policyfile.rb` - ノードのポリシーになるクックブック、依存関係、属性を定義する Ruby ベースのポ リシーファイル。
+ `userdata.sh` および `userdata.ps1` - Chef Automate サーバーの起動後に、ユーザーデータファイルを使用してノードを自動的に関連付けることができます。`userdata.sh` は Linux ベースのノードのブートストラップ用、`userdata.ps1` は Windows ベースのノード用です。
+ `Berksfile` - Berkshelf と `berks` のコマンドを使用してクックブックとその依存関係をアップロードする場合は、このファイルを使用できます。このチュートリアルでは、`Policyfile.rb` と Chef コマンドを使用して、クックブック、依存関係、属性をアップロードします。
+ `README.md` - スターターキットを使用して Chef Automate サーバーを初めて設定する方法について説明する Markdown ベースのファイル。
+ `.chef` - knife 設定ファイル (`knife.rb`) とシークレット認証キーファイル (.pem) を含む隠しディレクトリ。
  + `.chef/knife.rb` - knife 設定ファイル (`knife.rb`)。この[https://docs.chef.io/config_rb_knife.html](https://docs.chef.io/config_rb_knife.html)ファイルは、Chef の[https://docs.chef.io/knife.html](https://docs.chef.io/knife.html)ツールオペレーションが AWS OpsWorks for Chef Automate サーバーに対して実行されるように設定されています。
  + `.chef/ca_certs/opsworks-cm-ca-2020-root.pem` - OpsWorksに付属している、認証機関 (CA) による署名付きの SSL プライベートキー。このキーによって、サーバーで管理されるノード上の Chef Infra クライアントエージェントに対して、サーバーが自身を識別できるようになります。

## Chef リポジトリを設定する
<a name="w2ab1b9c28c15c17"></a>

Chef リポジトリには複数のディレクトリが置かれています。スターターキットの各ディレクトリには、そのディレクトリの目的、および Chef でシステムを管理するための使用方法が記述されている README ファイルがあります。Chef サーバーにクックブックをインストールするには、2 つの方法があります。`knife` コマンドを実行する方法と、Chef コマンドを実行する方法です。後者のコマンドは、ポリシーファイル (`Policyfile.rb`) をサーバーにアップロードし、指定されたクックブックをダウンロードしてインストールします。このチュートリアルでは、Chef コマンドと `Policyfile.rb` を使用してクックブックをサーバーにインストールします。

1. クックブックを保存するためのディレクトリ (`chef-repo` など) をローカルコンピュータ上に作成します。このリポジトリにクックブック、ロール、および他のファイルを追加した後に、バージョニングされているセキュアなシステム (CodeCommit、Git、Amazon S3 など) にリポジトリをアップロードまたは保存することをお勧めします。

1. `chef-repo` ディレクトリに、以下のディレクトリを作成します。
   + `cookbooks/` - クックブックを保存する。
   + `roles/` - ロールを `.rb` 形式または `.json` 形式で保存します。
   + `environments/` - 環境を `.rb` 形式または `.json` 形式で保存します。

## Policyfile.rb を使用してリモートソースからクックブックを取得する
<a name="install-cookbooks-policyfile"></a>

このセクションでは、クックブックを指定するように `Policyfile.rb` を編集してから、そのファイルをサーバーにアップロードしてクックブックをインストールする Chef コマンドを実行します。

1. スターターキットの `Policyfile.rb` を表示します。デフォルトでは `Policyfile.rb` には、`opsworks-webserver` ラッパークックブックが含まれています。これは、Chef Supermarket のウェブサイトで入手可能な [https://supermarket.chef.io/cookbooks/nginx](https://supermarket.chef.io/cookbooks/nginx) クックブックの依存関係となります。`nginx` は、管理対象ノードにウェブサーバーをインストールして設定するクックブックです。また、管理対象ノードに Chef Infra クライアントエージェントをインストールする、必須の `chef-client` クックブックも指定されています。

   `Policyfile.rb` は、ノードのコンプライアンススキャンの設定に使用できるオプションの Chef Audit クックブックも参照しています。コンプライアンススキャンの設定と管理対象ノードのコンプライアンス結果の取得の詳細については、「[でのコンプライアンススキャン AWS OpsWorks for Chef Automate](opscm-chefcompliance.md)」を参照してください 今すぐコンプライアンススキャンと監査を設定しない場合は、`'audit'` セクションから `run_list` を削除します。ファイルの末尾に `audit` クックブックの属性を指定しないでください。

   ```
   # Policyfile.rb - Describe how you want Chef to build your system.
   #                 
   # For more information about the Policyfile feature, visit                                             
   # https://docs.chef.io/policyfile.html                                                                 
   
   # A name that describes what the system you're building with Chef does.                                
   name 'opsworks-demo-webserver'
   
   # The cookbooks directory is the preferred source for external cookbooks                               
   default_source :chef_repo, "cookbooks/" do |s|                                                         
     s.preferred_for "nginx", "windows", "chef-client", "yum-epel", "seven_zip",  
                     "build-essential", "mingw", "ohai", "audit", "logrotate", "cron"                     
   end
   # Alternative source 
   default_source :supermarket                                                                            
   
   # run_list: chef-client runs these recipes in the order specified.                                 
   run_list  'chef-client',
             'opsworks-webserver',
             'audit'
   # add 'ssh-hardening' to your runlist to fix compliance issues detected by the ssh-baseline profile    
   
   # Specify a custom source for a single cookbook:                                                       
   cookbook 'opsworks-webserver', path: 'cookbooks/opsworks-webserver'                               
   
   # Policyfile defined attributes
   
   # 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"
     }
   ]
   ```

   以下に示しているのは、現時点で `Policyfile.rb` ウェブサーバーのみを設定する場合に、`audit` クックブックとその属性を削除した `nginx` の例です。

   ```
   # Policyfile.rb - Describe how you want Chef to build your system.
   #
   # For more information on the Policyfile feature, visit
   # https://docs.chef.io/policyfile.html
   
   # A name that describes what the system you're building with Chef does.
   name 'opsworks-demo-webserver'
   
   # Where to find external cookbooks:
   default_source :supermarket
   
   # run_list: chef-client will run these recipes in the order specified.
   run_list  'chef-client',
             'opsworks-webserver'
   
   # Specify a custom source for a single cookbook:
   cookbook 'opsworks-webserver', path: 'cookbooks/opsworks-webserver'
   ```

   `Policyfile.rb` に変更を加えた場合は、必ずこのファイルを保存してください。

1. `Policyfile.rb` に定義されているクックブックをダウンロードしてインストールします。

   ```
   chef install
   ```

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

1. コンプライアンススキャンを設定し、`audit` クックブックの情報をポリシーファイルに保存した場合は、ポリシー `opsworks-demo` をサーバーにプッシュします。

   ```
   chef push opsworks-demo
   ```

1. ステップ 3 が完了したら、ポリシーのインストールを確認します。以下のコマンドを実行してください。

   ```
   chef show-policy
   ```

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

   ```
   opsworks-demo-webserver 
   ======================= 
   * opsworks-demo:  ec0fe46314
   ```

1. これで、Chef Automate サーバーにノードを追加 (ブートストラップ) する準備ができました。ノードの関連付けを自動化するには、[でノードを自動的に追加する AWS OpsWorks for Chef Automate](opscm-unattend-assoc.md) のステップに従うか、または [ノードを個別に追加します](opscm-addnodes-individually.md) のステップに従ってノードを 1 つずつ追加します。

## (代替) Berkshelf を使用してリモートソースからクックブックを取得する
<a name="opscm-berkshelf"></a>

Berkshelf は、クックブックとその依存関係を管理するためのツールです。ローカルストレージにクックブックをインストールするために `Policyfile.rb` の代わりに Berkshelf を使用する場合は、前のセクションの代わりにこのセクションの手順を使用します。Chef サーバーで使用するクックブックとそのバージョンを指定し、クックブックをアップロードできます。スターターキットには、クックブックの一覧表示に使用できる `Berksfile` というファイルが含まれています。

1. 使用を開始するには、含まれている Berksfile に `chef-client` クックブックを追加します。`chef-client` クックブックは、Chef Automate サーバーに接続する各ノードで Chef Infra クライアントエージェントソフトウェアを設定します。このクックブックの詳細については、Chef Supermarket にある「[Chef Client Cookbook](https://supermarket.chef.io/cookbooks/chef-client)」(Chef クライアントクックブック) を参照してください。

1. テキストエディタを使用して、ウェブサーバーアプリケーションをインストールする Berksfile に別のクックブックを追加します。たとえば、Apache ウェブサーバーをインストールする `apache2` クックブックです。Berksfile は以下のようになります。

   ```
   source 'https://supermarket.chef.io'
   cookbook 'chef-client'
   cookbook 'apache2'
   ```

1. そのクックブックをローカルコンピュータにダウンロードしてインストールします。

   ```
   berks install
   ```

1. そのクックブックを Chef サーバーにアップロードします。

   Linux では、次のコマンドを実行します。

   ```
   SSL_CERT_FILE='.chef/ca_certs/opsworks-cm-ca-2020-root.pem' berks upload
   ```

   Windows では、PowerShell セッションで次の Chef Workstation コマンドを実行します。コマンドを実行する前に、PowerShell の実行ポリシーを `RemoteSigned` に設定しておきます。PowerShell で Chef Workstation のユーティリティコマンドを利用できるように、`chef shell-init` を追加します。

   ```
   $env:SSL_CERT_FILE="ca_certs\opsworks-cm-ca-2020-root.pem"
   chef shell-init berks upload
   Remove-Item Env:\SSL_CERT_FILE
   ```

1. Chef Automate サーバーで現在使用可能なクックブックのリストを表示して、クックブックがインストールされていることを確認します。そのためには、以下の `knife` コマンドを実行します。

    AWS OpsWorks for Chef Automate サーバーで管理するノードを追加する準備ができました。

   ```
   knife cookbook list
   ```

## (オプション) カスタムドメインを使用するように `knife` を設定します。
<a name="opscm-starterkit-customdomain"></a>

Chef Automate サーバーがカスタムドメインを使用している場合は、サーバーの証明書チェーンに署名したルート CA の PEM 証明書を追加するか、証明書が自己署名の場合はサーバー PEM 証明書を追加する必要があります。`ca_certs` は、Chef `knife` ユーティリティによって信頼される認証機関 (CA) を含む `chef/` のサブディレクトリです。

カスタムドメインを使用していない場合、またはカスタム証明書がオペレーティングシステムで信頼されているルート CA によって署名されている場合は、このセクションを省略できます。それ以外の場合は、次のステップで説明するように、Chef Automate サーバーの SSL 証明書を信頼するように `knife` を設定します。

1. 以下のコマンドを実行してください。

   ```
   knife ssl check
   ```

   結果が次のような場合は、この手順の残りの部分をスキップして、「[Chef サーバーで管理するノードを追加する](opscm-addnodes.md)」に進みます。

   ```
   Connecting to host my-chef-automate-server.my-corp.com:443
             Successfully verified certificates from 'my-chef-automate-server.my-corp.com'
   ```

   次のようなエラーメッセージが表示された場合は、次のステップに進みます。

   ```
   Connecting to host my-chef-automate-server.my-corp.com:443
             ERROR: The SSL certificate of my-chef-automate-server.my-corp.com could not be verified.
             ...
   ```

1. `knife ssl fetch` を実行して、 AWS OpsWorks for Chef Automate サーバーの証明書を信頼します。または、サーバーのルート CA 証明書 (PEM 形式) を、`trusted_certs_dir` の出力の `knife ssl check` の値であるディレクトリに手動でコピーすることもできます。デフォルトでは、このディレクトリはスターターキットの `.chef/ca_certs/` にあります。出力は次のようになります。

   ```
   WARNING: Certificates from my-chef-automate-server.my-corp.com will be fetched and placed in your trusted_cert
             directory (/Users/username/starterkit/.chef/../.chef/ca_certs).
          
             Knife has no means to verify these are the correct certificates. You should
             verify the authenticity of these certificates after downloading.
          
             Adding certificate for my-chef-automate-server in /Users/users/starterkit/.chef/../.chef/ca_certs/servv-aqtswxu20swzkjgz.crt
             Adding certificate for MyCorp_Root_CA in /Users/users/starterkit/.chef/../.chef/ca_certs/MyCorp_Root_CA.crt
   ```

1. `knife ssl check` をもう一度実行します。出力は次のようになります。

   ```
   Connecting to host my-chef-automate-server.my-corp.com:443
             Successfully verified certificates from 'my-chef-automate-server.my-corp.com'
   ```

   これで、Chef Automate サーバーで `knife` を使用する準備ができました。