4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Azure TechAdvent Calendar 2023

Day 22

Azure Resource Graph で Azure リソースの変更を検知して通知する

Last updated at Posted at 2023-12-21

本記事は、Microsoft Azure Tech Advent Calendar 2023 の 12/22 の投稿です。
ジングルベル~🎅🎅

こんにちは駆け出しアーキテクトのやまぱんです。
今回の記事では Azure Resource Graph を使って Azure リソースの変更を検知してみたいと思います。

もし、誤りなどがあったらコメントにて優しく指摘いただければ嬉しいです。
その他のコメントもお気軽にお願いします👌

なにがうれしいのか

Azure Resource Graph を使って簡単に Azure リソースの変更や削除、追加などを検知することができます。
管理部門の方などにとってはシャドーITというか、シャドー Azure リソースの検知をすることができます。
また、本ページでは触れませんが Azure Resource Graph を使うことで、使われていない Public IPアドレスを探したり、使われていないマネージドディスクを探したり、リソースの状態や設定を指定してクエリを発行することもできます。具体的なサンプルはこちらのページにあります。

Azure Resource Graph とは

以下公式ドキュメントの抜粋です。

Azure Resource Graph は Azure サービスであり、Azure Resource Management を拡張するよう設計されています。特定のサブスクリプションのセット全体で大規模なクエリを実行する機能を使用して、効率的でパフォーマンスの高いリソース探索を提供することで、環境を効果的に管理できます。 これらのクエリでは、次の機能を提供します。
複雑なフィルター処理、グループ化、およびリソースのプロパティでの並べ替えによりリソースのクエリを行う機能。
ガバナンスの要件に基づいてリソースを繰り返し探索する機能。
広大なクラウド環境にポリシーを適用することの影響を評価する機能。
リソース プロパティに加えられたクエリの変更。

Azure Resource Graphの主な特徴や機能

  • クエリ言語: Kusto Query Language(KQL)を使用して、Azure Resource Graphで柔軟で強力なクエリを実行できます。これにより、複雑な条件でリソースを検索し、データをフィルタリングし、集計できます。

  • 高速で大規模なデータセット: ARGは、大規模なAzure環境でのクエリ処理に対応しており、数千以上のリソースにまたがるデータを高速に処理できます。

  • クロスリージョンおよびクロスサブスクリプション検索: Azure Resource Graphは、クロスリージョンおよびクロスサブスクリプションの範囲で検索をサポートします。これにより、広範囲なAzure環境でリソースを効率的に検索できます。

  • Azure Policyの評価: ARGを使用してAzure Policy の評価結果を取得し、ポリシーコンプライアンスの概要を把握できます。

  • Azure Portal、Azure PowerShell、Azure CLIとの統合: Azure Resource Graph はAzure Portal、Azure PowerShell、Azure CLIと統合されており、これらのツールを通じてクエリを実行できます。

Azure Resource Graph を使ってみる

今回は Log Analytics Workspace と Azure Resource Graph エクスプローラー で試してみます。
Log Analytics Workspace で実行する場合は、Azure Resource Graph エクスプローラー で実行したクエリの頭に arg("") を付けます。
arg はおそらく Azure Resource Graph を指していると思います。

リソースの数をカウントする

KQL
Resources
| count
  • Azure Resource Graph エクスプローラー
    2023-12-08_06h47_16.png

  • Log Analytics Workspace
    arg("")がついてますね.
    2023-12-08_06h46_25.png

リソースの変更を検知したいので、リソースの数をカウントしておいて、それが変化すればいいかと思ってましたがそれじゃリソース数が変化しない場合に検知できないことに気づきました。😂😂
なので次はストレートにリソースの変更を検知するクエリです。

リソースの変更を検知する

今回は後でメール通知も行いたいので Log Analytics Workspace で下記のクエリを実行します。
一日以内に変更のあったリソースを出してます。

KQL
arg("").resourcechanges
| extend timestamp = todatetime(parse_json(properties).changeAttributes.timestamp)
| extend hid = substring(id, indexof(id, "/providers/") + 1)
| project timestamp, subscriptionId, resourceGroup, hid, properties
| where timestamp >= ago(1d)
| order by timestamp asc

[クエリの説明]

このクエリは、Azure Resource Graph で使用される resourcechanges テーブルからデータを取得しています。

  • extend timestamp = todatetime(parse_json(properties).changeAttributes.timestamp) :
    properties カラムの JSON オブジェクトから changeAttributes.timestamp プロパティを取得し、timestamp カラムに変換します。
  • extend hid = substring(id, indexof(id, "/providers/") + 1) :
    id カラムから /providers/ の後ろの文字列を取得し、hid カラムに格納します。
  • project timestamp, subscriptionId, resourceGroup, hid, properties :
    timestamp, subscriptionId, resourceGroup, hid, properties カラムのみを残します。
  • where timestamp >= ago(1d) :
    timestamp カラムが 1 日以内のレコードのみを残します。
  • order by timestamp asc :
    timestamp カラムで昇順に並べ替えます。
  • 実行結果
    私の環境では下記のように 3 件ヒットしました。✨
    2023-12-08_06h58_43.png

続いてアラートを設定していきましょう。

Azure Resource Graph クエリでアラートを設定する

2023/12/08(金) 現在で本機能 (Azure Resource Graph とAzure Monitorの統合) はプレビュー段階です。

・Public Preview: Azure Log Alerts support for Azure Resource Graph (ARG)
https://azure.microsoft.com/ja-jp/updates/public-preview-azure-log-alerts-support-for-azure-resource-graph-arg/

アラートルールの作成

先ほどの画面ショットの黄色塗りつぶし部分の "+ 新しいアラートルール" から設定します。

  • 基本の設定
    こんな感じ
    2023-12-08_07h05_02.png

  • 通知の設定
    今回はメール通知のみを設定しますが、メール以外にも通知方法はあります。
    また Webhook を利用して Teams や Slack に投稿することも可能です。
    image.png

  • 詳細の設定
    下記のような感じで設定
    2023-12-08_11h13_00.png

  • 作成したアラートルールはこういう形で ”ログ検索警告ルール” としてリソースとして確認可能です。
    image.png

マネージド ID の設定

先ほど選択した マネージドID (System assigned identity) に対して権限を設定します。
権限の設定がないと、正常にクエリの実行・および通知ができません。
クエリの対象のリソースに対して、閲覧者権限がついていればOKです。
今回は Subscription 全体に閲覧者権限を付けました。
2023-12-08_11h21_34.png

ARG クラスターに対してクエリを実行する場合、クエリによってアクセスされるすべてのデータ ソースに対して閲覧者ロールを追加する必要があります。 たとえば、クエリがリソース中心の場合、そのリソースに対する閲覧者ロールが必要です。
・警告ルールを作成または編集する
https://learn.microsoft.com/ja-jp/azure/azure-monitor/alerts/alerts-create-new-alert-rule?tabs=log#set-the-alert-rule-details

アラートメールの確認

下記が実際に飛んできたアラートメールです。
実際にリソースの変更を検知して通知することができました!
*時刻は UTC 表記なので、日本時間に直すには +9:00 してください。

  • タイトル:Fired:Sev2 Azure Monitor Alert ResourceChange! on law-test ( microsoft.operationalinsights/workspaces ) at 12/8/2023 2:01:12 AM
  • 差出人:Microsoft Azure azure-noreply@microsoft.com
  • 内容:下記画面ショット参考(後半は割愛しましたが、アラートルールの設定内容が記載されていました。)
    2023-12-08_11h31_57.png

CLI での実行

Azure CLI や Azure PowerShell でもクエリを実行することが可能なので、監視の仕組みを作りこむこともできるかと思います。

  • Azure CLI や Azure PowerShell での実行例
Azure CLI
az graph query -q "Resources | summarize count()"
Azure PowerShell
Search-AzGraph -Query "Resources | summarize count()"

Ref : Resource Graph の初歩的なクエリのサンプル

参考

・Azure Resource Graph とは(公式)

・Azure Resource Graph の公式クエリサンプル(初歩)

・Azure Resource Graph の公式クエリサンプル(詳細)

・Azure Resource Graph のサンプル
使われていない Public IPアドレスを探したり、使われていないマネージドディスクを探したり。

・警告ルールを作成または編集する

・KQLについて

・KQL 100+ Knocks
MS 社員が作ったKQL学習サイトです。

・Azure Resource Graphを触ってみる
JBSさんの記事 (初学者向けに丁寧)

・サポートチームからもこのトピックに関する記事が出ました (追記)

謝辞

このエントリを書くにあたって、協力いただきました社内の有志のメンバーの皆さまありがとうございました。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?