Application Insights에 대한 Microsoft Entra 인증

Application Insights는 이제 Microsoft Entra 인증을 지원합니다. Microsoft Entra ID를 사용하여 Application Insights 리소스에 인증된 원격 분석만 수집되도록 할 수 있습니다.

다양한 인증 시스템을 사용하면 복잡해질 수 있으며, 대규모로 자격 증명을 관리하기 어렵기 때문에 위험을 초래할 수 있습니다. 이제 로컬 인증을 옵트아웃하고 관리 ID를 사용하여 독점적으로 인증된 원격 분석과 Microsoft Entra ID만 리소스에 수집되도록 선택할 수 있습니다. 이 기능은 중요한 운영(경고자동 스케일링) 및 비즈니스 결정을 내리는 데 사용되는 원격 분석의 보안과 안정성을 강화하기 위한 단계입니다.

참고 항목

이 문서에서는 Microsoft Entra ID 기반 인증을 사용하여 Application Insights로 데이터를 수집하는 방법을 다룹니다. Application Insights 내에서 데이터 쿼리에 대한 자세한 내용은 인증을 사용하여 Application Insights 쿼리를 참조하세요.

필수 조건

다음은 Microsoft Entra 인증 수집을 사용하도록 설정하기 위한 예비 단계입니다. 그러려면 다음 작업을 수행해야 합니다.

지원되지 않는 시나리오

다음 SDK(소프트웨어 개발 키트) 및 기능은 Microsoft Entra 인증 수집과 함께 사용할 수 없습니다.

Microsoft Entra ID 기반 인증 구성 및 사용

  1. ID가 아직 없는 경우 관리 ID 또는 서비스 주체를 사용하여 만듭니다.

    • 관리 ID를 사용하는 것이 좋습니다.

      Azure 서비스(Virtual Machines 또는 App Service)용 관리 ID를 설정합니다.

    • 서비스 주체를 사용하지 않는 것이 좋습니다.

      리소스에 액세스할 수 있는 Microsoft Entra 애플리케이션 및 서비스 주체 생성 방법에 대한 자세한 내용은 서비스 주체 생성을 참조하세요.

  2. Azure 서비스에 역할을 할당합니다.

    Azure 역할 할당 단계에 따라 대상 Application Insights 리소스의 Monitoring Metrics Publisher 역할을 원격 분석이 전송되는 Azure 리소스에 추가합니다.

    참고 항목

    모니터링 메트릭 게시자 역할은 "메트릭"이라고 하지만 모든 원격 분석을 Application Insights 리소스에 게시합니다.

  3. 다음 언어에 따라 구성 지침을 따릅니다.

참고 항목

Application Insights .NET SDK에서 Microsoft Entra ID에 대한 지원은 2.18-Beta3 버전부터 포함됩니다.

Application Insights .NET SDK는 Azure ID에서 제공하는 자격 증명 클래스를 지원합니다.

  • 로컬 개발에는 DefaultAzureCredential을 권장합니다.
  • 시스템 할당 및 사용자 할당 관리 ID에는 ManagedIdentityCredential을 권장합니다.
    • 시스템 할당의 경우, 매개 변수 없이 기본 생성자를 사용합니다.
    • 사용자 할당의 경우 생성자에 클라이언트 ID를 제공합니다.

다음 예에서는 .NET을 사용하여 TelemetryConfiguration을 수동으로 만들고 구성하는 방법을 보여 줍니다.

TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);

다음 예에서는 .NET Core를 사용하여 TelemetryConfiguration을 구성하는 방법을 보여 줍니다.

services.Configure<TelemetryConfiguration>(config =>
{
       var credential = new DefaultAzureCredential();
       config.SetAzureTokenCredential(credential);
});
services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/"
});

로컬 인증 사용 안 함

Microsoft Entra 인증을 사용하도록 설정한 경우 로컬 인증을 사용하지 않도록 선택할 수 있습니다. 이 구성을 사용하면 Microsoft Entra ID에서 제외적으로 인증된 원격 분석을 수집할 수 있으며 데이터 액세스(예: API 키를 통해)에 영향을 미칩니다.

Azure Portal, Azure Policy를 사용하거나 프로그래밍 방식으로 로컬 인증을 사용하지 않도록 설정할 수 있습니다.

Azure Portal

  1. Application Insights 리소스에서 왼쪽 메뉴의 구성 제목 아래에 있는 속성을 선택합니다. 로컬 인증을 사용하도록 설정된 경우 사용(변경하려면 클릭)을 선택합니다.

    구성 섹션 아래의 속성과 사용(변경하려면 클릭) 로컬 인증 단추를 보여 주는 스크린샷.

  2. 사용 안 함을 선택하여 변경 사항을 적용합니다.

    사용/사용 안 함 단추가 있는 로컬 인증을 보여 주는 스크린샷.

  3. 리소스에서 로컬 인증을 사용하지 않도록 설정하면 개요 창에 해당 정보가 표시됩니다.

    사용 안 함(변경하려면 선택) 로컬 인증 단추가 있는 개요 탭을 보여 주는 스크린샷.

Azure Policy

DisableLocalAuth에 대한 Azure Policy는 사용자가 이 속성 집합을 true로 설정하지 않고 새 Application Insights 리소스를 만드는 기능을 거부합니다. 정책 이름은 Application Insights components should block non-AAD auth ingestion입니다.

구독에 이 정책 정의를 적용하려면 새 정책 할당을 만들고 정책을 할당합니다.

다음 예에서는 정책 템플릿 정의를 보여 줍니다.

{
    "properties": {
        "displayName": "Application Insights components should block non-AAD auth ingestion",
        "policyType": "BuiltIn",
        "mode": "Indexed",
        "description": "Improve Application Insights security by disabling log ingestion that are not AAD-based.",
        "metadata": {
            "version": "1.0.0",
            "category": "Monitoring"
        },
        "parameters": {
            "effect": {
                "type": "String",
                "metadata": {
                    "displayName": "Effect",
                    "description": "The effect determines what happens when the policy rule is evaluated to match"
                },
                "allowedValues": [
                    "audit",
                    "deny",
                    "disabled"
                ],
                "defaultValue": "audit"
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Insights/components"
                    },
                    {
                        "field": "Microsoft.Insights/components/DisableLocalAuth",
                        "notEquals": "true"                        
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effect')]"
            }
        }
    }
}

프로그래매틱 활성화

DisableLocalAuth 속성은 Application Insights 리소스에서 로컬 인증을 사용하지 않도록 설정하는 데 사용됩니다. 이 속성을 true로 설정하면 모든 액세스에 Microsoft Entra 인증을 사용해야 합니다.

다음 예에서는 LocalAuth가 사용하지 않도록 설정된 작업 영역 기반 Application Insights 리소스를 만드는 데 사용할 수 있는 Azure Resource Manager 템플릿을 보여 줍니다.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string"
        },
        "type": {
            "type": "string"
        },
        "regionId": {
            "type": "string"
        },
        "tagsArray": {
            "type": "object"
        },
        "requestSource": {
            "type": "string"
        },
        "workspaceResourceId": {
            "type": "string"
        },
        "disableLocalAuth": {
            "type": "bool"
        }
     
    },
    "resources": [
        {
        "name": "[parameters('name')]",
        "type": "microsoft.insights/components",
        "location": "[parameters('regionId')]",
        "tags": "[parameters('tagsArray')]",
        "apiVersion": "2020-02-02-preview",
        "dependsOn": [],
        "properties": {
            "Application_Type": "[parameters('type')]",
            "Flow_Type": "Redfield",
            "Request_Source": "[parameters('requestSource')]",
            "WorkspaceResourceId": "[parameters('workspaceResourceId')]",
            "DisableLocalAuth": "[parameters('disableLocalAuth')]"
            }
    }
 ]
}

토큰 대상 그룹

Application Insights에 원격 분석을 제출하기 위해 Microsoft Entra ID에서 액세스 토큰을 가져오도록 사용자 지정 클라이언트를 개발하는 경우 다음 표를 참조하여 특정 호스트 환경에 적합한 대상 그룹 문자열을 결정합니다.

Azure 클라우드 버전 토큰 대상 그룹 가치
Azure 퍼블릭 클라우드 https://monitor.azure.com
21Vianet에서 운영하는 Microsoft Azure https://monitor.azure.cn
Azure 미국 정부 클라우드 https://monitor.azure.us

소버린 클라우드를 사용하는 경우 연결 문자열에서도 대상 그룹 정보를 찾을 수 있습니다. 연결 문자열은 다음 구조를 따릅니다.

InstrumentationKey={profile.InstrumentationKey};IngestionEndpoint={ingestionEndpoint};LiveEndpoint={liveDiagnosticsEndpoint};AADAudience={aadAudience}

대상 그룹 매개 변수 AADAudience는 특정 환경에 따라 달라질 수 있습니다.

문제 해결

이 섹션에서는 지원 티켓을 제출하기 전에 문제를 해결하기 위해 수행할 수 있는 고유한 문제 해결 시나리오 및 단계를 제공합니다.

HTTP 오류 수집

수집 서비스에서 SDK 언어에 관계없이 특정 오류가 반환됩니다. Fiddler와 같은 도구를 사용하여 네트워크 트래픽을 수집할 수 있습니다. 연결 문자열에 설정된 수집 엔드포인트에 대한 트래픽을 필터링해야 합니다.

HTTP/1.1 400 인증이 지원되지 않음

이 오류는 리소스가 Microsoft Entra 전용으로 설정되었음을 나타냅니다. 잘못된 API로 전송되기 때문에 SDK를 올바르게 구성해야 합니다.

참고 항목

"v2/track"은 Microsoft Entra ID를 지원하지 않습니다. SDK가 올바르게 구성되면 원격 분석이 "v2.1/track"으로 전송됩니다.

다음으로 SDK 구성을 검토해야 합니다.

HTTP/1.1 401 권한 필요

이 오류는 SDK가 올바르게 구성되었지만 유효한 토큰을 얻을 수 없음을 나타냅니다. 이 오류는 Microsoft Entra ID에 문제가 있음을 나타낼 수 있습니다.

다음으로 SDK 로그의 예외 또는 Azure ID의 네트워크 오류를 식별해야 합니다.

HTTP/1.1 403 권한 없음

이 오류는 SDK가 Application Insights 리소스 또는 구독에 대한 권한 없이 자격 증명을 사용함을 의미합니다.

먼저 Application Insights 리소스의 액세스 제어를 확인합니다. 모니터링 메트릭 게시자 역할이 있는 자격 증명으로 SDK를 구성해야 합니다.

언어별 문제 해결

이벤트 원본

Application Insights .NET SDK는 이벤트 원본을 사용하여 오류 로그를 내보냅니다. 이벤트 원본 로그 수집에 대한 자세한 내용은 PerfView를 사용하여 데이터 수집 로그 없음 문제 해결을 참조하세요.

SDK가 토큰을 얻지 못하면 예외 메시지가 Failed to get AAD Token. Error message:로깅됩니다.

다음 단계