記録する機会があったのでブログにも記録しておきます。
Azure Active Directory管理者の設定
前提条件としてSQL ServerにてAzure Active Directory管理者を設定します。SQL DB自体ではなく、そのDBを稼働させているSQL Server側での設定です。


管理者として指定したAAD上の組織アカウントでSQL Serverにアクセスします。今回はAzure Data Studioを利用しました。

きちんとアクセスできることを確認します。ここではじかれる場合には条件付きアクセスの条件を満たしていないことなどが考えられます。条件付きアクセスの内容も確認してください。

きちんとAADのユーザーでアクセスできることが確認できました。
Azure ADグループの準備
次にAzure AD上にグループを作成し、その中にユーザーをメンバーとして追加しておきます。今回はsqldbaccessというグループにadmin@hccjp.orgというユーザーを追加しました。(アカウントの選択が適当でごめんなさい。)

権限を付与する前に、まずは、アクセスができないことを確認しておきます。

Login failed for user ‘<token-identified principal>’. と怒られました。AADで認証し、トークンは取得できている状態ですが、権限がなく認可されない場合にはこのようなメッセージが出るのですね。

SQL DBへの権限付与
今回はtestdbというテスト用のDBに権限を出していきます。まずはAAD上のグループに対応するユーザーを作成します。
CREATE USER <groupname> FROM EXTERNAL PROVIDER;

次に、作成したユーザーを任意のDatabase Rolesに追加します。今回はdb_datawriterに追加しました。

接続確認
これでAADのグループメンバーに対しても db_datawriterの役割が割り当たりました。確認していきます。

きちんと接続することができました。

DBにアクセスはできましたが、テーブルは作成できません。きちんと役割通りの権限になっていますね。

管理者でテーブルを作成したうえで、そのテーブルにレコードを登録することは可能です。

まとめ
以上、きちんと意図したとおりにAAD上のグループに対してAzure SQL DBへのアクセス権を付与することができました。
- Azure Active Directory管理者を設定
- 上記で設定した管理者ユーザーにてAADグループに対応するユーザーを作成
- 上記ユーザーに役割を与える
このような手順で実現が可能です。
もう色々なことがAzure AD認証で実現できますし、Azure AD認証であるということはMFAも使えますし条件つきアクセスも使えますし、とっても素敵な世の中になりましたね!