⚗️

Azure Machine Learning から サービスプリンシパル認証で Azure SQL Database へ接続する

2022/09/29に公開

はじめに

Azure Machine Learning ワークスペースにデータストアとして Azure SQL Database を接続する場合、認証方法は SQL 認証サービスプリンシパル認証から選択できます。
利用する組織のセキュリティポリシー等により SQL 認証が許可されないような状況ではサービスプリンシパル認証を検討することになると思いますが、Azure Active Directory、Azure SQL Database 、Azure Machine Learning それぞれで作業が必要で設定手順がわかりづらいと感じたため手順をまとめました。
なお、利用シナリオとしては Azure Machine Learning studio (Web UI) からの自動機械学習実行を想定しています。

参考情報

下記ドキュメントを参考にしました。

また、Azure Machine Learning の文脈ではないですが、Azure SQL Database へサービスプリンシパル認証で接続する方法については下記ブログ記事を参考にさせていただきました。

手順

前提

Azure Machine Learning と Azure SQL Database は作成済みの想定です。

Azure Active Directory でやること

サービスプリンシパルを作成する

下記手順に従い作成します。

作成が完了したら赤線で囲った部分の情報(表示名・クライアント ID・テナント ID)をメモ帳などに控えておきます。

クライアントシークレットを作成する

下記手順に従い、上記のサービスプリンシパルのクライアントシークレットを作成します。

作成が完了したら赤線で囲った部分の情報を控えておきます。
可能であれば後述の Azure Machine Learning データストアの登録直前に作成して直接コピー&ペーストするなどして、クライアントシークレットは絶対に外部に漏らさないよう取り扱いに注意します。

Azure SQL Database でやること

Azure SQL Database の Azure Active Directory 管理者を有効にする

SQL Database の論理サーバー (SQL サーバー) で行う作業です。まだ有効にしていない場合は下記手順に従い有効化します。

サービスプリンシパルとマネージド ID の包含ユーザーを作成する

下記手順に従い、Azure Machine Learning のデータストアに登録したいデータベースに、上記で有効化した Azure SQL Database の Azure Active Directory 管理者でログインをして作成します。

なお、Azure Machine Learning studio からのデータプレビューの際に Azure Machine Learning ワークスペースのマネージド ID も使われているようなので、データストア接続用のサービスプリンシパルと Azure Machine Learning ワークスペースのマネージド ID の両方に対して包含ユーザーを作成します。具体的には下記のようなクエリになります。

CREATE USER [サービスプリンシパルの表示名] FROM EXTERNAL PROVIDER;
CREATE USER [Azure Machine Learning のワークスペース名] FROM EXTERNAL PROVIDER;

データベースロールに包含ユーザーを追加する

下記手順に従い、上記で作成した包含ユーザーをデータベースロールに追加します。

具体的には下記のようなクエリになります。2 つの包含ユーザーを固定データベース ロールのうちデータ読み取り権限のみを持つ db_datareader に追加しています。

ALTER ROLE db_datareader ADD MEMBER [サービスプリンシパルの表示名];
ALTER ROLE db_datareader ADD MEMBER [Azure Machine Learning のワークスペース名];

これで、サービスプリンシパルと Azure Machine Learning ワークスペースのマネージド ID がそれぞれ Azure SQL Database の対象データベースへのログインとデータの読み取りが行なえるようになります。

Azure Machine Learning でやること

データストアに Azure SQL Database を追加する

Azure Machine Learning studio を開きデータストア -> +作成を選択します。

下記のように情報を入力して作成を選択します。

項目
データストア名 任意の名前
データストアの種類 Azure SQL Database
サブスクリプション ID 登録対象の SQL Database が存在するサブスクリプション ID
サーバー名/データベース名 登録対象のデータベース
資格情報を保存する はい
認証の種類 サービスプリンシパル
テナント ID サービスプリンシパル作成時に控えた値
クライアント ID サービスプリンシパル作成時に控えた値
クライアントシークレット シークレット作成時に控えた値
マネージド ID の使用 はい

作成が完了すると、データストア一覧に設定した名前が表示されます。

データアセットを作成して学習を実行する

Azure Machine Learning studio から自動 ML -> +新規の自動機械学習ジョブ -> データアセットの選択 -> +作成 -> データストアからを選択します。

データストアの選択画面で、上記で作成したデータストアを選択します。ここでは Azure SQL Database サンプルデータのSalesOrderDetailテーブルから全件データを取得しています。

データストアの接続に成功しているとデータのプレビューが表示されます。

画面に従って進めると、Azure SQL Database から取得したデータアセットが選択できるようになります。

ここまで来ればあとは自動機械学習を実行するのみです。細かい部分は省略しますが、学習の実行と完了を確認できました。


※ SQL Database のサンプルデータから無作為にターゲット列を選択したごく短時間の学習のため全く意味の無いモデルです。

まとめ

サービスプリンシパル認証で接続した Azure SQL Database から取得したデータを使って、無事、自動機械学習を実行することができました。

以上です。🍵

Microsoft (有志)

Discussion