nickjj.acme_sh
ansible-acme-shとは? 
ansible-acme-shは以下の目的を持ったAnsibleの役割です:
- acme.shをインストールして、Let's Encryptに基づくSSL証明書を発行、更新または削除
- 単一、複数、またはワイルドカードドメインのための証明書を発行
- 1つの証明書で複数のドメインを設定、または別々の証明書を使用
- acme.shの自動DNS API機能を使用してDNSベースのチャレンジを発行
- 事前設定が足りない場合にカスタムacme.shコマンドを実行
なぜこの役割を使いたいのですか?
この役割は、SSL証明書の発行と自動更新の複雑さを処理する自己完結型のBashスクリプトであるacme.shを使用しています。
この役割の目的は、高度に設定可能でありながら、ドメイン名のリスト、DNSプロバイダーの設定、およびDNSプロバイダーのAPIキーを提供するだけで始められるように、十分に合理的なデフォルトを持つことです。
すべてのタスクは冪等性を持ち、これが私のスタイルです!
なぜDNSベースのチャレンジのみがサポートされているのですか?
DNSによるチャレンジを行うことで、Webサーバーやプロキシがプロビジョニングされる前に証明書を設定できます。また、WebサーバーはACMEチャレンジの動作について何も知っている必要がありません。この役割が生成する最終的な証明書を参照するだけでよいのです。
もう1つの利点は、Docker内でWebサーバーを実行する場合、Ansibleによってサーバーがプロビジョニングされるまでそれを立ち上げる必要がないことです。例えば、アプリのデプロイを開始するために、Gitベースのデプロイを設定することが一般的です。
Let's Encryptを使用してワイルドカード証明書を発行する唯一の方法がDNSチャレンジであるため、これを利用しています。すべての証明書タイプで動作するソリューションに集中するのが正しい判断だと考えました。
そのため、スタンドアロン、Webroot、nginx、またはApacheなどの他のモードはサポートしないかもしれませんが、まだ決まってはいません。
サポートされているプラットフォーム
- Ubuntu 16.04 LTS (Xenial)
- Ubuntu 18.04 LTS (Bionic)
- Debian 8 (Jessie)
- Debian 9 (Stretch)
役割の変数
# acme.shが実行されるユーザー。このユーザーはすでに存在している必要があります。
acme_sh_become_user: "root"
# acme.shのパッケージ依存関係。デフォルトの値はDebian / Ubuntu用です。
# CentOSやFedoraでは"cron"を"crond"に置き換えられます。
acme_sh_dependencies: ["cron", "git", "wget"]
# クローンするacme.shリポジトリのURL。
acme_sh_git_url: "https://github.com/acmesh-official/acme.sh"
# クローンするブランチ、タグ、またはコミット。
acme_sh_git_version: "master"
# デフォルトでは、今このリポジトリをクローンしてから6ヶ月後にもう一度クローンすると、6ヶ月前の古いマスターバージョンに固定されます。
# 毎回最新のマスターバージョンを取得したい場合は、これをTrueに設定してください。
acme_sh_git_update: False
# このリポジトリはどこにクローンされますか?
acme_sh_git_clone_dest: "/usr/local/src/acme.sh"
# 有効にすると、acme.shは自己を最新バージョンにアップグレードします。
# これはソースコードをクローンした後に行われます。
acme_sh_upgrade: False
# 有効にすると、クローンしたソースコード、インストールパス、ログファイル、およびリニューアルのcronジョブが削除されます。
acme_sh_uninstall: False
# Let's Encryptアカウントを作成する場合にオプションでメールアドレスを提供できます。
# デフォルトでは設定されていませんが、必要に応じてあなたのメールアドレスを追加できます。
acme_sh_account_email: ""
# 証明書はacme.shが管理するcronジョブを介して更新されます。デフォルトではacme.shは60日ごとにリニューアル試行を行います。
acme_sh_renew_time_in_days: 30
# 証明書がコピーされる基本パス。acme.shで生成された証明書の最終的な保存先です。
acme_sh_copy_certs_to_path: "/etc/ssl/ansible"
# 実行後、Ansibleのデバッグメッセージが有効なSSL証明書のリストとその有効期限を表示します。
acme_sh_list_domains: True
# デフォルトはテストサーバーを使用するためにTrueです。これをFalseにすると、実際のLet's Encryptサーバーを使用します。
acme_sh_default_staging: True
# ドメインリストが変更されていなくても新しい証明書を再生成します。有効にすると、レート制限の可能性があります。
acme_sh_default_force_issue: False
# 既存の証明書リストのために新しい証明書を再生成します。
acme_sh_default_force_renew: False
# より詳細な情報をSTDOUTに表示します。テスト時に便利です。
acme_sh_default_debug: False
# どのDNSプロバイダーを使用すべきですか?
acme_sh_default_dns_provider: "dns_dgon"
# DNSプロバイダーのAPIキーは何ですか?
acme_sh_default_dns_provider_api_keys: {}
# TXTレコードをDNSに設定した後、acme.shが睡眠する時間はどのくらいですか?
acme_sh_default_dns_sleep: 120
# 新しい証明書を発行する際に追加のフラグを追加できます。
acme_sh_default_extra_flags_issue: ""
# 証明書を更新する際に追加のフラグを追加できます。
acme_sh_default_extra_flags_renew: ""
# 証明書をインストールする際に追加のフラグを追加できます。
acme_sh_default_extra_flags_install_cert: ""
# 証明書が発行または更新された際に実行されるコマンドを指定できます。
acme_sh_default_install_cert_reloadcmd: "sudo systemctl reload nginx"
# 証明書の発行または更新のライフサイクルにフックすることができます。
acme_sh_default_issue_pre_hook: ""
acme_sh_default_issue_post_hook: ""
acme_sh_default_issue_renew_hook: ""
# Trueに設定すると、証明書が削除され、更新対象から外れます。
acme_sh_default_remove: False
# ドメインのリストを含む設定です。
acme_sh_domains:
使用例
この例では、appというグループがあると仮定し、典型的なsite.yml
ファイルがあります。
この役割を使用するために、site.yml
ファイルを次のように編集します:
---
- name: アプリサーバーの設定
hosts: "app"
become: True
roles:
- { role: "nickjj.acme_sh", tags: ["acme_sh"] }
いくつかの例を示します。group_vars/app.yml
を開くか作成し、次のようにします:
---
acme_sh_account_email: "[email protected]"
acme_sh_default_dns_provider: "dns_cf"
acme_sh_default_dns_provider_api_keys:
"CF_Key": "THE_API_SECRET_TOKEN_FROM_THE_CLOUDFLARE_DASHBOARD"
"CF_Email": "[email protected]"
acme_sh_default_install_cert_reloadcmd: "docker exec nginx nginx -s reload"
acme_sh_domains:
- domains: ["example.com", "www.example.com", "admin.example.com"]
# このような他の例も可能です。
ユーザーを作成するAnsibleの役割を探している場合は、私のuser roleをチェックしてください。
次に、ansible-playbook -i inventory/hosts site.yml -t acme_sh
を実行します。
インストール
$ ansible-galaxy install nickjj.acme_sh
Ansible Galaxy
公式のAnsible Galaxyで見つけることができます。
ライセンス
MIT
Install and auto-renew SSL certificates with Let's Encrypt using acme.sh.
ansible-galaxy install nickjj.acme_sh