TerraformでLet'sEncryptの証明書を取得する
TerraformでLet'sEncryptの証明書を取得する:
実はTerraformでもACMEがサポートされています。(知っている人は知っている)
というわけで、terraformでLet'sEncryptの証明書を取得してみます。
認証についてはRoute53(DNS)で行います。
terraformではDNS01 challengeが推奨されています。
ですので、ここでもDNSでの認証を行います。
様々なDNSがサポートされていますが今回はawsのRoute53を利用します。
なお、
ワイルドカードの証明書は便利ですが、万が一の場合利用する全サービスに影響が及ぶことを考えれば利用すべきではないと思っています。
特に、ACMのようにマネージドで自動的に更新されるのにワイルドカード証明書を使う必要はないと思います。
セキュリティのために証明書を利用するのに、セキュリティを損ねる運用を採用するのは本末転倒だと思っています。
ま、大して設定するところもないのでソース見るだけでもわかると思いますが………
ACMEのエンドポイントurlです。今回の例ではLet's Encryptです。1
アカウント用の秘密鍵を生成します。
アルゴリズムはRSAにしてます。2
ACMEのアカウント登録
お待ちかねの取得。
AccessKeyとSecretIDでもOKですが、今回のソースではProfile指定をしています。
今回のソースで取得できる値で特に必要そうなものを………
証明書の更新が必要な場合は
必要性は
証明書の期限がこの値を下回った場合に更新されます。(0を設定すると更新はされません)
実はTerraformでもACMEがサポートされています。(知っている人は知っている)
というわけで、terraformでLet'sEncryptの証明書を取得してみます。
認証についてはRoute53(DNS)で行います。
前提
terraformではDNS01 challengeが推奨されています。ですので、ここでもDNSでの認証を行います。
様々なDNSがサポートされていますが今回はawsのRoute53を利用します。
なお、
- ワイルドカードはやりません
- SANの利用も同様にしません
- なので、対象はFQDN(サブドメイン付き)1つのみ
補足
ワイルドカードの証明書は便利ですが、万が一の場合利用する全サービスに影響が及ぶことを考えれば利用すべきではないと思っています。特に、ACMのようにマネージドで自動的に更新されるのにワイルドカード証明書を使う必要はないと思います。
セキュリティのために証明書を利用するのに、セキュリティを損ねる運用を採用するのは本末転倒だと思っています。
解説
ま、大して設定するところもないのでソース見るだけでもわかると思いますが………
acme
ACMEのエンドポイントurlです。今回の例ではLet's Encryptです。1provider "acme" { 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 = "yourname@example.com" }
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を設定すると更新はされません)
コメント
コメントを投稿