仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

ProxmoxVEのSSL証明書を、Route53を利用したDNS-01チャレンジで取得するには

インストール直後のProxmoxVEは、いわゆるオレオレ証明書が利用されています。Let's Encryptは無料で使えますし、せっかくですから正規のSSL証明書を取得しておきましょう。

Let's EncryptのチャンレジタイプにはHTTP-01とDNS-01がありますが、外部から疎通させる必要のないDNS-01はLAN内でも使え、ワイルドカード証明書を発行することもでき、非常に便利ですよね。DNSへTXTレコードを登録する必要がありますが、これもRoute53などを使えば簡単に自動化できます。というわけで、最近ではDNS-01チャレンジを採用するケースの方が多いのではないでしょうか。

DNS-01チャレンジにRoute53を使う場合、専用のIAMユーザーを作り、クレデンシャルを払い出すのが定石です。その際ユーザーにアタッチする最小のポリシーは、certbotのドキュメントに記述されています。

ところがこのポリシー、certbotコマンドでは正しく動きますが、ProxmoxVE上からの証明書の取得は失敗してしまいます。ProxmoxVEから利用する場合は、"route53:ListResourceRecordSets"を追加してあげる必要がありました。

{
    "Version": "2012-10-17",
    "Id": "certbot-dns-route53 sample policy",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:ListHostedZones",
                "route53:GetChange"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "route53:ChangeResourceRecordSets",
                "route53:ListResourceRecordSets"      ← これがいる
            ],
            "Resource": [
                "arn:aws:route53:::hostedzone/ZONE_ID"
            ]
        }
    ]
}

というわけで、いつも通りのユーザーでProxmoxVEから証明書を取得しようとしたら、ちょっとした罠があったという話でした。