🐙

Azure Resource GraphでAzureリソースを可視化する!

2024/04/30に公開

はじめに

Azure Resource GraphがGAされて数年が経ちますが、技術ブログではなかなか取り上げられていないようなので、自身の勉強も兼ねて投稿してみることにしました。
Azure運用者・管理者の一助となれば幸いです。

Azure Resource Graphとは

Azure Resource Graphは、ARM(Azure Resource Manager)に対して検索クエリを発行し、ユーザーの求める情報を収集、整形、グラフ化を実行する仕組みです。
複数サブスクリプションや管理グループを対象にリソースの設定値等を取得できます。
https://azure.microsoft.com/ja-jp/features/resource-graph/

  • Azureリソースを対象とした検索機能
  • Kustoクエリにより簡単に、条件に合致するリソースを検索可能
  • リソース設定の変更履歴を取得(プレビュー)
  • コストは無料

Resource Graphを利用するメリット

  • Azureリソース設定値を横断的、網羅的に抽出可能
    →リソースの設定値確認を効率化よくおこなえる。
  • ダッシュボード、ブックで自社のAzure環境を可視化
    →セキュリティ、コスト管理面で運用がラクになる。

Resource Graphで取得できる情報例

実際に私が試してみて便利だと感じた例を紹介します。

  • 電源状態が「割当解除」でないVMの一覧表示
  • 送信元がAnyの危険なNSGルールを検索
  • 特定のタグがセットされていないリソースグループの一覧表示
  • 特定のフォーマットにしたがって設定値を一括抽出

Resource Graphで取得できない情報

Resource GraphのデータソースはARM(Azure Resource Manager)となるため、ARM外の情報取得はできません。
具体的には以下の情報取得が不可となります。(他にもあると思われます)

  • Entra ID
  • Azure DevOps
  • ARMに記録されない情報
    • タイムゾーン設定...バックアップスケジュールなどのタイムゾーン設定は、Azureポータルでは確認可能ですが、ARMとしてはUTCで記録されているため情報取得できません。

とりあえず使ってみる

Azureポータルから簡単に動かすことができます。

  1. Azureポータルを開き、上部の検索ボックスで「Resource Graph」と入力、「Resource Graphエクスプローラー」をクリックします。

    Resource Graphエクスプローラー

  2. エディターに「resources」と入力し、「クエリの実行」をクリックします。

    クエリの実行

  3. クエリが実行されると、画面下部に結果が表示されます。

    実行結果

「resources」テーブルには、仮想マシンや、仮想ネットワーク、NSGなど基本的なAzureリソースの設定値が含まれます。
https://docs.microsoft.com/ja-jp/azure/governance/resource-graph/reference/supported-tables-resources#resources

Azureポータル以外の方法でもクエリを発行することで結果を取得できます。
こちらは別の機会にご紹介しましょう。

  • Azure PowerShell、Azure CLI
  • REST API
  • その他プログラミング言語

Kusto

もともとはAzure Data Explorerに最適化された読み取り専用クエリ言語です。
(Data Explorerの内部コードネームが「Kusto」だったそうです。)
Log Analyticsや、Resource Graphでも使用可能で、検索、結合、集計、さらにはグラフ化にも対応しています。

書き方

最上部にデータソースを記述し、"|" (pipe)で接続しながらフィルターや集計をします。

たとえば、植物の情報を詰め込んだデータベースがあったとして。。
以下のようにデータを抽出します。

クエリ:

1:  植物
2:  | where(フィルター) 食用 =~ "true"
3:  | where(フィルター)=~ "赤い"
4:  | where(フィルター)=~ "甘い"
5:  | project(集計) 名前, 重さ,6:  | sort(並べ替え) by 重さ

結果:

名前 重さ
いちご 15g 4月
トマト 150g 7月
りんご 300g 10月
... ... ...

実行例

以下の条件に当てはまる情報を抽出してみましょう。

  • リソースタイプ:仮想マシン
  • 抽出情報:仮想マシン名、リソースグループ、リージョン
  • 並び替え:仮想マシン名(昇順)

1行ずつクエリにします。

まずはデータソースを記述します。仮想マシンに関する情報は、「resources」テーブルに含まれます。

  1:  resources

次に、仮想マシンに関する情報のみに絞り込みます。「type」列がmicrosoft.compute/virtualmachinesである行のみを取り出します。

  1:  resources
+ 2:  | where type =~ 'microsoft.compute/virtualmachines' //リソースタイプ:仮想マシン

そのままだと出力情報が多すぎるため、project構文で絞り込みます。

  1:  resources
  2:  | where type =~ 'microsoft.compute/virtualmachines' //リソースタイプ:仮想マシン
+ 3:  | project name, resourceGroup, location //抽出情報:仮想マシン名、リソースグループ、リージョン

仮想マシン名をキーに並び替えます。

  1:  resources
  2:  | where type =~ 'microsoft.compute/virtualmachines' //リソースタイプ:仮想マシン
  3:  | project name, resourceGroup, location //抽出情報:仮想マシン名、リソースグループ、リージョン
+ 4:  | sort by name asc //並び替え:仮想マシン名(昇順)

実行してみましょう。狙った情報が出力されます。

VM名、リソースグループ、リージョンが表示される

まとめ

クエリを習得するにはそこそこの学習コストがかかりますが、PowerShellスクリプトなどに比べれば直感的に操作することができるのではないでしょうか。

次回は、Resource Graphでよく使うクエリ構文や実例などもご紹介できればと考えています。

この記事の続き

https://zenn.dev/choeurtap/articles/8f66691e51306f

Discussion