TerraformでLet'sEncryptの証明書を取得する
実はTerraformでもACMEがサポートされています。(知っている人は知っている)
というわけで、terraformでLet'sEncryptの証明書を取得してみます。
認証についてはRoute53(DNS)で行います。
前提
terraformではDNS01 challengeが推奨されています。
ですので、ここでもDNSでの認証を行います。
様々なDNSがサポートされていますが今回はawsのRoute53を利用します。
なお、
- ワイルドカードはやりません
- SANの利用も同様にしません
- なので、対象はFQDN(サブドメイン付き)1つのみ
補足
ワイルドカードの証明書は便利ですが、万が一の場合利用する全サービスに影響が及ぶことを考えれば利用すべきではないと思っています。
特に、Let'sEncryptのようにマネージドで自動的に更新するのにワイルドカード証明書を使う必要はないと思います。
セキュリティのために証明書を利用するのに、セキュリティを損ねる運用を採用するのは本末転倒だと思っています。
解説
ま、大して設定するところもないのでソース見るだけでもわかると思いますが………
acme
ACMEのエンドポイントurlです。今回の例ではLet's Encryptです。1
provider "acme" {
server_url = "https://acme-v02.api.letsencrypt.org/directory"
# server_url = "https://acme-staging-v02.api.letsencrypt.org/directory"
}
tls_private_key
アカウント用の秘密鍵を生成します。
アルゴリズムはRSAにしてます。2
resource "tls_private_key" "private_key" {
algorithm = "RSA"
}
acme_registration
ACMEのアカウント登録
resource "acme_registration" "reg" {
account_key_pem = "${tls_private_key.private_key.private_key_pem}"
email_address = "[email protected]"
}
acme_certificate
お待ちかねの取得。
AccessKeyとSecretIDでもOKですが、今回のソースではProfile指定をしています。
resource "acme_certificate" "certificate" {
account_key_pem = "${acme_registration.reg.account_key_pem}"
common_name = "sub.example.com"
# min_days_remaining = "7"
dns_challenge {
provider = "route53"
config {
AWS_PROFILE = "PROFILE_NAME"
# AWS_ACCESS_KEY_ID = "${var.aws_access_key}"
# AWS_SECRET_ACCESS_KEY = "${var.aws_secret_key}"
AWS_DEFAULT_REGION = "ap-northeast-1"
}
}
}
注意点
取得できる値
今回のソースで取得できる値のうち特に必要そうなもの。
変数 | 内容 |
---|---|
acme_certificate.certificate.certificate_pem | 証明書(pem形式) |
acme_certificate.certificate.issuer_pem | 中間証明書(pem形式) |
acme_certificate.certificate.private_key_pem | 秘密鍵(pem形式) |
更新
証明書の更新が必要な場合はterraform apply
を行った際に必要に応じて自動的に行われます。
必要性はmin_days_remaining
の値で判断されます。4
証明書の期限がこの値を下回った場合に更新されます。(0を設定すると更新はされません)
2018.11.06
修正:server_urlがステージングになっておりました。
Author And Source
この問題について(TerraformでLet'sEncryptの証明書を取得する), 我々は、より多くの情報をここで見つけました https://qiita.com/Toshinori_Hayashi/items/3246b0ddf4a4449b4d0b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .