Azure Database for MySQL - フレキシブル サーバーの Microsoft Entra 認証を設定する

適用対象: Azure Database for MySQL - フレキシブル サーバー

このチュートリアルでは、Azure Database for MySQL フレキシブル サーバー用に Microsoft Entra 認証を設定する方法について説明します。

このチュートリアルでは、次の作業を行う方法について説明します。

  • Microsoft Entra 管理を構成します。
  • Microsoft Entra ID を使用して Azure Database for MySQL フレキシブル サーバーに接続します。

前提条件

Microsoft Entra 管理を構成する

Microsoft Entra 管理 ユーザーを作成するには、次の手順に従います。

  • Azure portal で、Microsoft Entra ID に対して有効にする Azure Database for MySQL フレキシブル サーバーのインスタンスを選択します。

  • [セキュリティ] ペインで、[認証] を選択します。Diagram of how to configure Microsoft Entra authentication.

  • 現在使用できる認証には、次の 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 から読み取れるようにするには、次のアクセス許可が必要です。 または、UMI にディレクトリ読み取りロールを与えます。

    • 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

    MySQL サーバーごとに作成できる Microsoft Entra 管理者は 1 つだけで、別の管理者を選択すると、サーバー用に構成されている既存の Microsoft Entra 管理者が上書きされます。

ユーザー割り当てマネージド ID にアクセス許可を付与する

UMI に必要なアクセス許可を付与する PowerShell スクリプトのサンプルを次に示します。 このサンプルでは、UMI umiservertest にアクセス許可を割り当てます。

スクリプトを実行するには、グローバル管理者または特権ロール管理者のロールを持つユーザーとしてサインインする必要があります。

このスクリプトを使用すると、Microsoft Graph にアクセスするための User.Read.AllGroupMember.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[0]  -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[0]  -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[0]  -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 など) を使用します
  • 名前にスペースが含まれている場合は、各スペースの前に \ を使用してエスケープします

注意

"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 ユーザーを追加するには、接続後に次の手順を実行します。

  1. まず、Microsoft Entra ユーザー <user>@yourtenant.onmicrosoft.com が Microsoft Entra テナントの有効なユーザーであることを確認します。
  2. Microsoft Entra 管理者ユーザーとして Azure Database for MySQL インスタンスにサインインします。
  3. Azure Database for MySQL でユーザー <user>@yourtenant.onmicrosoft.com を作成します。

例:

CREATE AADUSER 'user1@yourtenant.onmicrosoft.com';

ユーザー名が 32 文字を超える場合は、接続時に使用するため、代わりに別名を使用することが推奨されます。

例:

CREATE AADUSER 'userWithLongName@yourtenant.onmicrosoft.com' as 'userDefinedShortName';

注意

  1. MySQL では先頭と末尾のスペースが無視されるため、ユーザー名の先頭または末尾にスペースを含めることはできません。
  2. 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 設定を使用する必要があります
  • 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 を追加してください

次のステップ