本記事はFIXER Advent Calendar 2024( FIXER Advent Calendar 2024 ~tech編~ )12月20日の記事です。
はじめに
自分はProxmox VEという仮想マシンやLInuxコンテナを管理できるソフトウェアで検証したり遊んだりしているのですが、 詰まったところがあったので、その解決法を備忘録替わりに残しておきます。
前提条件
- Proxmox VE 8.3
事象
Proxmox VE(以下Proxmox)はWebコンソールから操作するほかにREST APIも用意されており、こちらの方法でLinuxコンテナを作成する検証をしていました。
手順としては以下の通りです。
1. まず、あからさまにこれを使ってくださいと言わんばかりにあるAPIトークン欄から、適当なTokenIDでAPIトークンを発行します。
2.トークンが発行出来たらWikiの通りにヘッダーに乗せ、ドキュメントの通りにボディを含めて送信してみます。
必須パラメータのほかに、コンテナを配置するストレージとマウントオプションだけ指定しています。
"403 permission check failed (mount point bind is only allowed for root@pam)"というエラーが帰ってきてしまいました。当然コンテナも作成されていません。
念のためAPIトークンが間違っていないことを確認するため別のAPI(今回はapi2/json/version)にリクエストを送ってみます。
こちらは200が帰ってきたので、APIトークンが間違ってるわけではなさそうです。
原因
解決方法
WikiにAPIトークンではなくTicket Cookieというものを使う方法がありました。
これはユーザ名とパスワードから、2時間限定で使えるランダム文字列のチケットを発行し、それを認証に使う方法です。
これであれば、APIトークンのようにpamのうしろに余計な文字がつかず"root@pam"としてリクエストを送ることができます。
というわけで早速やってみましょう。
1. まずはroot@pamのユーザ名とパスワードを使ってチケットを発行します。
2. 取得したチケットと、POSTなのでWikiに従ってCSRFPreventionTokenもヘッダーに含めて再度コンテナ作成のリクエストを送ってみます。
3. Webコンソールからもコンテナが作成されていることを確認できました。
終わりに
まさかrootのAPIトークンでできないことがあるとは思っていなかったのでこの結論にたどり着くまで1週間ぐらいかかりました。
やっぱり思い込みはよくないですね。ちゃんとWiki(ドキュメント)は読むようにしましょう。