Skip to main content

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 ファイルが変更された別のパッケージをダウンロードします。

  1. 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 クラスの定義が含まれています。

  2. パッケージの内容を 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 データを設定します。

  1. Puppet 環境ディレクトリに移動します。

    cd /etc/puppetlabs/code/environments/production
  2. hiera.yaml ファイルを更新し、データファイルとして certbot.yaml を指定します。変更後の hiera.yaml は以下のようになります。

    version: 5
    defaults:
      datadir: data
      data_hash: yaml_data
    
    hierarchy:
      - name: "Certbot"
        path: "certbot.yaml"
  3. 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 ファイルを変更して、ノードタイプごとに固有のクラスまたは設定を含めることができます。

  1. 代替の Puppet 統合パッケージをダウンロードします。これには、変更された site.pp ファイルと init.pp ファイルが含まれています。

  2. manifests ディレクトリにある site.pp を開き、適切なクラスを含めて Puppet サーバーとエージェントノードを指定します。例:

    node 'puppet-server.example.com' {
      include certbot::server
    }
    
    node 'puppet-agent.example.com' {
      include certbot::agent
    }

    注記

    puppet-server.example.compuppet-agent.example.com は、お使いのサーバーノードとエージェントノードの実際のホスト名に置き換えてください。

  3. 上記の手順を、2 から始めて続行します。パッケージの内容を Puppet 環境ディレクトリにコピーします。

次の手順

証明書ファイル fullchain.pemprivkey.pem が Certbot 証明書ディレクトリに存在することを確認します。

ls /etc/letsencrypt/live/<certbot_domain>/

証明書は Trust Lifecycle Manager[インベントリ]ビューにも表示されるので、それを監視して通知を設定することができます。

注記

Certbot は、証明書の有効期限が切れる前に自動的に更新を試みます。自動更新を処理するために、必要な cron ジョブまたは systemd タイマーが設定されていることを確認します。通常は Certbot のデフォルトのインストールによって処理されますが、正しく設定されていることを確認してください。