SQL Database の認証に Azure AD のグループを使うと最強だった件! #Azureリレー
2020-05-27
azblob://2022/11/11/eyecatch/2020-05-27-use-azuread-authentication-for-authentication-with-sql-000.jpg

先週の荒井さんの IT未経験者でもできる!WordPress + Azure Database for MySQLの環境構築、バックアップ、データ復元手順をご紹介! #Azureリレー に引き続き、毎週水曜日にAzure関連の記事を上げるAzure リレー第13回を担当します。荒井さんの記事はWordPressの記事を保存したAzure Database for MySQLのバックアップとデータ復元の様子が紹介されています。なんか難しそうと思いきや、そのお手軽さにびっくりしますので、読まれていない方はぜひ読んでみてください。

今回はAzure SQL Databaseの認証に、Azure Active Directory (Azure AD) の ID を使う方法を紹介します。地味な話なのか意外とあまり記事を見ないのですが、実はかなり強力な機能なのでこの機会に知ってもらえると嬉しいです。

何ができるの?

Azure SQL Databaseに接続する時に、Azure Active Directory のユーザで認証できるようになります。つまり、以下のような嬉しいことが起こります。

  • 共有ユーザを廃止できる
    ユーザに紐づいたアカウントでアクセスするので、誰が何をやったかが一目瞭然になります。
  • 権限を付与する人と、Azure SQL Databaseに接続する人とを分離できる
    Azure SQL Databaseのユーザを作成する際に、Azure Active Directory のユーザを直接指定することもできますが、今回ご紹介するようにAzure Active Directory のグループも使用できます。これにより、最初の設定さえ完了すれば、その後はユーザへの権限付与の際にAzure Active Directory のグループで管理できるようになります。
    つまり、権限の付与を行う人にSQL Databaseの権限を持たせる必要がなくります。また、SQL Databaseのユーザを追加したり削除したりする手順に比べ、Azure Active Directory のグループのメンバー管理は簡単にできるという利点もあります。
  • MFAが使えるようになる
    Azure Active Directory のMFAの機能を使うことにより、SQL Databaseへの接続時にもMFAを使用できるようになります。単純なID/パスワードに比べて、よりセキュアに運用できます!

概要

今回は、Azure Active Directory のグループを用いた手順をご紹介します。多いように見えますが、一つひとつやって行けば大丈夫です。

<準備編>

  1. Azure ADのグループを作る
  2. Azure SQL Database サーバーに Azure Active Directory 管理者を設定する
  3. Azure Active Directory 管理者でAzure SQL Databaseに接続する
  4. Azure SQL DatabaseのユーザをAzure ADのグループで作る
  5. Azure SQL Databaseのユーザにロールを割り当てる

<使ってみる編>

  1. Azure ADのグループにユーザを追加する
  2. グループに追加されたユーザでAzure SQL Databaseに接続する
  3. Azure ADのグループからユーザを削除する

最終的には、こんな感じの環境ができあがります。

Azure ADのグループを作る

まずはAzure ADのグループを作ります。今回は「SQL-Yomu-Group」という名前にしました。

Azure SQL Database サーバーに Azure Active Directory 管理者を設定する

Azure SQL Database サーバーに Azure Active Directory 管理者を設定します。これにより、Azure SQL Database サーバーを作成した時に作られる「サーバ管理者」がもう一つできた感じになります。なお、今回はユーザを設定しましたが、グループを設定することもできます。
名前がややこしいのですが、RBACおよびAzure Active Directoryの権限は関係なく、どんなユーザでもAzure SQL Database サーバーの Azure Active Directory 管理者に指定できます。

Azure Active Directory 管理者でAzure SQL Databaseに接続する

先ほど設定したAzure SQL Database サーバーの Azure Active Directory 管理者で、SQL Server Management Studio (SSMS) を使ってAzure SQL Databaseに接続します。
ここのポイントは1つです。

  • 「認証」のドロップダウンで「Azure Active Directory  - MFAで汎用」を選択します

Azure ADのMFAを使っていない場合は「Azure Active Directory  - パスワード」でもよいのですが、「Azure Active Directory  - MFAで汎用」ならMFAなしのアカウントもありのアカウントも両方通るので、私はいつもこっちを使ってしまっています。

Azure SQL DatabaseのユーザをAzure ADのグループで作る

対象のデータベースを選択し、以下のコマンドを実行してAzure ADの「SQL-Yomu-Group」グループでAzure SQL Databaseのユーザを作成します。
ポイントは [FROM EXTERNAL PROVIDER] です。これにより、Azure ADのユーザやグループからSQL Databaseのユーザを作成することができます。

CREATE USER [SQL-Yomu-Group] FROM EXTERNAL PROVIDER;

Azure SQL Databaseのユーザにロールを割り当てる

作成したユーザに、Azure SQL Databaseのロールを割り当てます。今回は読み取りができればいいのでdb_datareaderのロールにしましたが、権限はやりたいことに合わせて選んでください。
ユーザ定義ロールも使えます。

ALTER ROLE db_datareader ADD MEMBER [SQL-Yomu-Group];

おつかれさまでした。ここまでで準備は完了です!
ではいよいよ、使ってみましょう。

Azure ADのグループにユーザを追加する

新しい担当者Aさんが着任しました。さっそくAzure ADの「SQL-Yomu-Group」のメンバーに追加してあげましょう。これからよろしくね。

グループに追加されたユーザでAzure SQL Databaseに接続する

トラブル発生!担当者AさんがSSMSでAzure SQL Databaseに接続します。ここでのポイントは2つです。

  • 「認証」のドロップダウンで「Azure Active Directory  - MFAで汎用」を選択します
  • [オプション]の[接続プロパティ]でデータベース名を設定します

これで無事に接続できます。あとは普段通り、Select文などを投げて作業してください。

Azure ADのグループからユーザを削除する

運用担当者Aさんがいなくなります。Azure ADの「SQL-Yomu-Group」のメンバーから削除しましょう。新天地でもがんばってね。

まとめ

いかがでしたか?
ちょっとした設定で、運用フェーズで強力に使える機能があることが分かっていただけたかと思います。
なお、今回作成したユーザは包括データベースユーザのため、SQL Serverのログインの作成は不要です。
みなさんもぜひ使ってみてくださいね!