Proxmox VEのサーバ証明書をLet’s Encryptで取得する(Route 53+dns-01)

こんにちは、tukapiyoです。

Proxmox VEのサーバ証明書は、初期状態では自己署名証明書となっています。
今回はその証明書を、Let’s Encryptで取得できるようにします。
その際AWSのRoute 53を利用して、dns-01チャレンジで証明書を取得することとします。

Proxmox VEは公式でLet’s Encryptに対応しており、以下のドキュメントで解説されています。
今回利用するdns-01チャレンジについても、仕組みが簡単に紹介されているので興味があればご覧下さい。

事前準備

Let’s Encryptでdns-01チャレンジを使うために、Route 53にTXTレコードの作成、削除が行える必要があります。
そのためのユーザーなどを準備します。
既に他にdns-01チャレンジを使った証明書取得をされている方は、事前準備を飛ばして構いません。

Route 53のホストゾーンIDを確認

  1. Route 53のコンソールに入り、Route 53のダッシュボードを開きます。
  2. 「ホストゾーン」を選択します。
  3. 証明書を取得するドメイン名のホストゾーンを選択します。
  4. 「ホストゾーンID」をメモしておきます。

IAMポリシーの作成

  1. IAMのコンソールに入り、「ポリシー」を選択します。
  2. 「ポリシーの作成」を選択します。
  3. ポリシーエディタを「JSON」に切り替えます。
  4. 以下の様なポリシーを設定します。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "route53:ListHostedZones",
                    "route53:GetChange",
                    "route53:ChangeResourceRecordSets"
                ],
                "Resource": [
                    "*"
                ]
            },
            {
                "Effect" : "Allow",
                "Action" : [
                    "route53:ChangeResourceRecordSets"
                ],
                "Resource" : [
                    "arn:aws:route53:::hostedzone/YOURHOSTEDZONEID"
                ]
            }
        ]
    }
    

    その際、YOURHOSTEDZONEIDを先ほど確認したホストゾーンIDに置き換えてください。

  5. 「次へ」を選択します。
  6. 「ポリシー名」をわかりやすい名前で設定します。
  7. 「ポリシーの作成」を選択します。

IAMユーザーの作成

  1. 「ユーザー」を選択します。
  2. 「ユーザーの作成」を選択します。
  3. 「ユーザー名」を分かりやすい名前で設定します。
  4. 許可のオプションで「ポリシーを直接アタッチする」を選択します。
    アタッチするポリシーは先ほど作成したポリシーです。許可ポリシーの検索機能を使って探すのが楽です。
    ポリシーを選択したら、「次へ」を選択します。
  5. 内容を確認し「ユーザーの作成」を選択します。

アクセスキーの作成・確認

  1. 先ほど作成したユーザーを選択します。
  2. 「アクセスキーを作成」を選択します。
  3. 代替策を提案されますが、有無を言わせずにアクセスキーを作りたいので、「その他」を選択します。
  4. 「次へ」を選択します。
  5. 「アクセスキーを作成」を選択します。
  6. 「アクセスキー」と「シークレットアクセスキー」をメモしておきます。
    シークレットアクセスキーはここでしか確認できないので、確認できなかった場合は新たにアクセスキーを作成する必要があります。
    メモしたら「完了」を選択します。

Proxmox VEで証明書の取得

ACMEアカウントの作成(データセンター)

まず、Let’s Encryptのアカウントを登録します。

  1. データセンターを開き、「ACME」を選択します。
    アカウントの「追加」を選択します。
  2. アカウント名はProxmox VE上の表示名なので任意、E-Mailの入力は必須です。
    「TOS受諾」のチェックを入れる必要があります。(TOS:Term of Service、サービス利用規約)
    「登録」を選択します。

Challengeプラグインの設定(データセンター)

引き続き、Route 53用のプラグインを設定します。

  1. Challenge プラグインの「追加」を選択します。
  2. 以下の様に項目を設定し、「追加」を選択します。
    プラグインID Proxmox VE上のIDなので適当に(今回はR53)
    検証の遅延 初期値(30秒)
    DNS API Amazon Route53 (AWS)
    ACCESS_KEY_ID 先ほど作成したユーザのアクセスキー
    SECRET_ACCESS_KEY 先ほど作成したユーザのシークレットアクセスキー

証明書の取得(ノード)

ノード(サーバ)で証明書を取得します。

  1. ノード(今回はproxmox)を開き、「証明書」を選択します。
    ACMEの「追加」を選択します。
  2. 以下の様に項目を設定し、「作成」を選択します。
    Challengeタイプ DNS
    プラグイン 先ほど作成したプラグインのID(今回はR53)
    ドメイン Proxmox VEの管理画面のFQDN(今回はproxmox.filewo.net)
    ※スクショのブラウザではIPアドレスになっていますが本来はFQDNです

  3. 作成した証明書を選択し、「Order Certificates Now」を選択します。
  4. 以下の様な進捗が表示され、「TASK OK」と表示されれば成功です。
  5. 証明書が自動的に置き換わるので、ブラウザをリロードします。
    改めて証明書を確認すると、以下の様にLet’s Encryptの証明書に切り変わりました。

まとめ

今回はdns-01チャレンジを利用したProxmox VE用の証明書取得を紹介しました。
dns-01チャレンジであれば、外部公開しない仮想化基盤でも容易に証明書の取得が可能なので安心ですね。

おすすめ

コメントを残す