Database Watcher for Azure SQL が Public Preview で提供開始されました で投稿しましたが、Azure SQL のモニタリングサービスである Database Watcher がプレビューで提供されました。
この機能を使用することで、SQL Database / Managed Instance のリソース使用状況 / 負荷の高いクエリの分析を行うことができます。
この機能は、取得対象となるデータベースのアクセス権限を保持していなくてもリソース使用状況の分析を行うことができますので、リモートで支援する際にも活用できるのではないか思って確認をしてみました。
結論を書いておくと、Database Watcher のリソースを作成しているサブスクリプションの Entra ID テナントに対して、外部ユーザーとしてゲスト招待されているアカウントでも、Database Watcher の情報を参照することができました。
今回記載しているのは外部ユーザーを対象としていますが、同一テナントのユーザーに参照のみを許可させる際の方法も同様です。
異なるテナントの外部ユーザーでアクセスさせる方法
Entra ID の外部ユーザーの招待としては通常の方法と同一なので省略します。
Database Watcher を作成したサブスクリプションの Entra ID テナントにアクセスできる状態になっていることが起点となります。
Database Watcher の閲覧者のロールを付与
最初に Database Watcher のリソースにアクセスできる権限を付与する必要があります。
Database Watcher のリソースの IAM として設定できるロールとしては次のようなものがありますが「閲覧者」のロールのみ付与されていれば問題ありません。
このロールが付与されていれば、Database Watcher のリソースにアクセスが可能となります。
ADX の Viewer のロールを付与
上述の IAM から閲覧者のロールを付与することでリソースにアクセスが可能となりますが、この状態ではデータストアとなる ADX にアクセスできないため、ダッシュボードを表示しても次のようなエラーとなります。
Database Watcher を使用する場合、ログインをしているユーザーが ADX のデータの参照権限を持っている必要があります。
ADX のセキュリティロールについては データベース セキュリティ ロールの管理 に記載されていますが、ロールとしてはデータの参照ができれば問題ないため、データベースに対しての「viewers」のロールが付与されていれば問題ありません。
ADX で次のようなクエリを実行することで viewer のロールを付与することができます。(ゲストユーザーの場合、ユーザープリンシパル名でロールを付与することができなかったので、オブジェクト ID で指定しています)
.add database [MyDatabase] viewers('aaduser=d<Object ID>;<Tenant ID>);
これで、外部ユーザーを使用した Database Watcher の参照が可能となります。
SQL Database のリソース使用状況を確認する必要がある場合、Database Watcher を使用することで、データベースの直接の参照権限を付与せずにリソースの使用状況を確認することが可能となります。この参照権限の付与は同一のテナントのユーザーだけでなく、外部ユーザーとして招待した他のテナントのユーザーに対しても実施することができますので、リモートで支援する際にも柔軟なアクセス権の付与が可能です。
Database Watcher は ADX にデータが格納されている範囲で、過去のデータについても参照することができますので、今後 SQL Database のチューニングを行う必要がある場合などにも有益に活用することができるのではないでしょうか。