Azure SQL 用の Microsoft Entra でのマネージド ID

適用対象:Azure SQL データベース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.AllGroupMember.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 を検索します。

Screenshot of enterprise application settings in the Azure portal.

UMI を選択し、[セキュリティ][アクセス許可] 設定に移動します。

Screenshot of user-assigned managed identity permissions.

論理サーバーまたはマネージド インスタンス用のマネージド ID を取得または設定する

UMI を使用してサーバーを作成するには、ガイド「ユーザー割り当てマネージド ID を使用して Azure SQL 論理サーバーを作成する」を参照してください。

Azure SQL データベース論理サーバーの SMI を取得する

Azure portal には、Azure SQL Database 論理サーバーの [プロパティ] メニューにシステム割り当てマネージド ID (SMI) ID が表示されます。

Screenshot of the Azure portal page for an Azure SQL Database logical server. In the Properties menu, the System Assigned Managed Identity is highlighted.

  • 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 を設定するには、次のようにします。

  1. SQL サーバーまたは SQL マネージド インスタンス リソースに移動します。
  2. [セキュリティ] で、[ID] 設定を選択します。
  3. [ユーザー割り当てマネージド ID] で、[追加] を選択します。
  4. サブスクリプションを選択してから、[プライマリ ID] として、そのサブスクリプション用のマネージド ID を選択します。 次に、[選択] ボタンを選択します。

Azure portal screenshot of selecting a user-assigned managed identity when configuring an existing server identity.

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 を使用して付与することはできません。