Proxmox VE APIを使ってみる
Proxmox APIのユーザー作成からPostmanでの動作確認まで徹底解説
背景
Proxmoxを使って、ユーザーが気軽に仮想マシン(VM)を立ち上げたり、削除・クローンしたりできる学習環境を(まずは内部向けサービスとして)手軽に構築したいと考えました。
ProxmoxのAPIについて日本語の情報、特に基本設定に関する記事が少なかったため、備忘録として手順をまとめておきます。
はじめに
この記事では、Proxmox VEでAPI専用のユーザーを作成し、そのユーザーを使ってAPIを操作する基本的な流れを解説します。
動作確認には、広く使われているAPI開発ツール「Postman」を利用します。
目次
1. ProxmoxでのAPIユーザーと権限設定
まず、Proxmoxの管理画面でAPIを安全に利用するための準備を行います。
rootユーザーを直接使わず、専用のユーザーと権限を作成します。
Proxmoxの管理画面 (https://{proxmoxのIPアドレス}:8006) にログインして作業を開始します。

※User nameは初回ログイン時はrootです。
※Linux PAM standard authenticationを選択してください。ここが違っているとログインできない可能性があります。
1-1. API専用ユーザーの作成
APIから操作を行うための専用ユーザーを作成します。
- 左のツリーから
Datacenterを選択します。 -
Permissions->Usersタブに移動します。 -
Addボタンをクリックしてユーザー作成画面を開きます。

- 以下のように入力します。
-
User name: 任意の名前(例:
api-user) -
Realm:
Proxmox VE authentication serverを選択。 - Password: 任意のパスワードを設定します。
- その他は任意で設定してください。
-
User name: 任意の名前(例:

📝レルム
PAMとProxmox VEの違い
Linux PAM: Proxmoxが動作しているLinuxシステムのユーザーアカウントを利用します。Proxmox VE: Proxmoxが独自に管理するユーザーデータベースを利用します。
APIのようにシステムから独立したユーザーを作成する場合は、Proxmox VEを選択するのが一般的です。
1-2. API用のロール(権限グループ)を作成
次に、APIユーザーに割り当てる権限をまとめた「ロール」を作成します。
-
Permissions->Rolesタブに移動します。
-
Createボタンをクリックします。 -
Role nameに任意の名前(例:
API-Admin)を入力します。 -
Privilegesを選択します。テスト段階では全ての権限にチェックを入れて構いませんが、本番運用ではVMの操作に必要な最小限の権限(
VM.Allocate,VM.Audit,VM.Clone,VM.Config.*,VM.Migrate,VM.Monitor,VM.PowerMgmtなど)に絞ることをお勧めします。

1-3. ユーザーとロールの紐付け(パーミッション設定)
作成したユーザーとロールを紐付け、実際に権限を与えます。
-
Permissionsタブに移動します。 -
Add->User Permissionを選択します。

-
以下の項目を設定します。
-
Path: 権限を適用する範囲です。一番上の
/を選択すると全リソースが対象になります。 -
User: 先ほど作成したユーザー(例:
api-user@pve)を選択します。 -
Role: 先ほど作成したロール(例:
API-Admin)を選択します。
-
Path: 権限を適用する範囲です。一番上の
これで、api-userがAPI-Adminの権限を持つようになりました。
1-4. APIトークンの発行
最後に、プログラムから認証するためのAPIトークンを発行します。
-
Permissions->API Tokensタブに移動します。

-
Addボタンをクリックします。 -
以下の項目を設定します。
-
User: 先ほど作成したユーザー(例:
api-user@pve)を選択します。 -
Token ID: トークンを識別するための任意の名前(例:
api-token)を入力します。 -
Privilege Separation: チェックを外します(
Noにする)。
-
User: 先ほど作成したユーザー(例:
-
Addをクリックすると、Token IDとSecretが表示されます。
⚠️重要
このSecretはこの画面でしか表示されません。 必ず安全な場所にコピーして保管してください。
2. PostmanでのAPI動作確認
APIの準備ができたので、Postmanを使って実際に通信できるかテストします。
Postman公式サイトからダウンロードして起動してください。
2-1. Postmanの事前設定(SSL証明書検証の無効化)
Proxmoxはデフォルトで自己署名証明書を使用しているため、Postmanがそのままでは安全な接続ではないと判断して通信をブロックします。これを回避するため、SSLの検証を一時的に無効化します。
Settings -> General タブにある SSL certificate verification のトグルを OFF にしてください。

2-2. 認証とチケットの発行 (POST)
Proxmox APIの認証は、まずユーザー名とパスワードを送って一時的なチケットを発行してもらうことから始まります。
- メソッドタイプを
POSTに変更します。 - URL入力欄に以下を入力します。
https://{proxmoxのIPアドレス}:8006/api2/json/access/ticket -
Bodyタブを選択し、x-www-form-urlencodedを選び、以下のキーと値を設定します。
| KEY | VALUE |
|---|---|
username |
作成したユーザー名 (api-user@pve) |
password |
ユーザーに設定したパスワード |

-
Sendボタンを押すと、レスポンスが返ってきます。
レスポンスの中から、以下の2つの値をコピーしてメモ帳などに控えておきます。
-
ticket:PVE:api-user@pve:670E...のような文字列 -
CSRFPreventionToken:670E...のような文字列

2-3. Cookieとヘッダーの設定
取得したチケットを使って、以降のAPIリクエストで自身が認証済みであることを証明します。
Cookieの設定
-
Sendボタンの隣にあるCookiesリンクをクリックします。 -
対象ドメイン(
{proxmoxのIPアドレス})が表示されるので、Add Cookieをクリックします。
※なければ作成してください
-
表示された入力欄に以下のように設定します。
PVEAuthCookie={先ほどコピーしたticketの値}; Path=/;
Cookie_1=valueのみの上書きで大丈夫です

-
Saveをクリックします。
ヘッダーの設定
-
Headersタブに戻ります。 - 新しいキーと値を設定します。
| KEY | VALUE |
|---|---|
CSRFPreventionToken |
先ほどコピーしたCSRF...トークンの値 |

2-4. テストAPIの実行 (GET)
認証設定が完了したので、実際にデータを取得する簡単なAPIを叩いてみます。
-
メソッドタイプを
GETに変更します。 -
Bodyタブを選択し、noneに設定します。

-
URL入力欄に以下を入力して
Sendを押します。
https://{proxmoxのIPアドレス}:8006/api2/json/nodes
成功すれば、Proxmoxクラスターに参加しているノードの情報がJSON形式で返ってくるはずです。これでAPIの疎通確認は完了です!

3. Proxmox APIの主要エンドポイント一覧
Proxmox APIは /api2/json/ 以下に非常に多くのエンドポイントを持っています。ここでは、VM管理でよく使われるものをまとめました。
パスのルール
{node}: Proxmoxサーバーのノード名に置き換えます。(例:pve){vmid}: 操作したいVMやコンテナのIDに置き換えます。(例:101)
| HTTPメソッド | エンドポイントパス | 説明 |
|---|---|---|
GET |
/nodes |
全てのノードの一覧を取得します。 |
GET |
/nodes/{node}/qemu |
特定ノード上の全VM(QEMU)の一覧を取得します。 |
GET |
/nodes/{node}/lxc |
特定ノード上の全コンテナ(LXC)の一覧を取得します。 |
GET |
/nodes/{node}/qemu/{vmid}/status/current |
特定VMの現在のステータス(起動、停止など)を取得します。 |
POST |
/nodes/{node}/qemu/{vmid}/status/start |
特定VMを起動します。 |
POST |
/nodes/{node}/qemu/{vmid}/status/stop |
特定VMを安全にシャットダウンします。 |
POST |
/nodes/{node}/qemu/{vmid}/status/reboot |
特定VMを再起動します。 |
POST |
/nodes/{node}/qemu |
新しいVMを作成します。(Bodyに詳細な設定が必要) |
POST |
/nodes/{node}/qemu/{vmid}/clone |
特定VMのクローンを作成します。(Bodyに設定が必要) |
DELETE |
/nodes/{node}/qemu/{vmid} |
特定VMを削除します。 |
上記全ては試していません。
多少の違いなどがあったら申し訳ないです
この他にも、スナップショット作成やバックアップ、ネットワーク設定など、Proxmoxの管理画面でできるほぼ全ての操作がAPI経由で実行可能です。詳細はProxmox VE API公式ドキュメントをご参照ください。
Discussion