Applies to:
Azure SQL Database
このチュートリアルでは、マネージド ID 認証を使用して BACPAC ファイルAzure SQL Databaseインポートおよびエクスポートする方法について説明します。
マネージド ID 認証を使用すると、インポート要求とエクスポート要求で SQL 管理者の資格情報とストレージ アカウント キーを指定する必要がなくなります。
注
マネージド ID 認証を使用した BACPAC ファイルのインポートとエクスポートは、現在 プレビュー段階です。
概要
マネージド ID 認証を使用してインポートとエクスポートをAzure SQL Databaseすると、次の作業を行うことができます。
- SQL 管理者パスワードとストレージ アカウント キーを削除します。
- Microsoft Entra専用認証を適用します。
- 資格情報の管理とローテーションのオーバーヘッドを削減します。
Important
インポートとエクスポートは、高い特権を持つ操作です。 信頼されたプリンシパルにのみアクセス許可を付与します。
アーキテクチャ
インポートとエクスポートのマネージド ID 認証では、次のアーキテクチャが使用されます。
- インポートおよびエクスポート サービスは、Microsoft が管理するインフラストラクチャで実行されます。
- 論理サーバーに割り当てられたユーザー割り当てマネージド ID が認証に使用されます。
- Azure RBAC は、Azure Storageへのアクセスを制御します。
サポートされているシナリオ
マネージド ID 認証では、次のシナリオがサポートされています。
-
新しいデータベースにインポートします。
-
既存の空のデータベースにインポートします。
-
既存のデータベースからエクスポートします。
マネージド ID 認証では、次のシナリオはサポートされていません。
- テナント間のインポート操作。
- データベース レベルでのみ割り当てられたマネージド ID。
[前提条件]
- Azure サブスクリプション。
- Azure SQL Databaseの論理サーバー。
- BLOB コンテナーを持つAzureストレージ アカウント。
ユーザー割り当てマネージド ID を作成する
1 つ以上のマネージド ID を作成します。
次の認証モデルから選択します。
- SQL アクセスとAzure Storage アクセスの両方の 1 つの ID。
- SQL アクセスとストレージ アクセスの ID を分離します。
最小特権のアクセス許可管理を簡略化するには、個別の ID を使用します。
マネージド ID を作成するには、 Azure portal、Azure CLI、Azure PowerShell、ARM テンプレート、または REST API を使用できます。
エクスポート操作またはインポート操作とストレージ アカウント アクセスには、ユーザー割り当てマネージド ID リソース ID が必要です。 リソース ID の形式は次のとおりです。
/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>
Azure ポータルで既存のユーザー割り当てマネージド ID のリソース ID を確認するには、次の手順に従います。
- Azure ポータルで、ユーザー割り当てマネージド ID に移動します。
-
[設定] で [プロパティ] を選択します。
- [ 要点] で、後の手順で使用する ID の値をコピーします。
ストレージのアクセス許可を付与する
インポート操作とエクスポート操作にマネージド ID 認証を使用するには、ストレージ アカウントにアクセスするユーザー割り当てマネージド ID に、ターゲット アカウントに対する適切なAzure RBAC アクセス許可が必要です。
ストレージ アカウントのアクセスに使用するユーザー割り当てマネージド ID のアクセス許可を付与します。 論理サーバーに割り当てられているマネージド ID とは異なるマネージド ID を指定することも、SQL アクセスとストレージ アクセスの両方に 1 つの ID を使用する場合は同じ ID にすることができます。
注
ロールの割り当てを追加したり、共同管理者を追加したりするには、ユーザーがサブスクリプションの管理者であるか、ユーザー アクセス管理者である必要があります。
ストレージ アカウントAzure RBAC アクセス許可をマネージド ID に付与するには、次の手順に従います。
- Azure ポータルで、Azure ロール割り当て、ユーザー割り当てのマネージド ID を選択します。
- [Azure ロールの割り当て ウィンドウで、+ ロールの割り当ての追加 (プレビュー) を選択して、ロールの割り当ての追加 (プレビュー) ウィンドウを開きます。
-
[スコープ] ドロップダウン リストから [ストレージ] を選択します。
- [ サブスクリプション] で、正しいサブスクリプションが選択されていることを確認します。
- [ リソース] で、エクスポートまたはインポート操作に使用するストレージ アカウントを選択します。
- [ ロール] で、操作に関連するストレージ BLOB ロールを検索します。
- エクスポート操作の場合は、 ストレージ BLOB データ共同作成者ロールを 割り当てます。
- インポート操作の場合は、 ストレージ BLOB データ閲覧者 ロールを割り当てます。
- [ 保存] を 選択してロールの割り当てを保存します。
マネージド ID を論理サーバーに割り当てる
論理サーバー用に作成したユーザー割り当てマネージド ID を論理サーバーに割り当てます。
論理サーバーにマネージド ID を割り当てるには、次の手順に従います。
- Azure ポータルで Azure SQL Database の論理サーバーを開きます。
-
[セキュリティ] で [ID] を選択します。
- [ ユーザー割り当てマネージド ID ] セクションで、[ + 追加] を使用して、[ ユーザー割り当てマネージド ID の選択 ] ウィンドウを開きます。
- 前の手順で作成したマネージド ID を検索して選択し、[ 追加] を選択してサーバーに割り当てます。
- ユーザー割り当てマネージド ID をプライマリ ID として割り当てます。
- ナビゲーション バーの [保存] アイコンを使用して、変更を保存します。
Microsoft Entra管理者を構成するには、次の手順に従います。
- [Azure SQL Database の論理サーバー] ペインの [設定] で、[Microsoft Entra 管理者] を選択します。
-
Set admin を選択して、Microsoft Entra ID ペインを開きます。
- 作成したユーザー割り当てマネージド ID を検索して選択し、Select を使用してMicrosoft Entra管理者として設定します。
- (省略可能)このチェック ボックスを使用して、Support Microsoft Entra認証のみをこのサーバーに対して有効にします論理サーバーに対してMicrosoft Entra認証のみを適用します。 この設定ではすべての SQL 認証がブロックされるため、マネージド ID とその他のMicrosoft Entra プリンシパルのみがサーバーにアクセスできます。
- ナビゲーション バーの [保存] アイコンを使用して、変更を保存します。
注
複数のリソースに論理サーバーへの管理者アクセス権を付与する必要がある場合は、Microsoft Entra グループを作成し、そのグループを管理者として割り当て、そのグループのメンバーとしてユーザー割り当てマネージド ID を割り当てることを検討してください。
データベースのエクスポート
Azure ポータル、Azure CLI、Azure PowerShell、または REST API を使用して、マネージド ID 認証を使用してデータベースをエクスポートできます。
Azure ポータルからマネージド ID 認証を使用してデータベースをエクスポートするには、次の手順に従います。
- Azure ポータルで Azure SQL Database に移動します。
-
[概要] ウィンドウで [エクスポート] を選択し、[データベースのエクスポート] ウィンドウを開きます。
- マネージド ID を使用してストレージ アカウントにアクセスするには、[ ストレージ認証にマネージド ID を使用する ] チェック ボックスをオンにし、ストレージ アカウントへのアクセスが許可されたマネージド ID のリソース ID を指定します。
-
[認証の種類] で、[マネージド ID] を選択します。
-
SQL マネージド ID リソース ID フィールドには、論理サーバーに割り当てられたユーザー割り当てマネージド ID のリソース ID が自動的に設定されます。 そうでない場合は、マネージド ID の作成時に保存したユーザー割り当てマネージド ID のリソース ID を指定します。
マネージド ID 認証を使用してデータベースをエクスポートするには、 new-AzSqlDatabaseExport コマンドレットと -AuthenticationType "ManagedIdentity" パラメーターを使用します。
次の例では、ストレージ アクセスに別のマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをエクスポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
$managedIdentityStorageResourceId = “/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>”
New-AzSqlDatabaseExport -DatabaseName $databaseName -ServerName $serverName -ResourceGroupName $resourceGroupName -StorageKeyType "ManagedIdentity" -StorageKey $managedIdentityStorageResourceId -StorageUri $storageUri -AdministratorLogin $managedIdentitySqlResourceId -AuthenticationType "ManagedIdentity"
次の例では、SQL アクセスとストレージ アクセスの両方に同じマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをエクスポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
New-AzSqlDatabaseExport -DatabaseName $databaseName -ServerName $serverName -ResourceGroupName $resourceGroupName -StorageKeyType "ManagedIdentity" -StorageKey $managedIdentitySqlResourceId -StorageUri $storageUri -AdministratorLogin $managedIdentitySqlResourceId -AuthenticationType "ManagedIdentity"
マネージド ID 認証を使用してデータベースをエクスポートするには、 az sql db export コマンドと --authentication-type "ManagedIdentity" パラメーターを使用します。
次の例では、ストレージ アクセスに別のマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをエクスポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
$managedIdentityStorageResourceId = “/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>”
az sql db export -s $serverName -n $databaseName -g $resourceGroupName --auth-type ManagedIdentity -u $managedIdentitySqlResourceId --storage-key-type ManagedIdentity --storage-key $managedIdentityStorageResourceId --storage-uri $storageUri
次の例では、SQL アクセスとストレージ アクセスの両方に同じマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをエクスポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
az sql db export -s $serverName -n $databaseName -g $resourceGroupName --auth-type ManagedIdentity -u $managedIdentitySqlResourceId --storage-key-type ManagedIdentity --storage-key $managedIdentitySqlResourceId --storage-uri $storageUri
マネージド ID 認証を使用してデータベースをエクスポートするには、 Databases - Export REST API を使用します。
POST https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/export?api-version=2023-08-01
{
"authenticationType": "ManagedIdentity",
"administratorLogin": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<sqlIdentityName>",
"storageKeyType": "ManagedIdentity",
"storageKey": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<storageIdentityName>",
"storageUri": "https://<storageAccount>.blob.core.windows.net/<container>/<fileName>.bacpac"
}
データベースのインポート
Azure ポータル、Azure CLI、Azure PowerShell、または REST API を使用して、マネージド ID 認証を使用してデータベースをインポートできます。
データベースを新しいデータベースとしてインポートすることも、既存の空のデータベースにインポートすることもできます。
Azure ポータルからマネージド ID 認証を使用してデータベースをインポートするには、次の手順に従います。
- Azure ポータルで Azure SQL Database の論理サーバー に移動します。
-
[概要] ウィンドウで [インポート] を選択し、[データベースのインポート] ウィンドウを開きます。
- マネージド ID を使用してストレージ アカウントにアクセスするには、[ ストレージ認証にマネージド ID を使用する ] チェック ボックスをオンにし、ストレージ アカウントへのアクセスが許可されたマネージド ID のリソース ID を指定します。
- [ データベース名] で、ターゲット データベースの名前を指定します。
-
[認証の種類] で、[マネージド ID] を選択します。
-
SQL マネージド ID リソース ID フィールドには、論理サーバーに割り当てられたユーザー割り当てマネージド ID のリソース ID が自動的に設定されます。 そうでない場合は、マネージド ID の作成時に保存したユーザー割り当てマネージド ID のリソース ID を指定します。
マネージド ID 認証を使用してデータベースをインポートするには、 new-AzSqlDatabaseImport コマンドレットと -AuthenticationType "ManagedIdentity" パラメーターを使用します。
次の例では、ストレージ アクセスに別のマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをインポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
$managedIdentityStorageResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
New-AzSqlDatabaseImport -DatabaseName $databaseName -ServerName $serverName -ResourceGroupName $resourceGroupName -StorageKeyType "ManagedIdentity" -StorageKey $managedIdentityStorageResourceId -StorageUri $storageUri -AdministratorLogin $managedIdentitySqlResourceId -AuthenticationType "ManagedIdentity"
次の例では、SQL アクセスとストレージ アクセスの両方に同じマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをインポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
New-AzSqlDatabaseImport -DatabaseName $databaseName -ServerName $serverName -ResourceGroupName $resourceGroupName -StorageKeyType "ManagedIdentity" -StorageKey $managedIdentitySqlResourceId -StorageUri $storageUri -AdministratorLogin $managedIdentitySqlResourceId -AuthenticationType "ManagedIdentity"
マネージド ID 認証を使用してデータベースをインポートするには、 az sql db import コマンドと --auth-type ManagedIdentity パラメーターを使用します。
次の例では、ストレージ アクセスに別のマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをインポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
$managedIdentityStorageResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>”
az sql db import -s $serverName -n $databaseName -g $resourceGroupName --auth-type ManagedIdentity -u $managedIdentitySqlResourceId --storage-key-type ManagedIdentity --storage-key $managedIdentityStorageResourceId --storage-uri $storageUri
次の例では、SQL アクセスとストレージ アクセスの両方に同じマネージド ID を使用しながら、マネージド ID 認証を使用してデータベースをインポートする方法を示します。
$serverName = "<server name>"
$databaseName = "<database name>"
$resourceGroupName = "<resource group name>"
$storageUri = "https://<storageaccount>.blob.core.windows.net/<container name>/<filename>.bacpac"
$managedIdentitySqlResourceId = "/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity name>"
az sql db import -s $serverName -n $databaseName -g $resourceGroupName --auth-type ManagedIdentity -u $managedIdentitySqlResourceId --storage-key-type ManagedIdentity --storage-key $managedIdentitySqlResourceId --storage-uri $storageUri
マネージド ID 認証を使用してデータベースをインポートするには、 Databases - Import REST API を使用します。
POST https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.Sql/servers/<serverName>/databases/<databaseName>/import?api-version=2023-08-01
{
"authenticationType": "ManagedIdentity",
"administratorLogin": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<sqlIdentityName>",
"storageKeyType": "ManagedIdentity",
"storageKey": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroup>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<storageIdentityName>",
"storageUri": "https://<storageAccount>.blob.core.windows.net/<container>/<fileName>.bacpac",
"databaseName": "<targetDatabaseName>",
"edition": "GeneralPurpose",
"serviceObjectiveName": "GP_Gen5_2"
}
一般的な問題のトラブルシューティング
インポートとエクスポートにマネージド ID 認証を使用すると、次の一般的な問題が発生する可能性があります。 各問題のトラブルシューティング手順を試してください。
-
テナントの不一致: 論理サーバー、ユーザー割り当てマネージド ID、ストレージ アカウントが同じMicrosoft Entra テナントにあることを確認します。
-
Microsoft Entra管理者として構成されていない管理 ID: ユーザー割り当てられた管理 ID を論理サーバー上のサーバーレベルのMicrosoft Entra管理者として設定します。
-
ストレージ承認エラー: ストレージ BLOB データ閲覧者 (インポート) または ストレージ BLOB データ共同作成者 (エクスポート) が適切なストレージ スコープで付与されていることを確認します。
-
操作承認エラー: ユーザーが対象の SQL スコープでインポートまたはエクスポート操作を実行するための Azure RBAC アクセス許可を持っていることを確認してください。
-
共有キーによる認証は無効です: インポートまたはエクスポート操作中にAzure ポータルでストレージ アカウントを選択すると、ポータルはサインインしたユーザーの資格情報を使用し、共有キーベースの承認に依存します。 ストレージ アカウントに対して共有キーの承認が無効になっている場合、Azure ポータルからのインポートとエクスポートは使用できません。 Azure CLI、PowerShell、または REST API を使用して、共有キーのアクセスが無効になっている場合のインポート操作とエクスポート操作を行います。
-
アカウント選択ドロップダウンで使用できないアカウント: インポートまたはエクスポート操作にAzure ポータルを使用する場合、サインインしているユーザーがアクセスできるストレージ アカウントのみがストレージ アカウントの選択ドロップダウンに表示されます。 ドロップダウンにストレージ アカウントが表示されない場合は、サインインしているユーザーが少なくともストレージ アカウントへの 閲覧者 ロールアクセス権を持っていることを確認します。
Permissions
インポートまたはエクスポート要求を送信するユーザーは、ターゲット スコープ (データベース、サーバー、リソース グループ、またはサブスクリプション) でインポートまたはエクスポート操作を実行するために必要なAzure RBAC アクセス許可を持っている必要があります。
次の一般的な組み込みロールには、必要なアクセス許可があります。
Microsoft.Sqlインポートおよびエクスポート アクションに必要な次のアクセス許可を含むカスタム ロールを使用することもできます。
Microsoft.Sql/servers/databases/export/action (POST)
Microsoft.Sql/servers/databases/import/action (POST)
Microsoft.Sql/servers/import/action (POST)
Microsoft.Sql/servers/databases/extensions/write (PUT)
制限事項
インポート操作とエクスポート操作にマネージド ID 認証を使用する場合は、次の制限事項を考慮してください。
- テナント間の操作はサポートされていません。
- データベース レベルのマネージド ID は、インポート操作とエクスポート操作ではサポートされていません。
- プレビュー期間中は、一部のAzure ポータル エクスペリエンスが制限される場合があります。
- システム割り当てマネージド ID はサポートされていません。
- Azure ポータルを使用する場合、共有キー アクセスを無効にしたストレージ アカウントへのインポートとエクスポートはサポートされていません。 共有キー アクセスが無効になっているストレージ アカウントにインポートまたはエクスポートするには、Azure CLI、PowerShell、または REST API を使用します。
関連するコンテンツ