Azure Synapse에 대한 관리 ID

이 문서에서는 관리 ID(이전의 관리되는 서비스 ID/MSI)가 무엇이며 Azure Synapse에서 어떻게 작동하는지를 이해하는 데 도움을 줍니다.

참고 항목

Azure Az PowerShell 모듈을 사용하여 Azure와 상호 작용하는 것이 좋습니다. 시작하려면 Azure PowerShell 설치를 참조하세요. Az PowerShell 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 Azure PowerShell을 AzureRM에서 Azure로 마이그레이션을 참조하세요.

개요

관리 ID를 통해 개발자는 자격 증명을 관리할 필요가 없습니다. 관리 ID는 Microsoft Entra 인증을 지원하는 리소스에 연결할 때 서비스 인스턴스의 ID를 제공합니다. 예를 들어 서비스는 관리 ID를 사용하여 데이터 관리자가 자격 증명을 안전하게 저장하거나 스토리지 계정에 액세스할 수 있는 Azure Key Vault와 같은 리소스에 액세스할 수 있습니다. 서비스는 관리 ID를 사용하여 Microsoft Entra 토큰을 가져옵니다.

두 가지 종류의 지원되는 관리 ID가 있습니다.

  • 시스템 할당: 서비스 인스턴스에서 직접 관리 ID를 사용하도록 설정할 수 있습니다. 서비스 생성 중에 시스템 할당 관리 ID를 허용하면 해당 서비스 인스턴스의 수명 주기와 연결된 Microsoft Entra에 ID가 만들어집니다. 의도적으로 해당 Azure 리소스만 이 ID를 사용하여 Microsoft Entra ID에서 토큰을 요청할 수 있습니다. 따라서 리소스가 삭제되면 Azure에서 자동으로 ID를 삭제합니다. Azure Synapse Analytics를 사용하려면 Synapse 작업 영역과 함께 시스템 할당 관리 ID를 만들어야 합니다.
  • 사용자 할당: 관리 ID를 독립 실행형 Azure 리소스로 만들 수도 있습니다. 사용자가 할당한 관리 ID를 만들고 이를 하나 이상의 Synapse 작업 영역 인스턴스에 할당할 수 있습니다. 사용자가 할당한 관리 ID는 이를 사용하는 리소스와 별도로 관리됩니다.

관리 ID는 다음과 같은 이점을 제공합니다.

  • Azure Key Vault에서 자격 증명을 저장합니다. 이 경우 관리 ID는 Azure Key Vault 인증에 사용합니다.
  • Azure Blob Storage, Azure Data Explorer, Azure Data Lake Storage Gen1, Azure Data Lake Storage Gen2, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, REST, Databricks 활동, 웹 활동 등을 비롯한 관리 ID 인증을 사용하여 데이터 저장소 또는 컴퓨터에 액세스합니다. 자세한 내용은 커넥터 및 작업 문서를 확인하세요.
  • 관리 ID는 Azure Key Vault에 저장된 고객 관리 키를 사용하여 메타데이터를 암호화/암호 해독하는 데도 사용되며 이중 암호화를 제공합니다.

시스템 할당 관리 ID

참고 항목

시스템 할당 관리 ID는 이전 버전과의 호환성을 위해 설명서의 다른 곳과 Synapse Studio UI에서 ‘관리 ID’라고도 합니다. 이를 참조할 때 '사용자가 할당한 관리 ID'가 명시적으로 설명됩니다.

시스템 할당 관리 ID 생성

시스템 할당 관리 ID는 다음과 같이 생성됩니다.

  • Azure Portal 또는 PowerShell을 통해 Synapse 작업 영역을 만들 때 관리 ID가 항상 자동으로 생성됩니다.
  • SDK를 통해 작업 영역을 만들 때 생성할 Synapse 작업 영역 개체에서 "Identity = new ManagedIdentity"를 지정하는 경우에만 관리 ID가 생성됩니다. .NET 빠른 시작 - 데이터 팩터리 만들기의 예를 참조하세요.
  • REST API를 통해 Synapse 작업 영역을 만들 때, 요청 본문에 “identity” 섹션을 지정하는 경우에만 관리 ID가 생성됩니다. REST 빠른 시작 - 데이터 팩터리 만들기에서 예제를 참조하세요.

서비스 인스턴스에 다음 관리 ID 검색 지침과 관련된 관리 ID가 없는 것이 확인되면 이를 프로그래밍 방식으로 ID 초기자로 업데이트하여 명시적으로 생성할 수 있습니다.

참고 항목

  • 관리 ID는 수정할 수 없습니다. 이미 관리 ID가 있는 서비스 인스턴스를 업데이트해도 영향은 없으며 관리 ID는 변경되지 않습니다.
  • 팩터리 또는 작업 영역 개체에 “identity” 매개 변수를 지정하지 않거나 REST 요청 본문에 “identity” 섹션을 지정하지 않고 관리 ID가 이미 있는 서비스 인스턴스를 업데이트하면 오류가 발생합니다.
  • 서비스 인스턴스를 삭제하면 연결된 관리 ID가 함께 삭제됩니다.

PowerShell을 사용하여 시스템 할당 관리 ID 생성

New-AzSynapseWorkspace 명령을 호출하면 새로 생성된 “Identity” 필드가 표시됩니다.

PS C:\> $creds = New-Object System.Management.Automation.PSCredential ("ContosoUser", $password)
PS C:\> New-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName> -Location <region> -DefaultDataLakeStorageAccountName <storageAccountName> -DefaultDataLakeStorageFileSystem <fileSystemName> -SqlAdministratorLoginCredential $creds

DefaultDataLakeStorage           : Microsoft.Azure.Commands.Synapse.Models.PSDataLakeStorageAccountDetails
ProvisioningState                : Succeeded
SqlAdministratorLogin            : ContosoUser
VirtualNetworkProfile            :
Identity                         : Microsoft.Azure.Commands.Synapse.Models.PSManagedIdentity
ManagedVirtualNetwork            :
PrivateEndpointConnections       : {}
WorkspaceUID                     : <workspaceUid>
ExtraProperties                  : {[WorkspaceType, Normal], [IsScopeEnabled, False]}
ManagedVirtualNetworkSettings    :
Encryption                       : Microsoft.Azure.Commands.Synapse.Models.PSEncryptionDetails
WorkspaceRepositoryConfiguration :
Tags                             :
TagsTable                        :
Location                         : <region>
Id                               : /subscriptions/<subsID>/resourceGroups/<resourceGroupName>/providers/
                                   Microsoft.Synapse/workspaces/<workspaceName>
Name                             : <workspaceName>
Type                             : Microsoft.Synapse/workspaces

REST API를 사용하여 시스템 할당 관리 ID 생성

참고 항목

작업 영역 개체에서 identity 매개 변수를 지정하거나 REST 요청 본문에 identity 섹션을 제공하지 않고 이미 관리 ID 가 있는 서비스 인스턴스를 업데이트하려고 하면 오류가 발생합니다.

요청 본문의 “identity” 섹션에서 아래 API를 호출합니다.

PATCH https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01

요청 본문: "identity": { "type": "SystemAssigned" }를 추가합니다.

{
    "name": "<workspaceName>",
    "location": "<region>",
    "properties": {},
    "identity": {
        "type": "SystemAssigned"
    }
}

응답: 관리 ID가 자동으로 생성되고 "identity" 섹션이 그에 따라 채워집니다.

{
    "name": "<workspaceName>",
    "tags": {},
    "properties": {
        "provisioningState": "Succeeded",
        "loggingStorageAccountKey": "**********",
        "createTime": "2021-09-26T04:10:01.1135678Z",
        "version": "2018-06-01"
    },
    "identity": {
        "type": "SystemAssigned",
        "principalId": "765ad4ab-XXXX-XXXX-XXXX-51ed985819dc",
        "tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47"
    },
    "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Synapse/workspaces/<workspaceName>",
    "type": "Microsoft.Synapse/workspaces",
    "location": "<region>"
}

Azure Resource Manager 템플릿을 사용하여 시스템 할당 관리 ID 생성

템플릿: "identity": { "type": "SystemAssigned" }를 추가합니다.

{
    "contentVersion": "1.0.0.0",
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "resources": [{
        "name": "<workspaceName>",
        "apiVersion": "2018-06-01",
        "type": "Microsoft.Synapse/workspaces",
        "location": "<region>",
        "identity": {
            "type": "SystemAssigned"
        }
    }]
}

SDK를 사용하여 시스템 할당 관리 ID 생성

Workspace workspace = new Workspace
{
    Identity = new ManagedIdentity
    {
        Type = ResourceIdentityType.SystemAssigned
    },
    DefaultDataLakeStorage = new DataLakeStorageAccountDetails
    {
        AccountUrl = <defaultDataLakeStorageAccountUrl>,
        Filesystem = <DefaultDataLakeStorageFilesystem>
    },
    SqlAdministratorLogin = <SqlAdministratorLoginCredentialUserName>
    SqlAdministratorLoginPassword = <SqlAdministratorLoginCredentialPassword>,
    Location = <region>
};
client.Workspaces.CreateOrUpdate(resourceGroupName, workspaceName, workspace);

시스템이 할당한 관리 ID 검색

Azure Portal에서 또는 프로그래밍 방식으로 관리 ID를 검색할 수 있습니다. 다음 섹션에서는 몇 가지 샘플을 보여 줍니다.

관리 ID가 표시되지 않으면 서비스 인스턴스를 업데이트하여 관리 ID를 생성합니다.

Azure Portal에서 시스템 할당 관리 ID 검색

Azure Portal에서 관리 ID 정보(> Synapse 작업 영역 -> 속성)를 찾을 수 있습니다.

Synapse 작업 영역에 대한 시스템 관리 ID 개체 ID가 있는 Azure Portal을 표시합니다.

  • 관리 ID 개체 ID

관리 ID 정보는 Azure Blob, Azure Data Lake Storage, Azure Key Vault 등의 관리 ID 인증을 지원하는 연결된 서비스를 만들 때도 표시됩니다.

권한을 부여하려면 다음 단계를 수행합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

  1. 액세스 제어(IAM) 를 선택합니다.

  2. 추가>역할 할당 추가를 선택합니다.

    역할 할당 추가 메뉴가 열려 있는 액세스 제어(IAM) 페이지를 보여 주는 스크린샷

  3. 멤버 탭에서 관리 ID를 선택한 다음, 멤버 선택을 선택합니다.

  4. Azure 구독을 선택합니다.

  5. 시스템 할당 관리 ID에서 Synapse 작업 영역을 선택한 다음, 작업 영역을 선택합니다. 개체 ID 또는 작업 영역 이름(관리 ID 이름으로)을 사용하여 이 ID를 찾을 수도 있습니다. 관리 ID의 애플리케이션 ID를 가져오려면 PowerShell을 사용합니다.

  6. 검토 + 할당 탭에서 검토 + 할당을 선택하여 역할을 할당합니다.

PowerShell을 사용하여 시스템 할당 관리 ID 검색

다음과 같이 특정 서비스 인스턴스를 가져오는 경우 관리 ID의 보안 주체 ID 및 테넌트 ID가 반환됩니다. Principalid를 사용하여 액세스 권한을 부여합니다.

PS C:\> (Get-AzSynapseWorkspace -ResourceGroupName <resourceGroupName> -Name <workspaceName>).Identity

IdentityType   PrincipalId                          TenantId                            
------------   -----------                          --------                            
SystemAssigned cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05 72f988bf-XXXX-XXXX-XXXX-2d7cd011db47

위의 주체 ID를 복사한 다음 주체 ID를 매개 변수로 사용하여 아래의 Microsoft Entra ID 명령을 실행하여 애플리케이션 ID를 가져올 수 있습니다.

PS C:\> Get-AzADServicePrincipal -ObjectId cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05

ServicePrincipalNames : {76f668b3-XXXX-XXXX-XXXX-1b3348c75e02, https://identity.azure.net/P86P8g6nt1QxfPJx22om8MOooMf/Ag0Qf/nnREppHkU=}
ApplicationId         : 76f668b3-XXXX-XXXX-XXXX-1b3348c75e02
DisplayName           : <workspaceName>
Id                    : cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05
Type                  : ServicePrincipal

REST API를 사용하여 관리 ID 검색

다음과 같이 특정 서비스 인스턴스를 가져오는 경우 관리 ID의 보안 주체 ID 및 테넌트 ID가 반환됩니다.

요청에서 아래 API를 호출합니다.

GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}?api-version=2018-06-01

응답: 아래 예제에서와 같이 응답을 받게 됩니다. "ID" 섹션이 그에 따라 채워집니다.

{
  "properties": {
    "defaultDataLakeStorage": {
      "accountUrl": "https://exampledatalakeaccount.dfs.core.windows.net",
      "filesystem": "examplefilesystem"
    },
    "encryption": {
      "doubleEncryptionEnabled": false
    },
    "provisioningState": "Succeeded",
    "connectivityEndpoints": {
      "web": "https://web.azuresynapse.net?workspace=%2fsubscriptions%2{subscriptionId}%2fresourceGroups%2f{resourceGroupName}%2fproviders%2fMicrosoft.Synapse%2fworkspaces%2f{workspaceName}",
      "dev": "https://{workspaceName}.dev.azuresynapse.net",
      "sqlOnDemand": "{workspaceName}-ondemand.sql.azuresynapse.net",
      "sql": "{workspaceName}.sql.azuresynapse.net"
    },
    "managedResourceGroupName": "synapseworkspace-managedrg-f77f7cf2-XXXX-XXXX-XXXX-c4cb7ac3cf4f",
    "sqlAdministratorLogin": "sqladminuser",
    "privateEndpointConnections": [],
    "workspaceUID": "e56f5773-XXXX-XXXX-XXXX-a0dc107af9ea",
    "extraProperties": {
      "WorkspaceType": "Normal",
      "IsScopeEnabled": false
    },
    "publicNetworkAccess": "Enabled",
    "cspWorkspaceAdminProperties": {
      "initialWorkspaceAdminObjectId": "3746a407-XXXX-XXXX-XXXX-842b6cf1fbcc"
    },
    "trustedServiceBypassEnabled": false
  },
  "type": "Microsoft.Synapse/workspaces",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Synapse/workspaces/{workspaceName}",
  "location": "eastus",
  "name": "{workspaceName}",
  "identity": {
    "type": "SystemAssigned",
    "tenantId": "72f988bf-XXXX-XXXX-XXXX-2d7cd011db47",
    "principalId": "cadadb30-XXXX-XXXX-XXXX-ef3500e2ff05"
  },
  "tags": {}
}

ARM 템플릿에서 관리 ID를 검색하려면 ARM JSON에 출력 섹션을 추가합니다.

{
    "outputs":{
        "managedIdentityObjectId":{
            "type":"string",
            "value":"[reference(resourceId('Microsoft.Synapse/workspaces', parameters('<workspaceName>')), '2018-06-01', 'Full').identity.principalId]"
        }
    }
}

시스템 할당 관리 ID를 사용하여 Azure Synapse Spark Notebook 실행

세션 구성 메뉴에서 관리 ID로 실행을 사용하도록 설정하여 시스템 할당 관리 ID(또는 작업 영역 관리 ID)를 사용하여 Synapse Spark Notebook을 쉽게 실행할 수 있습니다. 작업 영역 관리 ID를 사용하여 Spark Notebook을 실행하려면 사용자에게 다음 RBAC 역할이 있어야 합니다.

  • 작업 영역 또는 선택한 Spark 풀의 Synapse Compute 연산자
  • 작업 영역 관리 ID의 Synapse 자격 증명 사용자

synapse-run-as-msi-1

synapse-run-as-msi-2

synapse-run-as-msi-3

참고 항목

Synapse Notebook 및 Spark 작업 정의는 연결된 서비스와 mssparkutils API를 통해 시스템이 할당한 관리 ID의 사용만 지원합니다. MSAL 및 기타 인증 라이브러리는 시스템이 할당한 관리 ID를 사용할 수 없습니다. 대신 서비스 주체를 생성하고 Key Vault에 자격 증명을 저장할 수 있습니다.

사용자 할당 관리 ID

Microsoft Entra ID에서 사용자 할당 관리 ID를 만들기, 삭제, 관리할 수 있습니다. 자세한 내용은 Azure Portal에서 사용자 할당 관리 ID 만들기, 나열, 삭제 또는 역할 할당을 참조하세요.

사용자 할당 관리 ID를 사용하려면 먼저 UAMI에 대한 서비스 인스턴스에서 자격 증명을 만들어야 합니다.

참고 항목

사용자 할당 관리 ID는 현재 Synapse Notebooks 및 Spark 작업 정의에서 지원되지 않습니다.

다음 단계

관리 ID를 사용하는 시기 및 방법을 소개하는 다음 항목을 참조하세요.

Azure Synapse 관리 ID의 기준이 되는 Azure 리소스의 관리 ID에 대한 자세한 내용은 Azure 리소스에 대한 관리 ID 개요를 참조하세요.