Azure SQL 用の Microsoft Entra でのマネージド ID
適用対象: Azure SQL Database Azure SQL Managed Instance
Microsoft Entra ID (旧称 Azure Active Directory) では、システム割り当てマネージド ID (SMI) とユーザー割り当てマネージド ID (UMI) の 2 種類のマネージド ID がサポートされています。 詳細については、マネージド ID の種類に関するページを参照してください。
SMI は、作成されると Azure SQL Managed Instance に自動的に割り当てられます。 Azure SQL Database で Microsoft Entra 認証を使用する場合は、Azure サービス プリンシパルを使用して SQL Database に Microsoft Entra ユーザーを作成する際に SMI を割り当てる必要があります。
以前は、Azure SQL Managed Instance または SQL Database サーバーの ID には、SMI のみを割り当てることができました。 今では、SQL Managed Instance または SQL Database に UMI をインスタンスまたはサーバーの ID として割り当てることができます。
UMI と SMI は、インスタンスまたはサーバーの ID として使用するだけではなく、SQL 接続文字列オプション Authentication=Active Directory Managed Identity
を使用してデータベースにアクセスする場合にも使用できます。 CREATE USER ステートメントを使用して、ターゲット データベースのマネージド ID から SQL ユーザーを作成する必要があります。 詳細については、「SqlClient で Microsoft Entra 認証を使用する」を参照してください。
Azure SQL Managed Instance または Azure SQL Database の現在の UMI (1 つまたは複数の) または SMI を取得するには、この記事で後述する「論理サーバーまたはマネージド インスタンスのマネージド ID を取得または設定する」を参照してください。
ユーザー割り当てマネージド ID を使用する利点
UMI をサーバー ID として使用することには、いくつかの利点があります。
ユーザーは、テナント用に独自の UM を柔軟に作成して維持することができます。 UMI は、Azure SQL のサーバー ID として使用できます。 UMI はユーザーによって管理されます。一方、SMI はサーバーごとに一意に定義され、システムによって割り当てられます。
以前は、サーバーまたはインスタンスの ID として SMI を使用する場合、Microsoft Entra ID のディレクトリ閲覧者ロールが必要でした。 Microsoft Graph を介した Microsoft Entra ID へのアクセス機能の導入により、ディレクトリ閲覧者ロールなどの高いレベルのアクセス許可を SMI または UMI に付与することが心配なユーザーは、代わりに低いレベルのアクセス許可を付与して、サーバーまたはインスタンスの ID で Microsoft Graph にアクセスできるようにすることができます。
ディレクトリ閲覧者のアクセス許可の付与、およびその機能の詳細については、「Azure SQL の Microsoft Entra ID のディレクトリ閲覧者ロール」を参照してください。
ユーザーは、特定の UMI を選択し、それをテナント内のすべてのデータベースまたはマネージド インスタンス用のサーバーまたはインスタンスの ID とすることができます。 また、複数の UM をそれぞれ異なるサーバーまたはインスタンスに割り当てることもできます。
複数の UMI を、それぞれ異なるサーバーに使用することで、さまざまな機能を表現することができます。 たとえば、あるサーバーでは UMI を Transparent Data Encryption (TDE) のために使用し、別のサーバーでは UMI を Microsoft Entra 認証に使用することができます。
TDE とカスタマー マネージド キー (CMK) を使用して構成する論理サーバーを Azure 内に作成するには、UMI が必要です。 詳細については、「ユーザー割り当てマネージド ID を使用したカスタマー マネージド Transparent Data Encryption」を参照してください。
UMI は、論理サーバーまたはマネージド インスタンスとは独立しています。 論理サーバーまたはインスタンスを削除すると、SMI も削除されます。 UMI は、サーバーと一緒に削除されません。
Note
SQL Managed Instance での Microsoft Entra 認証のサポートを許可するには、インスタンス ID (SMI または UMI) を有効にする必要があります。 SQL Database では、サーバー ID の有効化は省略可能であり、Microsoft Entra サービス プリンシパル (Microsoft Entra アプリケーション) によってサーバー内の Microsoft Entra ユーザー、グループ、またはアプリケーションの作成と管理が監視されている場合にのみ必要です。 詳細については、「Azure SQL での Microsoft Entra サーバー プリンシパル」をご覧ください。
ユーザー割り当てマネージド ID を作成する
UMI を作成する方法については、「ユーザー割り当てマネージド ID の管理」を参照してください。
アクセス許可
UMI を作成したら、UMI がサーバー ID として Microsoft Graph から読み取りできるようにするための何らかのアクセス許可が必要になります。 以下のアクセス許可を付与するか、または UMI にディレクトリ閲覧者ロールを付与します。
これらのアクセス許可は、Azure SQL 論理サーバーまたはマネージド インスタンスをプロビジョニングする前に付与する必要があります。 アクセス許可が UMI に付与されたら、サーバー ID として割り当てられた UMI で作成されたすべてのサーバーまたはインスタンスに対してアクセス許可が有効になります。
- User.Read.All: Microsoft Entra のユーザー情報にアクセスできます。
- GroupMember.Read.All: Microsoft Entra のグループ情報にアクセスできます。
- Application.Read.ALL: Microsoft Entra サービス プリンシパル (アプリケーション) 情報にアクセスできます。
アクセス許可の付与
マネージド ID に必要なアクセス許可を付与する PowerShell スクリプトのサンプルを次に示します。 このサンプルでは、ユーザー割り当てマネージド ID umiservertest
にアクセス許可を割り当てます。
スクリプトを実行するには、グローバル管理者または特権ロール管理者のロールを持つユーザーとしてサインインする必要があります。
このスクリプトを使用すると、Microsoft Graph にアクセスするための User.Read.All
、GroupMember.Read.All
、および Application.Read.ALL
のアクセス許可が マネージド ID に付与されます。
# Script to assign permissions to an existing UMI
# The following required Microsoft Graph permissions will be assigned:
# User.Read.All
# GroupMember.Read.All
# Application.Read.All
Import-Module Microsoft.Graph.Authentication
Import-Module Microsoft.Graph.Applications
$tenantId = "<tenantId>" # Your tenant ID
$MSIName = "<managedIdentity>"; # Name of your managed identity
# Log in as a user with the "Global Administrator" or "Privileged Role Administrator" role
Connect-MgGraph -TenantId $tenantId -Scopes "AppRoleAssignment.ReadWrite.All,Application.Read.All"
# Search for Microsoft Graph
$MSGraphSP = Get-MgServicePrincipal -Filter "DisplayName eq 'Microsoft Graph'";
$MSGraphSP
# Sample Output
# DisplayName Id AppId SignInAudience ServicePrincipalType
# ----------- -- ----- -------------- --------------------
# Microsoft Graph 47d73278-e43c-4cc2-a606-c500b66883ef 00000003-0000-0000-c000-000000000000 AzureADMultipleOrgs Application
$MSI = Get-MgServicePrincipal -Filter "DisplayName eq '$MSIName'"
if($MSI.Count -gt 1)
{
Write-Output "More than 1 principal found with that name, please find your principal and copy its object ID. Replace the above line with the syntax $MSI = Get-MgServicePrincipal -ServicePrincipalId <your_object_id>"
Exit
}
# Get required permissions
$Permissions = @(
"User.Read.All"
"GroupMember.Read.All"
"Application.Read.All"
)
# Find app permissions within Microsoft Graph application
$MSGraphAppRoles = $MSGraphSP.AppRoles | Where-Object {($_.Value -in $Permissions)}
# Assign the managed identity app roles for each permission
foreach($AppRole in $MSGraphAppRoles)
{
$AppRoleAssignment = @{
principalId = $MSI.Id
resourceId = $MSGraphSP.Id
appRoleId = $AppRole.Id
}
New-MgServicePrincipalAppRoleAssignment `
-ServicePrincipalId $AppRoleAssignment.PrincipalId `
-BodyParameter $AppRoleAssignment -Verbose
}
ユーザー割り当てマネージド ID のアクセス許可を確認する
UMI のアクセス許可を確認するには、Azure portal に移動します。 Microsoft Entra ID に移動し、[エンタープライズ アプリケーション] を選択します。 [アプリケーションの種類] の [すべてのアプリケーション] を選択し、作成された UMI を検索します。
UMI を選択し、[セキュリティ] の [アクセス許可] 設定に移動します。
論理サーバーまたはマネージド インスタンス用のマネージド ID を取得または設定する
UMI を使用してサーバーを作成するには、ガイド「ユーザー割り当てマネージド ID を使用して Azure SQL 論理サーバーを作成する」を参照してください。
Azure SQL データベース論理サーバーの SMI を取得する
Azure portal には、Azure SQL Database 論理サーバーの [プロパティ] メニューにシステム割り当てマネージド ID (SMI) ID が表示されます。
- Azure SQL Managed Instance または Azure SQL Database 用の UMI を取得するには、次の PowerShell または Azure CLI の例を参考にしてください。
- Azure SQL Managed Instance 用の SMI を取得するには、次の PowerShell または Azure CLI の例を参考にしてください。
Azure portal でマネージド ID を構成する
Azure portal で Azure SQL Database 論理サーバーまたは Azure SQL Managed Instance 用のユーザーマネージド ID を設定するには、次のようにします。
- SQL サーバーまたは SQL マネージド インスタンス リソースに移動します。
- [セキュリティ] で、[ID] 設定を選択します。
- [ユーザー割り当てマネージド ID] で、[追加] を選択します。
- サブスクリプションを選択してから、[プライマリ ID] として、そのサブスクリプション用のマネージド ID を選択します。 次に、[選択] ボタンを選択します。
Azure CLI を使用してマネージド ID を作成または設定する
UMI でこれらのコマンドを実行するには、Azure CLI 2.26.0 (またはそれ以降) が必要です。
Azure CLI を使用した Azure SQL Database マネージド ID
ユーザー割り当てマネージド ID で新しいサーバーをプロビジョニングするには、az sql server create コマンドを使用します。
論理サーバー用のマネージド ID を取得するには、az sql server show コマンドを使用します。
たとえば、論理サーバーの ユーザー割り当てマネージド ID を取得するには、それぞれの
principalId
を探します:az sql server show --resource-group "resourcegroupnamehere" --name "sql-logical-server-name-here" --query identity.userAssignedIdentities
Azure SQL Database 論理サーバーのシステム割り当てマネージド ID を取得するには:
az sql server show --resource-group "resourcegroupnamehere" --name "sql-logical-server-name-here" --query identity.principalId
UMI サーバー設定を更新するには、az sql server update コマンドを使用します。
Azure CLI を使用して Azure SQL Managed Instance のマネージド ID に接続する
UMI で新しいマネージド インスタンスをプロビジョニングするには、az sql mi create コマンドを使用します。
マネージド インスタンス用のシステム割り当ておよびユーザー割り当てマネージド ID を取得するには、az sql mi show コマンドを使用します。
たとえば、マネージド インスタンス用の UMI を取得するには、それぞれの
principalId
を探します。az sql mi show --resource-group "resourcegroupnamehere" --name "sql-mi-name-here" --query identity.userAssignedIdentities
マネージド インスタンスの SMI を取得するには:
az sql mi show --resource-group "resourcegroupnamehere" --name "sql-mi-name-here" --query identity.principalId
UMI のマネージド インスタンス設定を更新するには、az sql mi update コマンドを使用します。
PowerShell を使用してマネージド ID を作成または設定する
UMI で PowerShell を使用する場合は、Az.Sql モジュール 3.4 以上が必要です。 PowerShell の最新バージョンをお勧めします。または、Azure portal の Azure Cloud Shell を使用してください。
PowerShell を使用した Azure SQL Database のマネージド ID
UMI で新しいサーバーをプロビジョニングするには、New-AzSqlServer コマンドを使用します。
論理サーバー用のマネージド ID を取得するには、Get-AzSqlServer コマンドを使用します。
たとえば、論理サーバーの UMI を取得するには、それぞれの
principalId
を探します。$MI = Get-AzSqlServer -ResourceGroupName "resourcegroupnamehere" -Name "sql-logical-server-name-here" $MI.Identity.UserAssignedIdentities | ConvertTo-Json
Azure SQL Database 論理サーバーの SMI を取得するには:
$MI = Get-AzSqlServer -ResourceGroupName "resourcegroupnamehere" -Name "sql-logical-server-name-here" $MI.Identity.principalId
UMI のサーバー設定を更新するには、Set-AzSqlServer コマンドを使用します。
PowerShell を使用して Azure SQL Managed Instance に接続する
UMI で新しいマネージド インスタンスをプロビジョニングするには、New-AzSqlInstance コマンドを使用します。
マネージド インスタンス用のマネージド ID を取得するには、Get-AzSqlInstance コマンドを使用します。
たとえば、マネージド インスタンスの UMI を取得するには、それぞれの
principalId
を探します。$MI = Get-AzSqlInstance -ResourceGroupName "resourcegroupnamehere" -Name "sql-mi-name-here" $MI.Identity.UserAssignedIdentities | ConvertTo-Json
マネージド インスタンスの SMI を取得するには:
$MI = Get-AzSqlInstance -ResourceGroupName "resourcegroupnamehere" -Name "sql-mi-name-here" $MI.Identity.principalId
UMI のマネージド インスタンス設定を更新するには、Set-AzSqlInstance コマンドを使用します。
REST API を使用してマネージド ID を作成または設定する
サーバーの UMI 設定を更新するには、ユーザー割り当てマネージド ID を使用した論理サーバーの作成またはユーザー割り当てマネージド ID を使用したマネージド インスタンスの作成に関するページで使用されている REST API プロビジョニング スクリプトを使用することもできます。 このガイドのプロビジョニング コマンドを、更新されたユーザー割り当てマネージド ID プロパティを使用して再実行します。
ARM テンプレートを使用してマネージド ID を作成または設定する
サーバー用の UMI 設定を更新するには、ユーザー割り当てマネージド ID を使用した論理サーバーの作成またはユーザー割り当てマネージド ID を使用したマネージド インスタンスの作成に関するページで使用されている Azure Resource Manager テンプレート (ARM テンプレート) を使用することもできます。 このガイドのプロビジョニング コマンドを、更新されたユーザー割り当てマネージド ID プロパティを使用して再実行します。
Note
ARM テンプレートのプロビジョニング コマンドを再実行しても、サーバー管理者またはパスワードの変更、Microsoft Entra 管理者の変更を行うことはできません。
制限事項と既知の問題
- マネージド インスタンスを作成すると、Azure portal の [Microsoft Entra ID] ウィンドウに次の警告が表示されます:
Managed Instance needs permissions to access Microsoft Entra ID. Click here to grant "Read" permissions to your Managed Instance.
。この記事で前述した適切なアクセス許可を UMI に付与済みならば、この警告は無視できます。 - サーバーまたはインスタンスの ID として SMI または UMI を使用した場合、この ID を削除すると、該当するサーバーまたはインスタンスから Microsoft Graph にアクセスできなくなります。 Microsoft Entra 認証およびその他の機能は動作しません。 Microsoft Entra の機能を復元するには、適切なアクセス許可を持つ新しい SMI または UMI をサーバーに割り当てます。
- SMI または UMI を介して Microsoft Graph にアクセスするためのアクセス許可を付与するには、PowerShell を使用する必要があります。 これらのアクセス許可は、Azure portal を使用して付与することはできません。