すでにワイルドカード証明書を持っている場合に Proxmox にも該当の証明書を適用した場合があります。
Webコンソールから、データセンター>該当ノード>システム>証明書>カスタム証明書のアップロードの手順で更新できるのですのが、Let'sEncrypt の証明書の場合、数カ月お気に作業が必要となります。
流石に面倒なので、Proxmox の API を使ってカスタム証明書を更新する手順を調べてみました。
設定手順
API トークンの発行
"/nodes" 配下に対して Sys.Modify 権限をもった API トークンを準備する必要があります。
APIトークンは下記の手順で作成します。
- Sys.Modify 権限だけを持ったロールの作成
- データセンター>アクセス権限>ロール画面から、作成ボタンを押下して、以下の内容でロールを作成します
名前: SysModify 権限: Sys.Modify
- データセンター>アクセス権限>ロール画面から、作成ボタンを押下して、以下の内容でロールを作成します
- ユーザの作成
- データセンター>アクセス権限>ユーザ画面から、追加ボタンを押下して、以下の内容でユーザを作成します
ユーザ名: sys-modify レルム: Linux PAM standard authentication
- データセンター>アクセス権限>ユーザ画面から、追加ボタンを押下して、以下の内容でユーザを作成します
- APIトークンの作成
- データセンター>アクセス権限>APIトークン画面から、追加ボタンを押下して、以下の内容でAPIトークンを作成します
ユーザ: sys-modify@pam トークンID: update-cert 権限分離: true
- データセンター>アクセス権限>APIトークン画面から、追加ボタンを押下して、以下の内容でAPIトークンを作成します
- ユーザへのアクセス権限の付与
- データセンター>アクセス権限画面から、追加>ユーザのアクセス権限ボタンを押下して、以下の内容で権限を追加します
パス: /nodes ユーザ: sys-modify@pam ロール: SysModify 継承: true
- データセンター>アクセス権限画面から、追加>ユーザのアクセス権限ボタンを押下して、以下の内容で権限を追加します
- トークンへのアクセス権限の付与
- データセンター>アクセス権限画面から、追加>APIトークンのアクセス権限ボタンを押下して、以下の内容で権限を追加します
パス: /nodes ユーザ: sys-modify@pam!update-cert ロール: SysModify 継承: true
- データセンター>アクセス権限画面から、追加>APIトークンのアクセス権限ボタンを押下して、以下の内容で権限を追加します
転送用スクリプトの作成
下記の内容で転送用のスクリプトを作成します。
#!/bin/sh
SERVER="pve.example.com:8006" # 環境に合わせて変えてください
NODES="pve01 pve02 pve03" # 更新対象のノード名
API_TOKEN_ID="sys-modify@pam!update-cert"
API_TOKEN_SECRET="<<APIトークン作成時のシークレット>>"
PRIVKEY_PATH="/etc/letsencrypt/live/<<domain>>/privkey.pem"
CERT_PATH="/etc/letsencrypt/live/<<domain>>/fullchain.pem"
for node in $NODES; do
curl -k -X POST \
https://${SERVER}/api2/json/nodes/${node}/certificates/custom \
-H "Authorization: PVEAPIToken=${API_TOKEN_ID}=${API_TOKEN_SECRET}" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "key=$(sudo cat ${PRIVKEY_PATH})" \
--data-urlencode "certificates=$(sudo cat ${CERT_PATH})" \
--data-urlencode "restart=1" \
--data-urlencode "force=1"
done