Azure Database for MySQL - フレキシブル サーバーの Microsoft Entra 認証を設定する
このチュートリアルでは、Azure Database for MySQL フレキシブル サーバーの Microsoft Entra 認証を設定する方法を学習します。
このチュートリアルでは、次の作業を行う方法について説明します。
- Microsoft Entra 管理者を構成します。
- Microsoft Entra ID を使用して Azure Database for MySQL フレキシブル サーバーに接続します。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。
Azure サブスクリプションをお持ちでない場合は、開始する前に Azure 無料アカウントを作成してください。
Note
Azure 無料アカウントがあれば、Azure Database for MySQL フレキシブル サーバーを 12 か月間 Free でお試しいただけます。 詳細については、「Azure 無料アカウントを使用して Azure Database for MySQL - フレキシブル サーバーを無料で試す」を参照してください。
Azure CLI をインストールするか、最新バージョンにアップグレードします。 Azure CLI のインストールに関するページを参照してください。
Microsoft Entra 管理者を構成する
Microsoft Entra 管理者ユーザーを作成するには、次の手順に従います。
Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for MySQL フレキシブル サーバーのインスタンスを選択します。
[セキュリティ] ペインで、[認証] を選択します。
現在使用できる認証には、次の 3 種類があります。
MySQL 認証のみ – 既定では、MySQL は組み込みの mysql_native_password 認証プラグインを使用します。これは、ネイティブ パスワード ハッシュ方式を使用して認証を実行します
Microsoft Entra 認証のみ - Microsoft Entra アカウントでの認証のみが許可されます。 mysql_native_password 認証を無効にし、サーバー パラメーター aad_auth_only を "オン" にします
MySQL と Microsoft Entra 認証 - ネイティブの MySQL パスワードまたは Microsoft Entra アカウントを使用した認証が許可されます。 サーバー パラメーターの aad_auth_only を "オフ" にします
[ID を選択する] - [ユーザー割り当てマネージド ID] を選択または追加します。 UMI がサーバー ID として Microsoft Graph から読み取れるようにするには、次のアクセス許可が必要です。 または、ユーザー割り当てマネージド ID にディレクトリ閲覧者ロールを付与します。
- User.Read.All: Microsoft Entra のユーザー情報にアクセスできます。
- GroupMember.Read.All: Microsoft Entra のグループ情報にアクセスできます。
- Application.Read.ALL: Microsoft Entra サービス プリンシパル (アプリケーション) 情報にアクセスできます。
重要
これらのアクセス許可を付与できるのは、少なくとも特権ロール管理者ロールを持つユーザーだけです。
顧客テナントで有効な Microsoft Entra ユーザーまたは Microsoft Entra グループを Microsoft Entra 管理者として選択します。 Microsoft Entra 認証サポートを有効にすると、Microsoft Entra 管理者を、MySQL サーバーに Microsoft Entra ユーザーを追加するアクセス許可を持つセキュリティ プリンシパルとして追加できます。
Note
作成できる Microsoft Entra 管理者は、MySQL サーバーあたり 1 人だけです。別の管理者を選択すると、そのサーバーに構成されている既存の Microsoft Entra 管理者が上書きされます。
ユーザー割り当てマネージド ID にアクセス許可を付与する
UMI に必要なアクセス許可を付与する PowerShell スクリプトのサンプルを次に示します。 このサンプルでは、UMI umiservertest
にアクセス許可を割り当てます。
スクリプトを実行するには、グローバル管理者または特権ロール管理者のロールを持つユーザーとしてサインインする必要があります。
このスクリプトを使用すると、Microsoft Graph にアクセスするための User.Read.All
、GroupMember.Read.All
、および Application.Read.ALL
のアクセス許可が UMI に付与されます。
# Script to assign permissions to the UMI "umiservertest"
import-module AzureAD
$tenantId = '<tenantId>' # Your Azure AD tenant ID
Connect-AzureAD -TenantID $tenantId
# Log in as a user with a "Global Administrator" or "Privileged Role Administrator" role
# Script to assign permissions to an existing UMI
# The following Microsoft Graph permissions are required:
# User.Read.All
# GroupMember.Read.All
# Application.Read.ALL
# Search for Microsoft Graph
$AAD_SP = Get-AzureADServicePrincipal -SearchString "Microsoft Graph";
$AAD_SP
# Use Microsoft Graph; in this example, this is the first element $AAD_SP[0]
#Output
#ObjectId AppId DisplayName
#-------- ----- -----------
#47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 Microsoft Graph
#44e2d3f6-97c3-4bc7-9ccd-e26746638b6d 0bf30f3b-4a52-48df-9a82-234910c4a086 Microsoft Graph #Change
$MSIName = "<managedIdentity>"; # Name of your user-assigned
$MSI = Get-AzureADServicePrincipal -SearchString $MSIName
if($MSI.Count -gt 1)
{
Write-Output "More than 1 principal found, please find your principal and copy the right object ID. Now use the syntax $MSI = Get-AzureADServicePrincipal -ObjectId <your_object_id>"
# Choose the right UMI
Exit
}
# If you have more UMIs with similar names, you have to use the proper $MSI[ ]array number
# Assign the app roles
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "User.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "GroupMember.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
$AAD_AppRole = $AAD_SP.AppRoles | Where-Object {$_.Value -eq "Application.Read.All"}
New-AzureADServiceAppRoleAssignment -ObjectId $MSI.ObjectId -PrincipalId $MSI.ObjectId -ResourceId $AAD_SP.ObjectId -Id $AAD_AppRole.Id
スクリプトの最後の手順では、類似した名前の UMI を複数設定する場合、適切な $MSI[ ]array
番号を使用する必要があります。 たとえば $AAD_SP.ObjectId[0]
です。
ユーザー割り当てマネージド ID のアクセス許可を確認する
UMI のアクセス許可を確認するには、Azure portal に移動します。 Microsoft Entra ID に移動し、[エンタープライズ アプリケーション] を選択します。 [アプリケーションの種類] の [すべてのアプリケーション] を選択し、作成された UMI を検索します。
UMI を選択し、[セキュリティ] の [アクセス許可] 設定に移動します。
アクセス許可が UMI に付与されると、サーバー ID として割り当てられている UMI で作成されたすべてのサーバーに対してそれらが有効になります。
Microsoft Entra ID を使用して Azure Database for MySQL フレキシブル サーバーに接続する
1 - Microsoft Entra ID を使用して認証する
最初に、Azure CLI ツールを使用して Microsoft Entra ID による認証を行います。
(この手順は、Azure Cloud Shell では必要ありません。)
az login コマンドを使用して Azure アカウントにサインインします。 ID プロパティにご注意ください。これは、ご使用の Azure アカウントのサブスクリプション ID のことです。
az login
このコマンドを実行すると、ブラウザー ウィンドウが起動し、Microsoft Entra 認証ページが表示されます。 Microsoft Entra のユーザー ID とパスワードを入力するように求められます。
複数のサブスクリプションがある場合は、次の az アカウント セット コマンドを使用して適切なサブスクリプションを選択します。
az account set --subscription \<subscription id\>
2 - Microsoft Entra アクセス トークンを取得する
Azure CLI ツールを起動して、手順 1 で認証された Microsoft Entra ユーザーのアクセス トークンを取得し、Azure Database for MySQL フレキシブル サーバーにアクセスします。
例 (パブリック クラウドの場合):
az account get-access-token --resource https://ossrdbms-aad.database.windows.net
上記のリソース値は、示されているとおりに正確に指定する必要があります。 他のクラウドの場合、リソース値は次を使用して検索できます。
az cloud show
Azure CLI バージョン 2.0.71 以降では、すべてのクラウドに対して、次のより便利なバージョンでコマンドを指定できます。
az account get-access-token --resource-type oss-rdbms
PowerShell を使用して、次のコマンドを実行してアクセス トークンを取得できます。
$accessToken = Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net $accessToken.Token | out-file C:\temp\MySQLAccessToken.txt
認証が成功すると、Microsoft Entra ID は次のアクセス トークンを返します。
{
"accessToken": "TOKEN",
"expiresOn": "...",
"subscription": "...",
"tenant": "...",
"tokenType": "Bearer"
}
トークンは、認証されたユーザーに関するすべての情報をエンコードする Base 64 文字列であり、Azure Database for MySQL サービスをターゲットとしています。
アクセス トークンの有効性は、5 分から 60 分の範囲内です。 アクセス トークンは、Azure Database for MySQL フレキシブル サーバーへのサインインを開始する前に取得することが推奨されます。
- 次の PowerShell コマンドを使用して、トークンの有効期限を確認できます。
$accessToken.ExpiresOn.DateTime
3 - MySQL でログインするためのパスワードとしてトークンを使用する
接続時に、MySQL ユーザー パスワードとしてアクセス トークンを使用する必要があります。 MySQL Workbench などの GUI クライアントを使用して、上記の方法を使用してトークンを取得できます。
MySQL CLI を使用して Azure Database for MySQL フレキシブル サーバーに接続する
CLI を使用する場合は、この短縮形を使用して接続できます。
例 (Linux/macOS):
mysql -h mydb.mysql.database.azure.com \
--user user@tenant.onmicrosoft.com \
--enable-cleartext-plugin \
--password=`az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken`
例 (PowerShell):
mysql -h mydb.mysql.database.azure.com \
--user user@tenant.onmicrosoft.com \
--enable-cleartext-plugin \
--password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken)
mysql -h mydb.mysql.database.azure.com \
--user user@tenant.onmicrosoft.com \
--enable-cleartext-plugin \
--password=$((Get-AzAccessToken -ResourceUrl https://ossrdbms-aad.database.windows.net).Token)
MySQL Workbench を使用して Azure Database for MySQL フレキシブル サーバーに接続する
- MySQL Workbench を起動し、[データベース] オプションを選択して、[データベースへの接続] を選択します。
- ホスト名フィールドに、MySQL の FQDN を入力します (例: mysql.database.azure.com)。
- ユーザー名フィールドに、MySQL Microsoft Entra 管理者の名前を入力します。 たとえば、user@tenant.onmicrosoft.com のようにします。
- パスワード フィールドで、[コンテナーに保存] をクリックし、たとえば C:\temp\MySQLAccessToken.txt などのファイルからアクセス トークンを貼り付けます。
- 詳細設定タブをクリックして、[クリア テキスト認証プラグインを有効にする] に必ずチェックを付けます。
- [OK] を選択して、データベースに接続します。
接続時の重要な考慮事項
user@tenant.onmicrosoft.com
は、接続に使用しようとしている Microsoft Entra ユーザーまたはグループの名前です- Microsoft Entra ユーザーまたはグループの名前は正確なスペルで入力してください
- Microsoft Entra ユーザーおよびグループの名前では、大文字と小文字が区別されます
- グループとして接続する場合は、グループ名のみ (
GroupName
など) を使用します - 名前にスペースが含まれている場合は、各スペースの前に
\
を使用してエスケープします
Note
"enable-cleartext-plugin" 設定 – 必ずトークンがハッシュされずにサーバーに送信されるようにするには、他のクライアントと同様の構成を使用する必要があります。
これで、Microsoft Entra 認証を使用して MySQL フレキシブル サーバーに対して認証されました。
Microsoft Entra 管理者コマンド
サーバーの Active Directory 管理者を管理します
az mysql flexible-server ad-admin
Active Directory 管理者を作成します
az mysql flexible-server ad-admin create
"例: ユーザー 'john@contoso.com'、管理者 ID '00000000-0000-0000-0000-000000000000'、ID 'test-identity' を使用して Active Directory 管理者を作成します"
az mysql flexible-server ad-admin create -g testgroup -s testsvr -u john@contoso.com -i 00000000-0000-0000-0000-000000000000 --identity test-identity
Active Directory 管理者を削除します
az mysql flexible-server ad-admin delete
"例: Active Directory 管理者の削除"
az mysql flexible-server ad-admin delete -g testgroup -s testsvr
すべての Active Directory 管理者を一覧表示します
az mysql flexible-server ad-admin list
"例: Active Directory 管理者の一覧表示"
az mysql flexible-server ad-admin list -g testgroup -s testsvr
Active Directory 管理者を取得します
az mysql flexible-server ad-admin show
"例: Active Directory 管理者の取得"
az mysql flexible-server ad-admin show -g testgroup -s testsvr
Active Directory 管理者が特定の条件を満たすのを待ちます
az mysql flexible-server ad-admin wait
例:
- "Active Directory 管理者が存在するまで待ちます"
az mysql flexible-server ad-admin wait -g testgroup -s testsvr --exists
- "Active Directory 管理者が削除されるのを待ちます"
az mysql flexible-server ad-admin wait -g testgroup -s testsvr –deleted
Azure Database for MySQL で Microsoft Entra ユーザーを作成する
Azure Database for MySQL データベースに Microsoft Entra ユーザーを追加するには、接続後に次の手順を実行します。
- まず、Microsoft Entra ユーザー
<user>@yourtenant.onmicrosoft.com
が Microsoft Entra テナントの有効なユーザーであることを確認します。 - Microsoft Entra 管理者ユーザーとして Azure Database for MySQL インスタンスにサインインします。
- Azure Database for MySQL でユーザー
<user>@yourtenant.onmicrosoft.com
を作成します。
例:
CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';
ユーザー名が 32 文字を超える場合は、接続時に使用するため、代わりに別名を使用することが推奨されます。
例:
CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';
注意
- MySQL では先頭と末尾のスペースが無視されるため、ユーザー名の先頭または末尾にスペースを含めることはできません。
- Microsoft Entra ID を通じてユーザーを認証しても、Azure Database for MySQL データベース内のオブジェクトにアクセスするためのアクセス許可はユーザーに付与されません。 必要なアクセス許可をユーザーに手動で付与する必要があります。
Azure Database for MySQL で Microsoft Entra グループを作成する
Microsoft Entra グループがデータベースにアクセスできるようにするには、ユーザーの場合と同じメカニズムを使用しますが、代わりにグループ名を指定します。
例:
CREATE AADUSER 'Prod_DB_Readonly';
ログインするときに、グループ メンバーは自分の個人用アクセス トークンを使用しますが、ユーザー名として指定されたグループ名でサインインします。
アプリケーション ドライバーとの互換性
ほとんどのドライバーはサポートされていますが、パスワードをクリア テキストで送信する設定を使用して、トークンが変更されずに送信されるようにする必要があります。
C/C++
- libmysqlclient:サポートされています
- mysql-connector-c++:サポートされています
Java
- Connector/J (mysql-connector-java):サポートされています。
useSSL
設定を使用する必要があります
- Connector/J (mysql-connector-java):サポートされています。
Python
- Connector/Python:サポートされています
Ruby
- mysql2:サポートされています
.NET
- mysql-connector-net:サポートされています。mysql_clear_password 用のプラグインを追加する必要があります
- mysql-net/MySqlConnector:サポートされています
Node.js
- mysqljs: サポートされていません (修正プログラムなしでクリア テキストでトークンを送信しません)
- node-mysql2:サポートされています
Perl
- DBD::mysql:サポートされています
- Net::MySQL:サポートされていません
Go
- go-sql-driver:サポートされています。接続文字列に
?tls=true&allowCleartextPasswords=true
を追加してください
- go-sql-driver:サポートされています。接続文字列に
PHP
mysqli 拡張機能: サポートされています
PDO_MYSQL ドライバー: サポートされています