ACME ベースの登録
以下の手順に従って、DigiCert® Trust Lifecycle Manager から Puppet 環境に証明書を取得し、ACMEv2 プロトコルで要求を生成して、生成された証明書をダウンロードします。
開始する前に
Trust Lifecycle Manager では、登録方法として 3rd-party ACME client を指定した証明書プロファイルが必要です。このプロファイルは一般的な証明書プロパティを定義し、必要な ACME URL と外部アカウントバインディング(EAB)クレデンシャルを次のように提供します。
ACME ディレクトリの URL: Trust Lifecycle Manager から証明書を要求する ACME サーバーの URL。
鍵識別子(KID): Trust Lifecycle Manager アカウントで証明書プロファイルを識別します。
HMAC キー: 証明書要求中にアカウントの鍵を暗号化し、認証する際に使用されます。
統合ワークフロー
Puppet を使用して ACME ベースの証明書の登録プロセスを開始するには、提供されているサンプルファイルをダウンロードして解凍し、それを適切な Puppet 環境ディレクトリに移動する必要があります。このように設定すると、Puppet は設定ファイルとモジュールを正しく見つけて使用できるようになります。
重要
以下にリンクされている統合パッケージには、ワイルドカード(default)ノードブロックを使用する site.pp ファイルが含まれています。つまり、certbot クラスがデフォルトですべてのノードに適用されるということです。「Optional: Custom server and agent configuration」を参照して、site.pp および init.pp ファイルが変更された別のパッケージをダウンロードします。
Puppet 統合パッケージをダウンロードして、以下の環境ファイルを取得します。
production/data/certbot.yaml: Certbot 設定のキーと値のペア。メール、ドメイン、ACME サーバー詳細などが含まれ、データ検索のとき Hiera によって使用されます。production/environment.conf: 本番環境に向けた環境固有の設定、たとえばモジュールパスやマニフェストの場所などが定義されます。production/hiera.yaml: Puppet の階層型データ検索ツールである Hiera を設定し、設定データを解決するためのデータソースと階層を指定します。production/manifests/site.pp: 本番環境のメインのマニフェストファイルです。ノード固有の設定を定義し、必要なクラスを含んでいます。production/modules/certbot/manifests/init.pp: Certbot のインストールと証明書を管理するためのリソース宣言と設定など、Certbot クラスの定義が含まれています。
パッケージの内容を Puppet 環境ディレクトリにコピーします。
sudo -u puppet cp -r puppet-acme-integration/production/* /etc/puppetlabs/code/environments/production/
注記
puppetユーザーとしてファイルをコピーすると、ファイルの所有権と権限が確実に正しく設定されます。puppetユーザーとしてファイルをコピーしなかった場合は、ルート(sudo)としてコピーしてから、適切なアクセス権を保証するために所有権を調整します。sudo chown -R puppet:puppet /etc/puppetlabs/code/environments/production/
このステップでは、Certbot を使用して SSL/TLS 証明書を要求し管理するための環境を設定するうえで必要な Puppet マニフェストと Hiera データを設定します。
Puppet 環境ディレクトリに移動します。
cd /etc/puppetlabs/code/environments/production
hiera.yamlファイルを更新し、データファイルとしてcertbot.yamlを指定します。変更後のhiera.yamlは以下のようになります。version: 5 defaults: datadir: data data_hash: yaml_data hierarchy: - name: "Certbot" path: "certbot.yaml"data ディレクトリで
certbot.yamlファイルを開き、以下のキー/値ペアを更新します。certbot::certbot_email: 証明書通知を受信する連絡先メールアドレス。certbot::certbot_domain: 証明書を発行する対象のドメイン名。certbot::certbot_http_port: ACME チャレンジに使用する HTTP ポート(通常はポート 80)。certbot::certbot_eab_kid: 外部アカウントバインディング(EAB)用の鍵 ID(KID)。ACME プロバイダーによって提供されます。certbot::certbot_eab_hmac_key: EAB の HMAC キー。certbot::certbot_server: ACME プロバイダー(Let’s Encrypt など)のディレクトリ URL。certbot::certbot_rsa_key_size: 証明書について希望する RSA 鍵サイズ。
Puppet サーバーで Trust Lifecycle Manager から証明書を要求するには、以下のコマンドを実行します。
sudo /opt/puppetlabs/bin/puppet apply /etc/puppetlabs/code/environments/production/manifests/site.pp
このコマンドは、以下の処理を実行します。
site.ppマニフェストを読み込みます。これには、certbotクラスが含まれます。init.ppからのcertbotクラスで定義されている設定を適用します。これには、必要なパッケージのインストール、Certbot の設定、証明書の要求が含まれます。PEM 形式の証明書を
/etc/letsencrypt/live/<certbot_domain>/にダウンロードします。
特定の環境では、Puppet サーバーとエージェントノードに異なる設定を適用しなければならないことがあります。特に、役割が異なる場合や個別の処理が必要な場合です。Puppet サーバーとエージェントノードに対して異なる設定を指定する場合は、site.pp ファイルを変更して、ノードタイプごとに固有のクラスまたは設定を含めることができます。
代替の Puppet 統合パッケージをダウンロードします。これには、変更された
site.ppファイルとinit.ppファイルが含まれています。manifestsディレクトリにあるsite.ppを開き、適切なクラスを含めて Puppet サーバーとエージェントノードを指定します。例:node 'puppet-server.example.com' { include certbot::server } node 'puppet-agent.example.com' { include certbot::agent }注記
puppet-server.example.comとpuppet-agent.example.comは、お使いのサーバーノードとエージェントノードの実際のホスト名に置き換えてください。上記の手順を、2 から始めて続行します。パッケージの内容を Puppet 環境ディレクトリにコピーします。
次の手順
証明書ファイル fullchain.pem と privkey.pem が Certbot 証明書ディレクトリに存在することを確認します。
ls /etc/letsencrypt/live/<certbot_domain>/
証明書は Trust Lifecycle Manager の[インベントリ]ビューにも表示されるので、それを監視して通知を設定することができます。
注記
Certbot は、証明書の有効期限が切れる前に自動的に更新を試みます。自動更新を処理するために、必要な cron ジョブまたは systemd タイマーが設定されていることを確認します。通常は Certbot のデフォルトのインストールによって処理されますが、正しく設定されていることを確認してください。