インストール直後の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から証明書を取得しようとしたら、ちょっとした罠があったという話でした。