관리 ID를 사용하여 Azure Blob Storage에 Azure Stream Analytics 작업 인증

Azure Blob Storage에 출력하기 위한 관리 ID 인증을 사용하면 Stream Analytics 작업은 연결 문자열을 사용하는 대신 스토리지 계정에 직접 액세스할 수 있습니다. 이 기능을 사용하면 보안이 개선되는 것 이외에도 Azure 내의 VNET(가상 네트워크)에서 스토리지 계정에 데이터를 쓰는 것이 가능해집니다.

이 문서에서는 Azure Portal 및 Azure Resource Manager 배포를 통해 Stream Analytics 작업의 Blob 출력에 대해 관리 ID를 사용하도록 설정하는 방법을 표시합니다.

Azure Portal을 사용하여 Stream Analytics 작업 만들기

먼저 Azure Stream Analytics 작업의 관리 ID를 만듭니다. 

  1. Azure Portal에서 Azure Stream Analytics 작업을 엽니다. 

  2. 왼쪽 탐색 메뉴의 구성 아래에서 관리 ID를 선택합니다. 그런 다음, 시스템 할당 관리 ID 사용 옆에 있는 확인란을 선택하고 저장을 선택합니다.

    System assigned managed identity

  3. Stream Analytics 작업 ID에 대한 서비스 주체는 Microsoft Entra ID에 만들어집니다. 새로 생성된 ID의 수명 주기는 Azure에서 관리합니다. Stream Analytics 작업을 삭제하면 연결된 ID(즉, 서비스 주체)는 Azure에서 자동으로 삭제합니다. 

    구성을 저장하면 서비스 주체의 OID(개체 ID)가 아래와 같이 보안 주체 ID로 나열됩니다.

    Principal ID

    서비스 주체에는 Stream Analytics 작업과 동일한 이름이 사용됩니다. 예를 들어, 작업 이름이 MyASAJob이면 서비스 주체 이름도 MyASAJob입니다. 

Azure Resource Manager 배포

Azure Resource Manager를 사용 하면 Stream Analytics 작업 배포를 완벽하게 자동화할 수 있습니다. Azure PowerShell 또는 Azure CLI를 사용하여 Resource Manager 템플릿을 배포할 수 있습니다. 아래 예제에서는 Azure CLI를 사용합니다.

  1. Resource Manager 템플릿의 리소스 섹션에 다음 속성을 포함하여 관리 ID를 통해 Microsoft.StreamAnalytics/streamingjobs 리소스를 만들 수 있습니다.

    "Identity": {
      "Type": "SystemAssigned",
    },
    

    이 속성을 통해 Azure Resource Manager에서 Stream Analytics 작업에 대한 ID를 만들고 관리합니다. 아래는 관리 ID를 사용하는 Stream Analytics 작업과 관리 ID를 사용하는 Blob 출력 싱크를 배포하는 예제 Resource Manager 템플릿입니다.

    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "resources": [
            {
                "apiVersion": "2017-04-01-preview",
                "name": "MyStreamingJob",
                "location": "[resourceGroup().location]",
                "type": "Microsoft.StreamAnalytics/StreamingJobs",
                "identity": {
                    "type": "systemAssigned"
                },
                "properties": {
                    "sku": {
                        "name": "standard"
                    },
                    "outputs":[
                        {
                            "name":"output",
                            "properties":{
                                "serialization": {
                                    "type": "JSON",
                                    "properties": {
                                        "encoding": "UTF8"
                                    }
                                },
                                "datasource":{
                                    "type":"Microsoft.Storage/Blob",
                                    "properties":{
                                        "storageAccounts": [
                                            { "accountName": "MyStorageAccount" }
                                        ],
                                        "container": "test",
                                        "pathPattern": "segment1/{date}/segment2/{time}",
                                        "dateFormat": "yyyy/MM/dd",
                                        "timeFormat": "HH",
                                        "authenticationMode": "Msi"
                                    }
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
    

    위의 작업은 아래 Azure CLI 명령을 사용하여 리소스 그룹 ExampleGroup에 배포할 수 있습니다.

    az deployment group create --resource-group ExampleGroup -template-file StreamingJob.json
    
  2. 작업을 만든 후 Azure Resource Manager를 사용하여 작업의 전체 정의를 검색할 수 있습니다.

    az resource show --ids /subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/StreamingJobs/{RESOURCE_NAME}
    

    위의 명령은 아래와 같은 응답을 반환합니다.

    {
        "id": "/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP}/providers/Microsoft.StreamAnalytics/streamingjobs/{RESOURCE_NAME}",
        "identity": {
            "principalId": "{PRINCIPAL_ID}",
            "tenantId": "{TENANT_ID}",
            "type": "SystemAssigned",
            "userAssignedIdentities": null
        },
        "kind": null,
        "location": "West US",
        "managedBy": null,
        "name": "{RESOURCE_NAME}",
        "plan": null,
        "properties": {
            "compatibilityLevel": "1.0",
            "createdDate": "2019-07-12T03:11:30.39Z",
            "dataLocale": "en-US",
            "eventsLateArrivalMaxDelayInSeconds": 5,
            "jobId": "{JOB_ID}",
            "jobState": "Created",
            "jobStorageAccount": null,
            "jobType": "Cloud",
            "outputErrorPolicy": "Stop",
            "package": null,
            "provisioningState": "Succeeded",
            "sku": {
                "name": "Standard"
            }
        },
        "resourceGroup": "{RESOURCE_GROUP}",
        "sku": null,
        "tags": null,
        "type": "Microsoft.StreamAnalytics/streamingjobs"
    }
    

    작업 정의의 Microsoft Entra ID 내에서 작업의 관리 ID를 식별하고 다음 단계에서 스토리지 계정에 대한 Stream Analytics 작업 액세스 권한을 부여하는 데 사용되는 principalId를 기록해 둡니다.

  3. 작업이 만들어졌으므로 이 문서의 스토리지 계정에 대한 Stream Analytics 작업 액세스 권한 부여 섹션을 참조하세요.

스토리지 계정에 Stream Analytics 작업 액세스 권한 부여

Stream Analytics 작업에 부여할 수 있는 액세스 수준은 두 가지입니다.

  1. 컨테이너 수준 액세스: 이 옵션은 특정 기존 컨테이너에 대한 작업 액세스 권한을 제공합니다.
  2. 계정 수준 액세스: 이 옵션은 새 컨테이너를 만드는 기능을 포함하여 스토리지 계정에 대한 작업 일반 액세스 권한을 제공합니다.

컨테이너 수준 액세스 옵션은 작업에 필요한 최소 액세스 수준을 부여하기 때문에 사용자를 대신하여 컨테이너를 만드는 작업이 필요하지 않을 경우 이 옵션을 선택해야 합니다. Azure Portal 및 명령줄에 대한 두 옵션이 아래에 설명되어 있습니다.

참고 항목

글로벌 복제 또는 캐싱 대기 시간으로 인해 권한이 취소되거나 부여될 때 지연이 발생할 수 있습니다. 변경 내용은 8분 내에 반영되어야 합니다.

Azure Portal를 통해 액세스 권한 부여

컨테이너 수준 액세스

  1. 스토리지 계정 내 컨테이너의 구성 창으로 이동합니다.

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

  3. 추가>역할 할당 추가를 선택하여 역할 할당 추가 페이지를 엽니다.

  4. 다음 역할을 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

    설정
    역할 Storage Blob 데이터 Contributor
    다음에 대한 액세스 할당 사용자, 그룹 또는 서비스 주체
    멤버 <Stream Analytics 작업의 이름>

    Screenshot that shows Add role assignment page in Azure portal.

계정 수준 액세스

  1. 본인의 저장소 계정으로 이동합니다.

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

  3. 추가>역할 할당 추가를 선택하여 역할 할당 추가 페이지를 엽니다.

  4. 다음 역할을 할당합니다. 세부 단계에 대해서는 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.

    설정
    역할 Storage Blob 데이터 Contributor
    다음에 대한 액세스 할당 사용자, 그룹 또는 서비스 주체
    멤버 <Stream Analytics 작업의 이름>

    Screenshot that shows Add role assignment page in Azure portal.

명령줄을 통해 액세스 권한 부여

컨테이너 수준 액세스

특정 컨테이너에 대한 액세스 권한을 부여하려면 Azure CLI를 사용하여 다음 명령을 실행합니다.

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>/blobServices/default/containers/<container-name>

계정 수준 액세스

전체 계정에 대한 액세스 권한을 부여하려면 Azure CLI를 사용하여 다음 명령을 실행합니다.

az role assignment create --role "Storage Blob Data Contributor" --assignee <principal-id> --scope /subscriptions/<subscription-id>/resourcegroups/<resource-group>/providers/Microsoft.Storage/storageAccounts/<storage-account>

Blob 입력 또는 출력 만들기

관리 ID를 구성했으므로 이제 Stream Analytics 작업에 대한 입력 또는 출력으로 Blob 리소스를 추가할 수 있습니다.

  1. Azure Blob Storage 출력 싱크의 출력 속성 창에서 인증 모드 드롭다운을 선택하고 관리 ID를 선택합니다. 다른 출력 속성에 대한 자세한 정보는 Azure Stream Analytics 출력 이해를 참조하세요. 작업을 마쳤으면 저장을 클릭합니다.

    Configure Azure Blob storage output

VNET 액세스 사용

스토리지 계정의 방화벽 및 가상 네트워크를 구성할 때 필요에 따라 기타 신뢰할 수 있는 Microsoft 서비스의 네트워크 트래픽을 허용할 수 있습니다. Stream Analytics가 관리 ID를 사용하여 인증할 경우, 요청이 신뢰할 수 있는 서비스에서 시작되었다는 증명을 제공합니다. 아래는 이 VNET 액세스 예외를 사용하도록 하는 지침입니다.

  1. 스토리지 계정의 구성 창 내에서 "방화벽 및 가상 네트워크" 창으로 이동합니다.
  2. "신뢰할 수 있는 Microsoft 서비스가 이 스토리지 계정에 액세스하도록 허용" 옵션이 사용하도록 설정되어 있는지 확인합니다.
  3. 사용하도록 설정한 경우 저장을 클릭합니다.

Enable VNET access

관리 ID 제거

Stream Analytics 작업에 대해 생성된 관리 ID는 작업이 삭제된 경우에만 삭제됩니다. 작업을 삭제하지 않고 관리 ID를 삭제할 수는 없습니다. 관리 ID를 더 이상 사용하지 않으려는 경우에는 출력에 대한 인증 방법을 변경할 수 있습니다. 관리 ID는 작업이 삭제될 때까지 계속 존재하며, 관리 ID 인증을 다시 사용하기로 한 경우 사용됩니다.

제한 사항

이 기능의 현재 제한은 다음과 같습니다.

  1. 클래식 Azure Storage 계정

  2. Microsoft Entra ID가 없는 Azure 계정.

  3. 다중 테넌트 액세스는 지원되지 않습니다. 주어진 Stream Analytics 작업에 대해 생성된 서비스 보안 주체는 작업이 만들어진 동일한 Microsoft Entra 테넌트에 상주해야 하며 다른 Microsoft Entra 테넌트에 있는 리소스에 대해 사용할 수 없습니다.

다음 단계