ConoHa VPS の公開 API ロール・サブユーザー機能を使って AI 開発の第一歩

このブログでもお世話になっている ConoHa VPS において、2025年8月6日に「公開APIロール機能」が提供されました。

公式ガイドでは、複数名でのアカウント管理を想定した利用例が紹介されています。

複数名での運用やチームでの管理において、セキュアかつ効率的なAPI権限管理が可能となり、より安心してConoHa VPSをご利用いただけます。

このブログは個人で運営しており、ConoHa 環境も複数名での利用もないのですが、
ちょうど「AI 開発」においてこの機能が役立ちそうだと思い、試してみます。

AI 開発と公開 API ロール・サブユーザー機能

GitHub Copilot をはじめとする、AI コーディング アシスタントは、サービスごとにデータ利用ポリシーが異なりますので、利用規約やプライバシーポリシー等を確認する必要があります。

例えば、GitHub Copilot では、2025/08 時点では、設定の
「Allow GitHub to use my data for product improvements」を無効化すると、学習に利用されなくなります。

GitHub Copilot 以外の AI を使って、学習されうる可能性があるという前提で考えてみると、

個人開発ではコード自体の漏洩は大きな問題にならないこともありますが、

個人の簡易的な制作物であれば、API 等の認証情報をそのままソースコードに埋め込むこともあります。

AI の学習の有無に関わらず、全権限が利用可能な API の認証情報が AI に送られるのはあまり気持ちが良いものではありません。

そこで、API ロール機能とサブユーザー機能はあれば

  • ロールを外すことで何もできないユーザーになる
  • サブユーザー単体で、パスワード・削除可能

といった安全な運用が可能になります。

今回の利用例として、ConoHa モバイルアプリで利用できていたモニタリング機能が最新の基盤(Ver 3.0)では利用できなくなったので、独自にモニタリングの仕組みを作る例として、API ロールを考えてみます。

公開 API ロール・サブユーザー機能を使ってみる

このブログでは、過去にも PowerShell を用いた ConoHa API の利用方法を紹介してきました。
今回も同様に PowerShell を使用します。

親ユーザーでトークンを発行

ここに関しては、これまでと同じです。

$OS_USERNAME = "ユーザー名"
$OS_PASSWORD = "パスワード"
$OS_TENANT_ID = "テナントID"

$IDENTITY = "https://identity.c3j1.conoha.io/v3"

$body = '{"auth": {"identity": {"methods": ["password"],"password": {"user": {"name": "' + $OS_USERNAME + '","password": "'+ $OS_PASSWORD +'"}}},"scope": {"project": {"id": "' + $OS_TENANT_ID + '"}}}}'
 
$url = $IDENTITY+"/auth/tokens"
$tokenresponse = Invoke-WebRequest $url -Method POST -Body $body -Headers $headers
$token = $tokenresponse.Headers.'X-Subject-Token'
$tokenheaders = @{"X-Auth-Token" = $token[0]}

サブユーザー一覧取得

最初はサブユーザーが無いことを確認します。

$result = Invoke-RestMethod -method GET -Headers $tokenheaders -Uri "$IDENTITY/sub-users"
$result.users

ロール一覧取得

デフォルトのロールを利用する場合、下記のドキュメントサイト通りですが、今回は独自にロールを作成するため取得します。

$result = Invoke-RestMethod -method GET -Headers $tokenheaders -Uri "$IDENTITY/sub-users/roles"
$result.roles

パーミッション取得

実行結果はドキュメントの記載の通りです。

将来的に新機能がリリースされた際には API の方は先行して利用できるなどの違いが出てくるのかもしれません。

$result = Invoke-RestMethod -method GET -Headers $tokenheaders -Uri "$IDENTITY/permissions"
$result.permissions

ロールの作成

取得したパーミッションを組み合わせてロールを作成します。

今回は、サーバー利用状況グラフの API が利用できるとよいので、下記の3つのみ許可するロールを作ってみます。

$body = '{
  "role": {
    "name": "custom-rrd-only",
    "permissions": [
      "get-server-rrd-cpu",
      "get-server-rrd-disk",
      "get-server-rrd-interface"
    ]
  }
}'
$result = Invoke-RestMethod -method POST -Headers $tokenheaders -Uri "$IDENTITY/sub-users/roles" -Body $body
$result.role

id   name            visibility permissions
--   ----            ---------- -----------
(id) custom-rrd-only private    {post-server-remote-console}

visibility が private であればユーザーが作成したもの、public が標準で用意されているもののようです。

サブユーザー機能

作成したロールを割り当て、サブユーザーを作成します。

$body = '{
  "user": {
    "password": "(password)",
    "roles": [
      "custom-rrd-only"
    ]
  }
}'
$result = Invoke-RestMethod -method POST -Headers $tokenheaders -Uri "$IDENTITY/sub-users" -Body $body
$result.user

id       name                 roles
--       ----                 -----
(userid) sub-gncu00000000-xxx {@{id=(roleid); name=remote-console-only}}   

動作確認

今回作成したサブユーザーでトークンを発行します。
テナントIDはそのままです。

許可されていない API が実行できないことを確認します。

Invoke-RestMethod -method GET -Headers $tokenheaders -Uri "$COMPUTE/servers"
Invoke-RestMethod : {"code": 403, "error": "this operation is not allowed for current user"}

ここまで書いて気付きましたが、

がなくてもトークンは発行できるようです。

まとめ

ConoHa VPS の公開 API のロール機能を使うことで、必要に応じて安全に開発することができるようになりました。

コントロールパネルから操作はできず、API 限定となりますが、AI 開発や API の活用の際に認証情報を制御することができ、幅が広がりそうです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)