スターターキットを使用して Chef サーバーを設定する - AWS OpsWorks

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

スターターキットを使用して Chef サーバーを設定する

重要

なぜなら、AWS OpsWorks Chef Automate はもはや新規顧客を受け入れていないからです。2024 年 5 月 5 日までは、既存のお客様には影響はありません。その時点でサービスは利用できなくなります。既存のお客様は、 Chef SaaS または代替ソリューションに移行することをお勧めします。詳細については、「AWS OpsWorks Chef Automate のサポート終了に関するよくある質問」を参照してください。

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


            AWS OpsWorks for Chef Automate の新しいサーバープロパティページ
  • [Sign-in credentials for the Chef server (Chef サーバー用のサインイン認証情報)]。これらの認証情報を使用して Chef Automate ダッシュボードにサインインします。そこで、Chef Automate のプレミアム機能 (ワークフローやコンプライアンススキャンなど) を使用します。これらの認証情報は AWS OpsWorks では保存されません。つまり、認証情報を表示およびダウンロードできる最後の機会です。必要であれば、これらの認証情報で提供されたパスワードをサインイン後に変更できます。

  • Starter Kit (スターターキット)。スターターキットには、サンプル付きの README ファイル、knife.rb の設定ファイル、およびプライマリユーザーまたは主要ユーザー用のプライベートキーが含まれています。スターターキットをダウンロードするごとに、新しいキーペアが生成され、以前のキーはリセットされます。

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

前提条件

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

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

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

スターターキットの内容を見る

スターターキットの内容は以下のとおりです。

  • cookbooks/ - 作成するクックブックのディレクトリ。cookbooks/ フォルダには、Chef スーパーマーケットウェブサイトの 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)。knife.rb ファイルは、Chef の knife ツールのオペレーションが AWS OpsWorks for Chef Automate サーバーに対して実行されるように設定されています。

    • .chef/ca_certs/opsworks-cm-ca-2020-root.pem - AWS OpsWorks に付属している、認証機関 (CA) による署名付きの SSL プライベートキー。このキーによって、サーバーで管理されるノード上の Chef Infra クライアントエージェントに対して、サーバーが自身を識別できるようになります。

Chef リポジトリを設定する

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

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

  2. chef-repo ディレクトリに、以下のディレクトリを作成します。

    • cookbooks/ - クックブックを保存する。

    • roles/ - ロールを .rb 形式または .json 形式で保存します。

    • environments/ - 環境を .rb 形式または .json 形式で保存します。

Policyfile.rb を使用してリモートソースからクックブックを取得する

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

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

    Policyfile.rb は、ノードのコンプライアンススキャンの設定に使用できるオプションの Chef Audit クックブックも参照しています。コンプライアンススキャンの設定と管理対象ノードのコンプライアンス結果の取得の詳細については、「AWS OpsWorks for Chef Automate でのコンプライアンススキャン」を参照してください 今すぐコンプライアンススキャンと監査を設定しない場合は、'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 に変更を加えた場合は、必ずこのファイルを保存してください。

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

    chef install

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

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

    chef push opsworks-demo
  4. ステップ 3 が完了したら、ポリシーのインストールを確認します。以下のコマンドを実行します。

    chef show-policy

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

    opsworks-demo-webserver ======================= * opsworks-demo: ec0fe46314
  5. これで、Chef Automate サーバーにノードを追加 (ブートストラップ) する準備ができました。ノードの関連付けを自動化するには、AWS OpsWorks for Chef Automateにおけるノードの自動的な追加 のステップに従うか、または ノードを個別に追加します のステップに従ってノードを 1 つずつ追加します。

(代替) Berkshelf を使用してリモートソースからクックブックを取得する

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

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

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

    source 'https://supermarket.chef.io' cookbook 'chef-client' cookbook 'apache2'
  3. そのクックブックをローカルコンピュータにダウンロードしてインストールします。

    berks install
  4. そのクックブックを 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
  5. Chef Automate サーバーで現在使用可能なクックブックのリストを表示して、クックブックがインストールされていることを確認します。そのためには、以下の knife コマンドを実行します。

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

    knife cookbook list

(オプション) カスタムドメインを使用するように knife を設定します。

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

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

  1. 以下のコマンドを実行します。

    knife ssl check

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

    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. ...
  2. 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
  3. 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 を使用する準備ができました。