サーバー自動化ネットワーク

【証明書の管理はもう手間じゃない】VaultとTerraformで実現するBIG-IPの証明書自動更新

SSL証明書の更新作業、面倒に感じていませんか?近年、Google Chromeやその他のブラウザによって証明書のライフサイクルが短縮される中、証明書管理はより複雑になっています。そんな中、HashiCorp製品のVaultとTerraformを組み合わせたBIG-IPの証明書自動更新について検証してみました。
今回はその検証結果を基に、証明書自動更新の実現方法や、今後の展望についてご紹介します!


近年の証明書更新について

皆さん、SSL証明書の更新作業って、何度やっても慣れないものですよね。手動で更新するとなると、管理しなければいけない証明書が多すぎて忘れてしまったり、有効期限が迫ると焦ってしまったり……。
特に、近年ではGoogle ChromeがSSL証明書の有効期限を2年から1年に短縮したり、各ブラウザがセキュリティの強化を進める中で、証明書のライフサイクルがどんどん短くなっています。これにより、企業はより頻繁に証明書の更新を行う必要に迫られ、証明書管理の負担が増加しているのが現状です。そのうち有効期限が90日になるなんて話も。

そんな時代だからこそ、「証明書の自動更新」が必要になってきます。自動更新を行うためのツールとしては、Let’s EncryptやCertbotが広く知られています。これらのツールを使えば、証明書の発行から適用までを自動化でき、手動作業のミスや手間を大幅に削減できます。またAWSやGoogle Cloud Platformなどのクラウド環境でも、証明書の自動更新サービスが提供されています。

今回は、HashiCorp製品のVaultとTerraformを活用して、BIG-IPのSSL証明書の自動更新をどのように実現できるかを検証してみました。


検証構成
以下のような構成で検証を行いました。


検証手法
次に、どのようにしてBIG-IPのSSL証明書の自動更新を実現するか、その流れをご紹介します。

1. Vaultによる証明書発行
Vaultを中間認証局(CA)として設定し、CLIを使って定期的にサーバー証明書を発行するシステムを構築しました。Vaultエージェントを使用することで既存の証明書が失効する前に新しい証明書を自動的に生成してくれるため、証明書の期限切れを防ぐことができます。

具体的な手順は以下ブログを参考にしてください。

(連載) HashiCorp活用例2: 動的なバックエンドSSL証明書の生成・管理

2. Terraformを使ったBIG-IPへの自動適用
発行された証明書をBIG-IPに自動的に適用するために、Terraformを利用しました。Terraformはインフラをコードで管理できるツールで、ここではSSL証明書と秘密鍵をBIG-IPに簡単にインポートし、適用できるように設定しています。

◆現在適用されている証明書と秘密鍵を一時的なものに変更
resource "bigip_command" "alt-key-crt-to-profile" {
commands = ["modify ltm profile client-ssl oreore cert serveralt.crt key
privatealt.key"] ← 証明書と秘密鍵の適用を変更するBIG-IPコマンド
when = "apply" ← Terraform apply時に実行
}

◆BIG-IPに格納されている証明書を更新
resource "bigip_ssl_certificate" "test-cert" {
name = "BIG-IPで管理する証明書名"
content = file("/etc/ssl/certs/server.crt") ← 更新に使用する証明書が格納されているパス
partition = "Common" ← BIG-IPのパーティション名
depends_on = [bigip_command.alt-key-crt-to-profile] ← 依存関係を記載
}

◆BIG-IPに格納されている秘密鍵を更新
resource "bigip_ssl_key" "test-key" {
name = "BIG-IPで管理する秘密鍵名"
content = file("/etc/ssl/private/private.key") ← 更新に使用する秘密鍵が格納されているパス
partition = "Common" ← BIG-IPのパーティション名
depends_on = [bigip_command.alt-key-crt-to-profile] ← 依存関係を記載
}

◆現在適用されている証明書と秘密鍵を新たに更新した証明書と秘密鍵に変更
resource "bigip_command" "set-key-crt-to-profile" {
commands = ["modify ltm profile client-ssl oreore cert server2.crt key
private2.key"] ← 証明書と秘密鍵の適用を変更するBIG-IPコマンド
depends_on = [bigip_command.alt-key-crt-to-profile, bigip_ssl_certificate.test-cert, bigip_ssl_key.test-key] ← 依存関係を記載
}

◆BIG-IPに格納されている一時的に使用する証明書を更新
resource "bigip_ssl_certificate" "alt-cert" {
name = "BIG-IPで管理する証明書名"
content = file("/etc/ssl/certs/server.crt") ← 更新に使用する証明書が格納されているパス
partition = "Common" ← BIG-IPのパーティション名
depends_on = [bigip_command.alt-key-crt-to-profile, bigip_ssl_certificate.test-cert, bigip_ssl_key.test-key, bigip_command.set-key-crt-to-profile] ← 依存関係を記載
}

◆BIG-IPに格納されている一時的に使用する秘密鍵を更新
resource "bigip_ssl_key" "alt-key" {
name = "BIG-IPで管理する秘密鍵名"
content = file("/etc/ssl/private/private.key") ← 更新に使用する秘密鍵が格納されているパス
partition = "Common" ← BIG-IPのパーティション名
depends_on = [bigip_command.alt-key-crt-to-profile, bigip_ssl_certificate.test-cert, bigip_ssl_key.test-key, bigip_command.set-key-crt-to-profile] ← 依存関係を記載
}

3. シェルスクリプトによる証明書の監視と適用
証明書の更新タイミングを逃さないために、シェルスクリプトの作成・導入をしました。
具体的なコードは記載いたしませんが、証明書や秘密鍵の格納されているディレクトリを監視し、
更新が確認できたらTerraformを実行させ、BIG-IPに証明書を反映させる役割を果たします。

これにより、BIG-IPのSSL証明書の管理プロセス全体が完全に自動化され、運用者は手作業での更新から解放されるというわけです!


今後の展望

この検証を通じて、BIG-IPのSSL証明書の管理や更新がHashiCorp製品のVaultとTerraformによって簡単に自動化できることを確認しました。これにより、証明書の期限切れや更新忘れのリスクが大幅に減り、セキュリティ強化にもつながると考えています。
今後は、さらに多くの証明書を管理する環境や、他の認証局と連携した自動更新の仕組みを導入することで、証明書管理がより効率的に行えるようになる可能性があります。また、Vaultの他の機能も活用することで、証明書の発行や管理だけでなく、さらに高度なセキュリティ対策を実現できるかもしれません。
またBIG-IPユーザーのようなオンプレ・ネットワークインフラの人たちにはIaCが浸透しておらず、
今後このようなユーザーのクラウドシフトや、DevOpsを加速させるときにHashicorp製品のような存在は無視できないと感じています。
お客様へのよりよいサポートのためにもIaCの技術を活用していきどちらかの製品だけという選択ではなくそれぞれの良さを補い、高められるか、融合できるか、そういう観点で活動していきたいと思います。

いずれにしても、今後のSSL証明書管理における課題を解決するためのツールとして、HashiCorp製品のVaultやTerraformが利用でき、有用であることが分かりました。今後も、このような技術を活用して、運用の効率化とセキュリティ強化を目指していくことが重要です。