管理者視点で見たい Microsoft Dev Box 監査系のログ

掲載内容は個人の見解であり、所属する企業を代表するものではありません.


はじめに

Microsoft Dev Box もその他の PaaS サービスと同様に 診断ログ を構成することで、ユーザーによるデータプレーン操作のログが取得可能です。 データプレーンというとわかりにくいですが、要は Dev Box (仮想マシン)の作成・削除や起動・停止といったログです。 だれが、いつ、どんな操作を行ったかといった情報は、管理者としては把握しておきたいですよね。

ただ実際にこれ以外にも代表的な監査視点としては以下のようなものがあるのではないでしょうか。

これらの情報の取得方法が記載された公式ドキュメントが現状見当たらないのですが、いろいろ触っていたら分かってきたことがあるのでまとめておきます。 いずれこういった情報も出そろってくるのではないかと思いますが、取り急ぎ。

まずは公式情報の内容を確認

上記の診断ログのドキュメントですと DevCenterDiagnosticLogs というテーブルに関して記述があり、そのスキーマの説明は下記に記載があります。

これらを見ると上記の情報が割と取れるんじゃないかと期待が膨らみますが、実際にクエリをかけてみるとちょっと残念な気持ちです。

Alt text

他にもテーブルがあるぞ?

リファレンスの他のページや Log Analytics Workspace をよく見ると、もう少し良さそうなテーブルがあることが分かります。

ちょっとこちらも見てみましょう。

まずは操作系のログが取りたい

改めて各 Dev Box 仮想マシン単位のライフサイクルを考えると、全体として作成・削除があり、その間に起動・停止が複数回繰り替えさえるのが一般的だと思います。 この辺りの情報取得は DevCenterResourceOperationLogs テーブルの方が使い勝手が良さそうでした。 ただ対象となる Dev Box VM の名前、Dev Center プロジェクトの名前、ユーザー情報は SubResourceId をパースしてやらないと分からなさそうです。

DevCenterResourceOperationLogs
| where OperationName startswith "DevBox"
| parse SubResourceId with '/tenants/' entra_id '/devcenters/' devcenter '/projects/' project_name '/users/' user '/devboxes/' devbox_name
| project TimeGenerated, OperationName, Message, devcenter, project_name, user, devbox_name
| order by TimeGenerated desc 

ここで出ている user は Microsoft Entra ID で管理されたユーザーのオブジェクト ID です。 人間に易しい名前ではないのが残念ですが、下記のコマンドで確認できます。

az ad user show --id guid-of-user-objectid
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
  "businessPhones": [],
  "displayName": "Developer 01",
  "givenName": "01",
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "jobTitle": null,
  "mail": "userName@mail.example.com",
  "mobilePhone": null,
  "officeLocation": null,
  "preferredLanguage": null,
  "surname": "Developer",
  "userPrincipalName": "userName@example.com"
}

あるいは Azure ポータルの Microsoft Entra ID 管理画面で、ユーザーのオブジェクト ID を検索しても確認できます。

利用時間が知りたい

上記のログから各種イベントは把握できるのですが、課金に直結する利用時間(起動~停止)に関しては工夫が必要になりますし、そもそも DevBox のサイズが分かりません(Dev Box 定義やプールの情報が分からないため)。 そうすると DevCenterBillingEventLogs テーブルの名前が魅力的ですので、こちらにもクエリをかけてみましょう。

ざっと見た感じだと以下の基準で集計できそうです。

例えば各ユーザーの 1 日当たりの Dev Box 利用時間(インスタンスの区別はなし)は以下のように確認できます。 使いすぎには気を付けましょう。

DevCenterBillingEventLogs
| where UsageType == 'Compute'
| summarize sum(Quantity) by UserId, bin(StartTime, 1d)
| render columnchart 

誰がどのマシンを管理しているか

この DevCenterBillingEventLogs テーブルから直接的な金額は分からないのですが、この後の Cost Management で確認する際には、このテーブルから得られる UsageResourceUniqueId が有用です。

DevCenterBillingEventLogs
| parse BilledResourceId with '/subscriptions/' subscid 'resourceGroups' rg '/providers/Microsoft.DevCenter/projects/' project_name '/pools/' pool
| distinct UserId, UsageResourceName, UsageResourceUniqueId, project_name, pool

結局いくらかかっているのか?

監査や監視する上で大事なのはやはり課金額ですが、これは Azure Portal の Cost Management から確認できます。 各 Dev Box 仮想マシンから発生した課金額には devboxuniqueid というリソースタグが付与されているのですが、これは DevCenterBillingEventLogs テーブルの UsageResourceUniqueId と一致します。

よって、確認手順は以下のようになります。

サインイン ログ

ここまではあくまでも Azure リソースの観点から見たログですので、実際にユーザーがサインインしたかどうかまでは分かりません。 下記のいずれかを開き、ユーザー メニューから サインイン ログ を開くと、様々なアプリケーションへのサインイン履歴が確認できます。

Dev Box 関連でいうと下記の2つが代表的な確認ポイントになると思います。

下記は Intune 管理センターの画面ですが、Azure ポータルや Entra 管理センターでもほぼ同様の手順になります。