사용자 할당 관리 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를 참조하세요.
참고 항목
Microsoft Entra ID는 이전에 Azure Active Directory(Azure AD)로 알려졌습니다.
필수 조건
- 사용자 할당 관리 ID로 SQL Managed Instance를 프로비전하려면 다음 작업을 포함하는 Azure RBAC 역할과 함께 SQL Managed Instance 기여자 역할(또는 더 큰 권한이 있는 역할)이 필요합니다.
- Microsoft.ManagedIdentity/userAssignedIdentities/*/assign/action - 예를 들어 관리 ID 연산자에 이 작업이 있습니다.
- 사용자 할당 관리 ID를 만들고 서버 또는 관리되는 인스턴스 ID에 필요한 권한을 할당합니다. 자세한 내용은 사용자 할당 관리 ID 관리 및 Azure SQL에 대한 사용자 할당 관리 ID 권한을 참조하세요.
- 사용자 할당 관리 ID에 PowerShell을 사용하는 경우 Az.Sql 모듈 3.4 이상이 필요합니다.
- 사용자 할당 관리 ID와 함께 Azure CLI를 사용하려면 Azure CLI 2.26.0 이상이 필요합니다.
- 사용자가 할당한 관리 ID 사용과 관련한 제한 사항 및 알려진 문제의 목록은 Azure SQL용 Microsoft Entra의 사용자가 할당한 관리 ID를 참조하세요.
Azure Portal에서 SQL 배포 선택 옵션 페이지로 이동합니다.
Azure Portal에 아직 로그인하지 않은 경우 메시지가 표시되면 로그인합니다.
SQL 관리되는 인스턴스에서 리소스 종류를 단일 인스턴스로 설정된 상태로 두고 만들기를 선택합니다.
프로젝트 세부 정보 및 Managed Instance 세부 정보의 기본 탭에서 필수 정보를 작성합니다. SQL Managed Instance를 프로비저닝하기 위한 최소 정보 세트입니다.
구성 옵션에 대한 자세한 내용은 빠른 시작: Azure SQL Managed Instance 만들기를 참조하세요.
인증 아래에서 기본 설정 인증 모델을 선택합니다. Microsoft Entra 전용 인증을 구성하려는 경우 가이드를 참조하세요.
다음으로, 네트워킹 탭 구성으로 이동하거나 기본 설정을 그대로 둡니다.
보안 탭의 ID에서 ID 구성을 선택합니다.
ID 창 사용자 할당 관리 ID 아래에서 추가를 선택합니다. 원하는 구독을 선택한 다음, 사용자 할당 관리 ID 아래에서 선택한 구독에서 원하는 사용자 할당 관리 ID를 선택합니다. 그런 다음, 선택 단추를 선택합니다.
기본 ID 아래의 이전 단계에서 선택한 동일한 사용자 할당 관리 ID를 선택합니다.
참고 항목
시스템 할당 관리 ID가 기본 ID인 경우 기본 ID 필드는 비어 있어야 합니다.
적용을 선택합니다.
나머지 설정은 기본값으로 둘 수 있습니다. 기타 탭과 설정에 대한 자세한 내용은 빠른 시작: Azure SQL Managed Instance 만들기 문서의 가이드를 따르세요.
설정 구성이 완료되면 검토 + 만들기를 선택하여 계속 진행합니다. 만들기를 선택하여 관리형 인스턴스를 프로비저닝하기 시작합니다.
Azure CLI 명령 az sql mi create
는 새 Azure SQL Managed Instance를 프로비전하는 데 사용됩니다. 아래 명령은 사용자가 할당한 관리 ID를 사용하여 관리형는 인스턴스를 프로비전하고 Microsoft Entra 전용 인증도 사용하도록 설정합니다.
참고 항목
이 스크립트를 사용하려면 먼저 가상 네트워크와 서브넷을 만들어야 합니다.
관리형 인스턴스 SQL 관리자 로그인이 자동으로 생성되고 비밀번호는 임의의 비밀번호로 설정됩니다. 이 프로비전 동안 SQL 인증 연결을 사용할 수 없으므로 SQL 관리자 로그인은 사용되지 않습니다.
Microsoft Entra 관리자는 <AzureADAccount>
에 대해 사용자가 설정한 계정이며 프로비전이 완료되면 인스턴스를 관리하는 데 사용할 수 있습니다.
예시에서 다음 값을 바꿉니다.
<subscriptionId>
: 구독 ID는 Azure Portal에서 확인할 수 있습니다.<ResourceGroupName>
: 관리되는 인스턴스에 대한 리소스 그룹의 이름입니다. 리소스 그룹에는 생성된 가상 네트워크 및 서브넷도 포함되어야 합니다.<managedIdentity>
: 사용자 할당 관리 ID. 기본 ID로도 사용할 수 있습니다.<primaryIdentity>
: 인스턴스 ID로 사용할 기본 ID<AzureADAccount>
: Microsoft Entra 사용자 또는 그룹일 수 있습니다. 예를 들어DummyLogin
<AzureADAccountSID>
: Microsoft Entra ID에 있는 사용자의 개체 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를 참조하세요.
참고 항목
위의 예제에서는 사용자 할당 관리 ID만 있는 관리형 인스턴스를 프로비전합니다. 두 유형의 관리 ID를 인스턴스와 함께 생성하려면 --identity-type
를 UserAssigned,SystemAssigned
로 설정하면 됩니다.
PowerShell 명령 New-AzSqlInstance
는 새 Azure SQL Managed Instance를 프로비저닝하는 데 사용됩니다. 아래 명령은 사용자가 할당한 관리 ID를 사용하여 관리형는 인스턴스를 프로비전하고 Microsoft Entra 전용 인증도 사용하도록 설정합니다.
참고 항목
이 스크립트를 사용하려면 먼저 가상 네트워크와 서브넷을 만들어야 합니다.
관리형 인스턴스 SQL 관리자 로그인이 자동으로 생성되고 비밀번호는 임의의 비밀번호로 설정됩니다. 이 프로비전 동안 SQL 인증 연결을 사용할 수 없으므로 SQL 관리자 로그인은 사용되지 않습니다.
Microsoft 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를 참조하세요.
참고 항목
위의 예제에서는 사용자 할당 관리 ID만 있는 관리형 인스턴스를 프로비전합니다. 두 유형의 관리 ID를 인스턴스와 함께 생성하려면 -IdentityType
를 "UserAssigned,SystemAssigned"
로 설정하면 됩니다.
SQL Managed Instance - 만들기 또는 업데이트 REST API를 사용하여 사용자가 할당한 관리 ID로 관리형 인스턴스를 생성할 수 있습니다.
참고 항목
이 스크립트를 사용하려면 먼저 가상 네트워크와 서브넷을 만들어야 합니다.
아래 스크립트는 사용자가 할당한 관리 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')]"
}
}
}
]
}
관련 콘텐츠
피드백
이 페이지가 도움이 되었나요?