Application Insights를 사용하여 Azure Active Directory B2C 로그 수집

시작하기 전에 이 페이지 위쪽의 정책 유형 선택 선택기를 사용하여 설정하려는 정책 유형을 선택합니다. Azure Active Directory B2C는 사용자가 애플리케이션과 상호 작용하는 방법을 정의하는 두 가지 방법, 즉 미리 정의된 사용자 흐름 또는 완전히 구성 가능한 사용자 지정 정책을 통해 제공합니다. 이 문서에서 필요한 단계는 각 방법마다 다릅니다.

이 기능은 사용자 지정 정책에만 사용할 수 있습니다. 설정 단계의 경우 이전 선택기의 사용자 지정 정책을 선택합니다.

참고 항목

이 기능은 공개 미리 보기로 제공됩니다.

이 문서에서는 사용자 지정 정책을 사용하여 문제를 진단할 수 있도록 Azure AD B2C(Active Directory B2C)에서 로그를 수집하는 단계를 설명합니다. Application Insights는 예외를 진단하고 애플리케이션 성능 문제를 시각화하는 방법을 제공합니다. Azure AD B2C에는 Application Insights로 데이터를 보내는 기능을 있습니다.

여기서 설명하는 자세한 활동 로그는 사용자 지정 정책을 개발하는 동안에만 사용하도록 설정해야 합니다.

Warning

프로덕션 환경에서 DeploymentModeDevelopment로 설정하지 않습니다. 로그는 ID 공급자와 주고 받는 모든 클레임을 수집합니다. 개발자가 Application Insights 로그에 수집된 개인 데이터를 담당하게 됩니다. 이러한 자세한 로그는 정책이 개발 모드인 경우에만 수집됩니다.

Application Insights 설정

아직 없는 경우 구독에 Application Insights의 인스턴스를 만듭니다.

Application Insights의 단일 인스턴스를 여러 Azure AD B2C 테넌트에 사용할 수 있습니다. 그런 다음 쿼리에서 테넌트 또는 정책 이름을 기준으로 필터링할 수 있습니다. 자세한 내용은 Application Insights 로그 보기 샘플을 참조하세요.

구독에서 기존 Application Insights 인스턴스를 사용하려면 다음 단계를 따르세요.

  1. Azure Portal에 로그인합니다.
  2. Azure AD B2C 디렉터리가 아니라 Azure 구독이 있는 Microsoft Entra 디렉터리를 사용하고 있는지 확인합니다. 포털 도구 모음에서 디렉터리 + 구독 아이콘을 선택합니다.
  3. 포털 설정 | 디렉터리 + 구독 페이지의 디렉터리 이름 목록에서 Microsoft Entra 디렉터리를 찾은 다음 전환을 선택합니다.
  4. 이전에 만든 Application Insights 리소스를 엽니다.
  5. 개요 페이지에서 계측 키를 기록합니다.

구독에서 Application Insights의 인스턴스를 만들려면 다음 단계를 수행합니다.

  1. Azure Portal에 로그인합니다.
  2. Azure AD B2C 디렉터리가 아니라 Azure 구독이 있는 Microsoft Entra 디렉터리를 사용하고 있는지 확인합니다. 포털 도구 모음에서 디렉터리 + 구독 아이콘을 선택합니다.
  3. 포털 설정 | 디렉터리 + 구독 페이지의 디렉터리 이름 목록에서 Microsoft Entra 디렉터리를 찾은 다음 전환을 선택합니다.
  4. 왼쪽 탐색 메뉴에서 리소스 만들기를 선택합니다.
  5. Application Insights를 검색하고 선택한 다음, 만들기를 선택합니다.
  6. 양식을 작성하고 검토 + 만들기를 선택한 다음, 만들기를 선택합니다.
  7. 배포가 완료되면 리소스로 이동을 선택합니다.
  8. Application Insights 메뉴의 구성에서 속성을 선택합니다.
  9. 이후 단계에서 사용할 계측 키를 기록합니다.

사용자 지정 정책 구성

  1. RP(신뢰 당사자) 파일(예: SignUpOrSignin.xml)을 엽니다.

  2. 다음 속성을 <TrustFrameworkPolicy> 요소에 추가합니다.

    DeploymentMode="Development"
    UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights"
    
  3. 아직 존재하지 않는 경우 자식 노드 <UserJourneyBehaviors><RelyingParty> 노드에 추가합니다. <DefaultUserJourney ReferenceId="UserJourney Id" from your extensions policy, or equivalent (for example:SignUpOrSigninWithAAD" /> 이후에 위치해야 합니다. RelyingParty 자식 요소의 전체 순서는 RelyingParty 스키마 참조를 참조하세요.

  4. 다음 노드를 <UserJourneyBehaviors> 요소의 자식으로 추가합니다. {Your Application Insights Key}를 이전에 기록한 Application Insights 계측 키로 바꿔야 합니다.

    <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="{Your Application Insights Key}" DeveloperMode="true" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
    
    • DeveloperMode="true"로 인해 Application Insights는 처리 파이프라인을 통해 원격 분석을 빠르게 수행합니다. 개발에는 좋지만 고용량일 경우에는 제한됩니다. 프로덕션에서는 DeveloperModefalse로 설정합니다.
    • ClientEnabled="true"는 페이지 보기 및 클라이언트 쪽 오류를 추적하는 ApplicationInsights 클라이언트 쪽 스크립트를 보냅니다. Application Insights 포털의 browserTimings 테이블에서 볼 수 있습니다. ClientEnabled= "true"를 설정하여 페이지 스크립트에 Application Insights를 추가하면 페이지 로드 및 AJAX 호출의 타이밍, 개수, 브라우저 예외 및 AJAX 실패의 세부 정보와 사용자 및 세션 개수를 얻을 수 있습니다. 이 필드는 선택 사항이며 기본적으로 false로 설정됩니다.
    • ServerEnabled="true"는 Application Insights에 기존 UserJourneyRecorder JSON을 사용자 지정 이벤트로 보냅니다.

    예시:

    <TrustFrameworkPolicy
      ...
      TenantId="fabrikamb2c.onmicrosoft.com"
      PolicyId="SignUpOrSignInWithAAD"
      DeploymentMode="Development"
      UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights"
    >
    ...
    <RelyingParty>
      <DefaultUserJourney ReferenceId="UserJourney ID from your extensions policy, or equivalent (for example: SignUpOrSigninWithAzureAD)" />
      <Endpoints>
         <!--points to refresh token journey when app makes refresh token request-->
         <Endpoint Id="Token" UserJourneyReferenceId="RedeemRefreshToken" />
      </Endpoints>
      <UserJourneyBehaviors>
        <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="{Your Application Insights Key}" DeveloperMode="true" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
      </UserJourneyBehaviors>
      ...
    </TrustFrameworkPolicy>
    
  5. 정책을 업로드합니다.

Application Insights에서 로그를 참조하세요.

Application Insights에서 새 로그가 표시되기까지 짧은 지연 시간이 발생합니다(일반적으로 5분 미만).

  1. Azure Portal에서 만든 Application Insights 리소스를 엽니다.
  2. 개요 페이지에서 로그를 선택합니다.
  3. Application Insights에서 새 탭을 엽니다.

로그를 참조하는 데 사용할 수는 쿼리 목록은 다음과 같습니다.

쿼리 설명
traces Azure AD B2C에서 생성된 모든 로그를 가져옵니다.
traces | where timestamp > ago(1d) Azure AD B2C에서 최근까지 생성된 모든 로그를 가져옵니다.
traces | where message contains "exception" | where timestamp > ago(2h) 지난 2시간 동안 오류가 발생한 모든 로그를 가져옵니다.
traces | where customDimensions.Tenant == "contoso.onmicrosoft.com" and customDimensions.UserJourney == "b2c_1a_signinandup" Azure AD B2C contoso.onmicrosoft.com 테넌트에 의해 생성된 모든 로그를 가져오고 사용자 경험은 b2c_1a_signinandup입니다.
traces | where customDimensions.CorrelationId == "00000000-0000-0000-0000-000000000000" 상관 관계 ID에 대해 Azure AD B2C에 의해 생성된 모든 로그를 가져옵니다. 상관 관계 ID를 사용자의 상관 관계 ID로 바꿉니다.

항목이 길어질 수 있습니다. 자세히 보기 위해 CSV로 내보냅니다.

쿼리에 대한 자세한 내용은 Azure Monitor의 로그 쿼리 개요를 참조하세요.

VS Code 확장의 로그를 참조하세요.

VS CodeAzure AD B2C 확장을 설치하는 것이 좋습니다. Azure AD B2C 확장을 사용하여 로그는 정책 이름, 상관 관계 ID(Application Insights는 상관 관계 ID의 첫 번째 숫자를 제공함) 및 로그 타임스탬프를 기반으로 구성됩니다. 이 기능을 사용하면 로컬 타임스탬프를 기반으로 관련 로그를 찾고 Azure AD B2C에 의해 실행되는 사용자 경험을 확인할 수 있습니다.

참고 항목

커뮤니티에서는 사람들이 Azure AD B2C 솔루션을 구현하고 유지 관리하는 데 도움이 되는 VS Code 확장을 개발했습니다. 이 확장은 Microsoft에서 지원되지 않으며 엄격하게 있는 그대로 제공됩니다.

Application Insights API 액세스 설정

Application Insights를 설정하고 사용자 지정 정책을 구성한 후 Application Insights API ID를 가져오고 API 키를 만들어야 합니다. API ID와 API 키는 Azure AD B2C 확장에서 Application Insights 이벤트(원격 분석)를 읽는 데 사용됩니다. API 키는 암호처럼 관리해야 합니다. 공개되지 않도록 주의해야 합니다.

참고 항목

이전에 만든 Application Insights 계측 키는 Azure AD B2C에서 Application Insights를 원격 분석을 보내는 데 사용됩니다. 계측 키는 VS Code 확장이 아닌 Azure AD B2C 정책에서만 사용합니다.

Application Insights ID 및 키를 가져오려면:

  1. Azure Portal에서 애플리케이션에 대한 Application Insights 리소스를 엽니다.

  2. 구성, API 액세스를 차례로 선택합니다.

  3. 애플리케이션 ID를 복사합니다.

  4. API 키 만들기를 선택합니다.

  5. 원격 분석 읽기 상자를 선택합니다.

  6. API 키 만들기 블레이드를 닫기 전에 를 복사하여 안전한 곳에 저장합니다. 키를 분실한 경우 다른 키를 만들어야 합니다.

    Screenshot that demonstrates how to create API access key.

Azure AD B2C VS Code 확장 설정

이제 Azure Application Insights API ID와 키가 있으므로 로그를 읽도록 VS Code 확장을 구성할 수 있습니다. Azure AD B2C VS Code 확장은 설정에 대해 두 가지 범위를 제공합니다.

  • 사용자 전역 설정 - 사용자가 여는 모든 VS Code 인스턴스에 전역적으로 적용되는 설정입니다.
  • 작업 영역 설정 - 작업 영역 내에 저장된 설정이며 작업 영역을 열 때만 적용됩니다(VS Code 폴더 열기 사용).
  1. Azure AD B2C 추적 탐색기에서 설정 아이콘을 클릭합니다.

    Screenshot that demonstrates select the application insights settings.

  2. Azure Application Insights ID를 제공합니다.

  3. 페이지 맨 아래에 있는 저장

설정을 저장하면 Application Insights 로그가 Azure AD B2C 추적(App insights) 창에 표시됩니다.

Screenshot of Azure AD B2C extension for vscode, presenting the Azure Application insights trace.

프로덕션에서 Application Insights 구성

프로덕션 환경 성능과 사용자 환경을 개선하려면 중요하지 않은 메시지를 무시하도록 정책을 구성하는 것이 중요합니다. 또한 PII(개인 식별 정보)를 기록하지 않도록 해야 합니다. 프로덕션 환경에서 다음 구성을 사용하면 애플리케이션 인사이트에 로그가 전송되지 않습니다.

  1. TrustFrameworkPolicyDeploymentMode 특성을 Production으로 설정합니다.

    <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0"
    TenantId="yourtenant.onmicrosoft.com"
    PolicyId="B2C_1A_signup_signin"
    PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_signup_signin"
    DeploymentMode="Production"
    UserJourneyRecorderEndpoint="urn:journeyrecorder:applicationinsights">
    
  2. JourneyInsightsDeveloperModefalse로 설정합니다.

    <UserJourneyBehaviors>
      <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="{Your Application Insights Key}" DeveloperMode="false" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
    </UserJourneyBehaviors>
    
  3. 정책을 업로드하고 테스트합니다.

다음 단계