ユーザー割り当てマネージド ID を使用して Azure SQL Managed Instance を作成する
- [アーティクル]
適用対象: Azure SQL Managed Instance
この攻略ガイドでは、Microsoft Entra ID (旧称 Azure Active Directory) のユーザー割り当てマネージド ID を使用して Azure SQL Managed Instance を作成する手順の概要を説明します。 Azure SQL Database のサーバー ID にユーザー割り当てマネージド ID を使用する利点の詳細については、「Azure SQL 用の Microsoft Entra でのマネージド ID」を参照してください。
Note
Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。
前提条件
- ユーザー割り当てマネージド ID で SQL マネージド インスタンスをプロビジョニングするには、SQL Managed Instance 共同作成者 ロール (またはより強力なアクセス許可を持つロール) と、以下のアクションを含む Azure RBAC のロールが必要です:
- Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action - たとえば、マネージド ID オペレーターにはこのアクションがあります。
- ユーザー割り当てマネージド ID を作成し、サーバーまたはマネージド インスタンス ID として必要なアクセス許可を割り当てます。 詳細については、「ユーザー割り当てマネージド ID を管理する」と「ユーザー割り当てマネージド ID の Azure SQL へのアクセス許可」に関する記事を参照してください。
- ユーザー割り当てマネージド ID に PowerShell を使用する場合は、Az.Sql モジュール 3.4以上が必要です。
- Azure CLI をユーザー割り当てマネージド ID で使用するには、Azure CLI 2.26.0以上が必要です。
- ユーザー割り当てマネージド ID の使用に関する制限事項と既知の問題の一覧については、「Azure SQL 用の Microsoft Entra でのマネージド ID」を参照してください。
Azure portal の [SQL デプロイ オプションの選択] ページを参照します。
まだ Azure portal にサインインしていない場合は、求められたらサインインします。
[SQL マネージド インスタンス] で、 [リソースの種類] を [単一インスタンス] に設定し、 [作成] を選択します。
[基本] タブの [プロジェクトの詳細] と [マネージド ドインスタンスの詳細] に必須情報を記入します。 これは、SQL Managed Instance をプロビジョニングするために必要な最小限の情報セットです。
構成オプションの詳細については、クイック スタート: Azure SQL Managed Instance の作成に関するページを参照してください。
[認証] で適切な認証モデルを選択します。 Microsoft Entra のみの認証を構成する場合は、「ガイド」を参照してください。
次に、[ネットワーク] タブの構成を確認するか、既定の設定のままにします。
[セキュリティ] タブの [ID] で、[ID の構成] を選択します。
[ID]ウィンドウで、[ユーザー割り当てマネージド ID]の[追加]を選択します。 目的のサブスクリプションを選択し、[ユーザー割り当てマネージド ID] で、選択したサブスクリプションから目的のユーザー割り当てマネージド ID を選択します。 次に [選択] ボタンを選択します。
[プライマリ ID] で、前の手順で選択したのと同じユーザー割り当てマネージド ID を選択します。
Note
システム割り当てマネージド ID がプライマリ ID の場合は、[プライマリ ID] フィールドが空である必要があります。
[適用] を選択します
残りの設定は既定値のまま使用できます。 他のタブや設定の詳細については、クイック スタート: Azure SQL Managed Instance の作成に関する記事を参照してください。
設定の構成が完了したら、[確認と作成] を選択して続行します。 [作成] を選択して、マネージド インスタンスのプロビジョニングを開始します。
Azure CLI コマンド az sql mi create
は、新しい Azure SQL Managed Instance をプロビジョニングするために使用されます。 次のコマンドでは、ユーザー割り当てマネージド ID を持つマネージド インスタンスをプロビジョニングし、Microsoft Entra のみの認証を有効にします。
Note
このスクリプトでは、前提条件として仮想ネットワークとサブネットを作成する必要があります。
マネージド インスタンス SQL 管理者ログインが自動的に作成され、パスワードはランダムなパスワードに設定されます。 このプロビジョニングでは SQL 認証接続が無効になるため、SQL 管理者ログインは使用されません。
AMicrosoft Entra は、<AzureADAccount>
に設定したアカウントになり、プロビジョニングの完了時にインスタンスを管理するために使用できます。
この例では次の値を置き換えます。
<subscriptionId>
: サブスクリプション ID は Azure portal で確認できます<ResourceGroupName>
: マネージド インスタンスのリソース グループの名前。 リソース グループには、作成された仮想ネットワークとサブネットも含める必要があります<managedIdentity>
: ユーザー割り当てマネージド ID。 プライマリ ID として使用することもできます。<primaryIdentity>
: インスタンス ID として使用するプライマリ ID<AzureADAccount>
: Microsoft Entra ユーザーまたはグループを指定できます。 たとえば、DummyLogin
のように指定します。<AzureADAccountSID>
: ユーザーの Microsoft Entra オブジェクトの ID。<managedinstancename>
: 作成するマネージド インスタンスの名前を指定しますsubnet
パラメーターは、<subscriptionId>
、<ResourceGroupName>
、<VNetName>
、および<SubnetName>
を使用して更新する必要があります。
# Define variables for resources
subscriptionId="<subscriptionId>"
resourceGroupName="<ResourceGroupName>"
managedIdentity="<managedIdentity>"
primaryIdentity="<primaryIdentity>"
AzureADAccount="<AzureADAccount>"
AzureADAccountSID="<AzureADAccountSID>"
VNetName="<VNetName>"
SubnetName="<SubnetName>"
managedinstancename="<managedinstancename>"
# Create a managed instance with a user-assigned managed identity
az sql mi create \
--assign-identity \
--identity-type UserAssigned \
--user-assigned-identity-id "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$managedIdentity" \
--primary-user-assigned-identity-id "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$primaryIdentity" \
--enable-ad-only-auth \
--external-admin-principal-type User \
--external-admin-name $AzureADAccount \
--external-admin-sid $AzureADAccountSID \
-g $resourceGroupName \
-n $managedinstancename \
--subnet "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Network/virtualNetworks/$VNetName/subnets/$SubnetName"
詳細については、「az sql mi create」を参照してください。
Note
上記の例では、ユーザー割り当てマネージド ID のみを持つマネージド インスタンスをプロビジョニングします。 両方の種類のマネージド ID をインスタンスで作成する場合は、--identity-type
を UserAssigned,SystemAssigned
に設定できます。
PowerShell コマンド New-AzSqlInstance
は、新しい Azure SQL Managed Instance をプロビジョニングするために使用されます。 次のコマンドでは、ユーザー割り当てマネージド ID を持つマネージド インスタンスをプロビジョニングし、Microsoft Entra のみの認証を有効にします。
Note
このスクリプトでは、前提条件として仮想ネットワークとサブネットを作成する必要があります。
マネージド インスタンス SQL 管理者ログインが自動的に作成され、パスワードはランダムなパスワードに設定されます。 このプロビジョニングでは SQL 認証接続が無効になるため、SQL 管理者ログインは使用されません。
AMicrosoft Entra は、<AzureADAccount>
に設定したアカウントになり、プロビジョニングの完了時にインスタンスを管理するために使用できます。
この例では次の値を置き換えます。
<managedinstancename>
: 作成するマネージド インスタンスの名前を指定します<ResourceGroupName>
: マネージド インスタンスのリソース グループの名前。 リソース グループには、作成された仮想ネットワークとサブネットも含める必要があります<subscriptionId>
: サブスクリプション ID は Azure portal で確認できます<managedIdentity>
: ユーザー割り当てマネージド ID。 プライマリ ID として使用することもできます。<primaryIdentity>
: インスタンス ID として使用するプライマリ ID<Location>
: マネージド インスタンスの場所 (West US
、Central US
など)<AzureADAccount>
: Microsoft Entra ユーザーまたはグループを指定できます。 たとえば、DummyLogin
のように指定します。SubnetId
パラメーターは、<subscriptionId>
、<ResourceGroupName>
、<VNetName>
、および<SubnetName>
を使用して更新する必要があります。
$instanceName = @{
Name = "<managedinstancename>"
ResourceGroupName = "<ResourceGroupName>"
AssignIdentity = $true
IdentityType = "UserAssigned"
UserAssignedIdentityId = "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>"
PrimaryUserAssignedIdentityId = "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<primaryIdentity>"
ExternalAdminName = "<AzureADAccount>"
EnableActiveDirectoryOnlyAuthentication = $true
Location = "<Location>"
SubnetId = "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Network/virtualNetworks/<VNetName>/subnets/<SubnetName>"
LicenseType = "LicenseIncluded"
StorageSizeInGB = 1024
VCore = 16
Edition = "GeneralPurpose"
ComputeGeneration = "Gen5"
}
New-AzSqlInstance @instanceName
詳細については、「New-AzSqlInstance」をご覧ください。
Note
上記の例では、ユーザー割り当てマネージド ID のみを持つマネージド インスタンスをプロビジョニングします。 両方の種類のマネージド ID をインスタンスで作成する場合は、-IdentityType
を "UserAssigned,SystemAssigned"
に設定できます。
SQL Managed Instances - Create Or Updateの REST API を使用して、ユーザー割り当てマネージド ID を持つマネージド インスタンスを作成できます。
Note
このスクリプトでは、前提条件として仮想ネットワークとサブネットを作成する必要があります。
次のスクリプトでは、ユーザー割り当てマネージド ID を持つマネージド インスタンスをプロビジョニングし、Microsoft Entra 管理者を <AzureADAccount>
として設定して、Microsoft Entra 専用認証を有効にします。 インスタンス SQL 管理者ログインも自動的に作成され、パスワードはランダムなパスワードに設定されます。 このプロビジョニングでは SQL 認証接続が無効になるため、SQL 管理者ログインは使用されません。
プロビジョニングが完了したら、Microsoft Entra 管理者 <AzureADAccount>
を使用してインスタンスを管理できます。
この例では次の値を置き換えます。
<tenantId>
: Azure portal に移動し、Microsoft Entra ID リソースに移動すると確認できます。 [概要] ペインに [テナント ID] が表示されます<subscriptionId>
: サブスクリプション ID は Azure portal で確認できます<instanceName>
: 一意のマネージド インスタンス名を使用します<ResourceGroupName>
: 論理サーバーのリソース グループの名前<AzureADAccount>
: Microsoft Entra ユーザーまたはグループを指定できます。 たとえば、DummyLogin
のように指定します。<Location>
: サーバーの場所 (westus2
、centralus
など)<objectId>
: Azure portal に移動し、Microsoft Entra ID リソースに移動すると確認できます。 [ユーザー] ペインで、Microsoft Entra ユーザーを検索し、オブジェクト IDを特定しますsubnetId
パラメーターは、<ResourceGroupName>
、Subscription ID
、<VNetName>
、および<SubnetName>
を使用して更新する必要があります。
Import-Module Azure
Import-Module MSAL.PS
$tenantId = '<tenantId>'
$clientId = '1950a258-227b-4e31-a9cf-717495945fc2' # Static Microsoft client ID used for getting a token
$subscriptionId = '<subscriptionId>'
$uri = "urn:ietf:wg:oauth:2.0:oob"
$instanceName = "<instanceName>"
$resourceGroupName = "<ResourceGroupName>"
$scopes ="https://management.core.windows.net/.default"
Login-AzAccount -tenantId $tenantId
# Login as an Azure AD user with permission to provision a managed instance
$result = Get-MsalToken -RedirectUri $uri -ClientId $clientId -TenantId $tenantId -Scopes $scopes
$authHeader = @{
'Content-Type'='application\json; '
'Authorization'=$result.CreateAuthorizationHeader()
}
$body = '{
"name": "<instanceName>", "type": "Microsoft.Sql/managedInstances", "identity": {"type" : "UserAssigned", "UserAssignedIdentities" : {"/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>" : {}}},"location": "<Location>", "sku": {"name": "GP_Gen5", "tier": "GeneralPurpose", "family":"Gen5","capacity": 8},
"properties": { "PrimaryUserAssignedIdentityId":"/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<primaryIdentity>","administrators":{ "login":"<AzureADAccount>", "sid":"<objectId>", "tenantId":"<tenantId>", "principalType":"User", "azureADOnlyAuthentication":true },
"subnetId": "/subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Network/virtualNetworks/<VNetName>/subnets/<SubnetName>",
"licenseType": "LicenseIncluded", "vCores": 8, "storageSizeInGB": 2048, "collation": "SQL_Latin1_General_CP1_CI_AS", "proxyOverride": "Proxy", "timezoneId": "UTC", "privateEndpointConnections": [], "storageAccountType": "GRS", "zoneRedundant": false
}
}'
# To provision the instance, execute the `PUT` command
Invoke-RestMethod -Uri https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/managedInstances/$instanceName/?api-version=2020-11-01-preview -Method PUT -Headers $authHeader -Body $body -ContentType "application/json"
結果を確認するには、次のように GET
コマンドを実行します。
Invoke-RestMethod -Uri https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/managedInstances/$instanceName/?api-version=2020-11-01-preview -Method GET -Headers $authHeader | Format-List
Microsoft Entra 管理者、ユーザー割り当てマネージド ID、および Microsoft Entra のみの認証で構成された新しい仮想ネットワーク、サブネット、および新しいマネージド インスタンスをプロビジョニングするには、次のテンプレートを使用します。
Azure portal のカスタム デプロイを使用し、エディターで独自のテンプレートを作成します。 次に、例に貼り付けたら、構成を保存します。
ユーザー割り当てマネージド ID のリソース ID を取得するには、Azure portal でマネージド ID を検索します。 マネージド ID を見つけて、[プロパティ] に移動します。 UMI リソース ID の例は /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
のようになります。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.1",
"parameters": {
"managedInstanceName": {
"type": "String",
"metadata": {
"description": "Enter managed instance name."
}
},
"aad_admin_name": {
"type": "String",
"metadata": {
"description": "The name of the Azure AD admin for the SQL managed instance."
}
},
"aad_admin_objectid": {
"type": "String",
"metadata": {
"description": "The Object ID of the Azure AD admin."
}
},
"aad_admin_tenantid": {
"type": "String",
"defaultValue": "[subscription().tenantId]",
"metadata": {
"description": "The Tenant ID of the Azure Active Directory"
}
},
"aad_admin_type": {
"defaultValue": "User",
"allowedValues": [
"User",
"Group",
"Application"
],
"type": "String"
},
"aad_only_auth": {
"defaultValue": true,
"type": "Bool"
},
"user_identity_resource_id": {
"defaultValue": "",
"type": "String",
"metadata": {
"description": "The Resource ID of the user-assigned managed identity, in the form of /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>."
}
},
"location": {
"defaultValue": "[resourceGroup().location]",
"type": "String",
"metadata": {
"description": "Enter location. If you leave this field blank resource group location would be used."
}
},
"virtualNetworkName": {
"type": "String",
"defaultValue": "SQLMI-VNET",
"metadata": {
"description": "Enter virtual network name. If you leave this field blank name will be created by the template."
}
},
"addressPrefix": {
"defaultValue": "10.0.0.0/16",
"type": "String",
"metadata": {
"description": "Enter virtual network address prefix."
}
},
"subnetName": {
"type": "String",
"defaultValue": "ManagedInstances",
"metadata": {
"description": "Enter subnet name. If you leave this field blank name will be created by the template."
}
},
"subnetPrefix": {
"defaultValue": "10.0.0.0/24",
"type": "String",
"metadata": {
"description": "Enter subnet address prefix."
}
},
"skuName": {
"defaultValue": "GP_Gen5",
"allowedValues": [
"GP_Gen5",
"BC_Gen5"
],
"type": "String",
"metadata": {
"description": "Enter sku name."
}
},
"vCores": {
"defaultValue": 16,
"allowedValues": [
8,
16,
24,
32,
40,
64,
80
],
"type": "Int",
"metadata": {
"description": "Enter number of vCores."
}
},
"storageSizeInGB": {
"defaultValue": 256,
"minValue": 32,
"maxValue": 8192,
"type": "Int",
"metadata": {
"description": "Enter storage size."
}
},
"licenseType": {
"defaultValue": "LicenseIncluded",
"allowedValues": [
"BasePrice",
"LicenseIncluded"
],
"type": "String",
"metadata": {
"description": "Enter license type."
}
}
},
"variables": {
"networkSecurityGroupName": "[concat('SQLMI-', parameters('managedInstanceName'), '-NSG')]",
"routeTableName": "[concat('SQLMI-', parameters('managedInstanceName'), '-Route-Table')]"
},
"resources": [
{
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2020-06-01",
"name": "[variables('networkSecurityGroupName')]",
"location": "[parameters('location')]",
"properties": {
"securityRules": [
{
"name": "allow_tds_inbound",
"properties": {
"description": "Allow access to data",
"protocol": "Tcp",
"sourcePortRange": "*",
"destinationPortRange": "1433",
"sourceAddressPrefix": "VirtualNetwork",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 1000,
"direction": "Inbound"
}
},
{
"name": "allow_redirect_inbound",
"properties": {
"description": "Allow inbound redirect traffic to Managed Instance inside the virtual network",
"protocol": "Tcp",
"sourcePortRange": "*",
"destinationPortRange": "11000-11999",
"sourceAddressPrefix": "VirtualNetwork",
"destinationAddressPrefix": "*",
"access": "Allow",
"priority": 1100,
"direction": "Inbound"
}
},
{
"name": "deny_all_inbound",
"properties": {
"description": "Deny all other inbound traffic",
"protocol": "*",
"sourcePortRange": "*",
"destinationPortRange": "*",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*",
"access": "Deny",
"priority": 4096,
"direction": "Inbound"
}
},
{
"name": "deny_all_outbound",
"properties": {
"description": "Deny all other outbound traffic",
"protocol": "*",
"sourcePortRange": "*",
"destinationPortRange": "*",
"sourceAddressPrefix": "*",
"destinationAddressPrefix": "*",
"access": "Deny",
"priority": 4096,
"direction": "Outbound"
}
}
]
}
},
{
"type": "Microsoft.Network/routeTables",
"apiVersion": "2020-06-01",
"name": "[variables('routeTableName')]",
"location": "[parameters('location')]",
"properties": {
"disableBgpRoutePropagation": false
}
},
{
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2020-06-01",
"name": "[parameters('virtualNetworkName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[variables('routeTableName')]",
"[variables('networkSecurityGroupName')]"
],
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('addressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetPrefix')]",
"routeTable": {
"id": "[resourceId('Microsoft.Network/routeTables', variables('routeTableName'))]"
},
"networkSecurityGroup": {
"id": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('networkSecurityGroupName'))]"
},
"delegations": [
{
"name": "miDelegation",
"properties": {
"serviceName": "Microsoft.Sql/managedInstances"
}
}
]
}
}
]
}
},
{
"type": "Microsoft.Sql/managedInstances",
"apiVersion": "2020-11-01-preview",
"name": "[parameters('managedInstanceName')]",
"location": "[parameters('location')]",
"dependsOn": [
"[parameters('virtualNetworkName')]"
],
"sku": {
"name": "[parameters('skuName')]"
},
"identity": {
"type": "UserAssigned",
"UserAssignedIdentities": {
"[parameters('user_identity_resource_id')]": {}
}
},
"properties": {
"subnetId": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('virtualNetworkName'), parameters('subnetName'))]",
"storageSizeInGB": "[parameters('storageSizeInGB')]",
"vCores": "[parameters('vCores')]",
"licenseType": "[parameters('licenseType')]",
"PrimaryUserAssignedIdentityId": "[parameters('user_identity_resource_id')]",
"administrators": {
"login": "[parameters('aad_admin_name')]",
"sid": "[parameters('aad_admin_objectid')]",
"tenantId": "[parameters('aad_admin_tenantid')]",
"principalType": "[parameters('aad_admin_type')]",
"azureADOnlyAuthentication": "[parameters('aad_only_auth')]"
}
}
}
]
}
関連するコンテンツ
フィードバック
このページはお役に立ちましたか?