目的
Azure Database for MySQL (以下 Azure MySQL)で、
Azure Active Directory 認証によってログインする方法の整理。
Microsoft Docs を辿ってもフワッとした箇所が多く、手探りで確認する場面が多かったので備忘録。
- [Active Directory authentication - Azure Database for MySQL] (https://docs.microsoft.com/en-us/azure/mysql/concepts-azure-ad-authentication)
- [Use Azure Active Directory - Azure Database for MySQL] (https://docs.microsoft.com/en-us/azure/mysql/howto-configure-sign-in-azure-ad-authentication)
手順の概略
Azure AD 管理者の操作
- Azure にログイン
- アクセストークンを取得
- Azure MySQL サーバーに接続
- Azure AD ユーザーを作成
- Azure AD ユーザーに権限を付与
Azure AD ユーザーの操作
- Azure にログイン
- アクセストークンを取得
- Azure MySQL サーバーに接続
準備物
Azure CLI
クロスプラットフォームのCLIツール。
Azure ポータルで操作が完結しないため、「az」コマンドの実行に必要。
- [Azure CLI のダウンロード] (https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest)
MySQL Workbench (必要に応じて)
MySQL 公式のGUIツール。Azure MySQL サーバーへの接続用。
-
[MySQL Workbench のダウンロード] (https://dev.mysql.com/downloads/workbench/)
-
Visual C++ 2019 Redistributable Packages のインストールを求められる場合は、以下をダウンロード。
- [Visual C++ 2019 のダウンロード] (https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads)
Azure AD 管理者
- Azure ポータルで**「Active Directory 管理者」**として指定したユーザー
Azure AD ユーザー
- Azure テナントに存在するユーザー
Azure AD 管理者の操作
1. Azure にログイン
*Azure CLI のインストール後
Windows Powershell 等で以下のコマンドを入力。
az login
Web ブラウザが立ち上がったら Azure で使用するアカウントを選択し、ログイン。
2. アクセストークンを取得
Azure MySQL サーバーに接続するためのアクセストークンを取得する。
これがパスワードの代わりになる。AD パスワードではない
以下のコマンドを入力。
az account get-access-token --resource-type oss-rdbms
以下のような JSON が返ってくる。
{
"accessToken": "めちゃめちゃ長い文字列",
"expiresOn": "...",
"subscription": "...",
"tenant": "...",
"tokenType": "Bearer"
}
accessToken にある文字列をアクセストークンとして接続に使用する。
アクセストークンの有効期限は取得後の60分間
expiresOn にある時刻が有効期限。
有効期限が切れたら再度コマンドでトークンを取得し直さなきゃいけない。
3. Azure MySQL サーバーへの接続
MySQL Workbench を使用する場合
以下の情報を使用し、Azure MySQL サーバーに接続する。
項目名 | 値 |
---|---|
Hostname | サーバー名 (例: hogehogedb.mysql.database.azure.com) |
Port | 3306 |
Username | Azure AD 管理者@サーバー (例: AzureADadmin@yourdomain.com@hogehogedb) |
Password | 取得したアクセストークン |
Advanced タブ下にある [Enable Cleartext Authentication Plugin] をオンにすること。
mysql.exe を使用する場合
mysql.exe を使って Azure MySQL サーバーに接続する場合は、以下のコマンドを実行。
mysql -h hogehogedb.mysql.database.azure.com \
--user AzureADadmin@yourdomain.com@hogehogedb \
--enable-cleartext-plugin \
--password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`
4. Azure AD ユーザーを作成
そのままでは Azure AD 管理者以外のユーザーは Azure AD 認証でサーバーに接続できないため、
Azure AD でログインできるユーザーを作成する。
以下の SQL を実行。
CREATE AADUSER 'piyo01@yourdomain.com';
5. Azure AD ユーザーに権限を付与
作成したユーザーはデフォルトでは権限を持たないため、権限を指定して付与。
以下の SQL を実行。(例)
GRANT
SELECT, INSERT, UPDATE, DELETE
ON
hogehogedb.*
TO
'piyo01@yourdomain.com'@'%'
WITH GRANT OPTION;
FLUSH PRIVILEGES;
Azure AD ユーザーの操作
1. Azure にログイン
ユーザーが個別にログイン。
az login
2. アクセストークンを取得
ログイン後、ユーザーが個別にアクセストークンを取得。
az account get-access-token --resource-type oss-rdbms
3. Azure MySQL サーバーへの接続
各自の Azure AD ユーザー名と、個別で取得したアクセストークンを使い、
Azure MySQL サーバーに接続する。
項目名 | 値 |
---|---|
Username | Azure AD ユーザー@サーバー (例: piyo01@yourdomain.com@hogehogedb) |
Password | 取得したアクセストークン |
Azure AD 管理者が取得したアクセストークンとは別
まとめ
Azure AD の情報で Azure Database for MySQL サーバーにログインできるー
その他
* SQL Server や Azure SQL の行レベルセキュリティを再現したい場合は、Azure AD グループユーザーを作成し、DB/テーブル権限を与えて制御するしかなさそう