다음을 통해 공유


앱 인증 방법

적용 대상: ✅Microsoft FabricAzure Data Explorer

이 문서에서는 Kusto 클라이언트 라이브러리에 사용할 수 있는 기본 인증 방법에 대한 개요를 제공합니다. 코드 조각은 사용자 및 앱을 인증하는 다양한 방법을 보여 줍니다. 이를 통해 Kusto 클러스터와 원활하게 상호 작용할 수 있습니다. 각 메서드는 다양한 시나리오 및 요구 사항에 적합합니다.

가능하면 사용자 이름 및 암호 인증 또는 연결 문자열 대신 관리 ID를 사용합니다. 관리 ID는 인증에 대한 보다 안전하고 간소화된 접근 방식을 제공합니다.

이 문서에서는 다음을 사용하여 인증하는 방법을 알아봅니다.

애플리케이션 주체

관리 ID 인증

사용자 주체

사용자 지정 토큰 공급자

필수 조건

애플리케이션 주체 인증 방법

이 섹션에서는 애플리케이션 주체를 사용하여 인증하는 다양한 방법을 설명합니다.

관리 ID 인증

관리 ID에는 시스템 할당 및 사용자 할당의 두 가지 유형이 있습니다. 시스템 할당 관리 ID는 그것을 생성하는 리소스의 수명 주기에 연결되어 있습니다. 이 ID는 하나의 리소스로 제한됩니다. 사용자 할당 관리 ID는 여러 리소스에서 사용할 수 있습니다. 자세한 내용은 관리 ID를 참조하세요.

다음 예제에서는 <QueryEndpointUri><ManagedIdentityClientId>를 사용자 값으로 교체하세요.

  • 시스템이 할당한 관리형 ID:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadSystemManagedIdentity();
    
  • 사용자가 할당한 관리 ID. 다음과 같이 ID 클라이언트 ID 또는 개체 ID를 사용합니다.

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadUserManagedIdentity(<ManagedIdentityClientId>);
    

중요합니다

  • Kusto 클러스터에 액세스하려면 관리 ID 리소스의 개체 ID 또는 주체 ID에 역할이 할당되어야 합니다. 보안 + 네트워킹> 권한 아래의 Kusto 클러스터 리소스 페이지에서 Azure Portal에서 역할을 할당할 수있습니다. 관리 ID는 Kusto 클러스터에 직접 연결해서는 안 됩니다.
  • 관리 ID 인증은 로컬 개발 환경에서 지원되지 않습니다. 관리 ID 인증을 테스트하려면 Azure에 애플리케이션을 배포하거나 로컬로 작업할 때 다른 인증 방법을 사용합니다.

인증서 기반 인증

인증서는 토큰을 요청할 때 애플리케이션의 ID를 인증하는 비밀 역할을 합니다. 컴퓨터의 로컬 자격 증명 저장소 또는 디스크에서 인증서를 로드하는 등 여러 가지 방법으로 인증서를 로드할 수 있습니다.

다음 예제에서는 <QueryEndpointUri>, <ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <CertificateThumbprint>, <CertificateObject>, <AuthorityId>, <PemPublicCertificate>, <PemPrivateKey>, <privateKeyPemFilePath>, <PemCertificatePath><EnableSubjectAndIssuerAuth>을 사용자 고유의 값으로 바꾸십시오.

  • 컴퓨터의 로컬 인증서 저장소의 인증서는 C#을 사용하여만 지원됩니다.

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationSubjectAndIssuerAuthentication(<ApplicationId>, <CertificateSubjectName>, <CertificateIssuerName>, <AuthorityId>);
    

    중요합니다

    주체 이름 및 발급자를 사용하는 경우 로컬 컴퓨터의 인증서 저장소에 인증서를 설치해야 합니다.

  • 디스크, 캐시 또는 Azure Key Vault와 같은 보안 저장소의 파일과 같은 임의의 원본의 인증서입니다. 인증서 개체에는 프라이빗 키가 포함되어야 합니다.

    X509Certificate2 certificate = <CertificateObject>;
    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationCertificateAuthentication(<ApplicationId>, certificate, <AuthorityId>);
    

    자세한 내용은 Kusto 연결 문자열을 참조하세요.

중요합니다

Azure Key Vault에서 인증서를 로드하려면 Azure.Security.KeyVault.Certificates클라이언트를 사용할 수 있습니다.

애플리케이션 키 인증

애플리케이션 암호라고도 하는 애플리케이션 키는 애플리케이션이 토큰을 요청할 때 해당 ID를 인증하고 증명하는 데 사용하는 비밀 문자열입니다. 애플리케이션이 보호된 리소스에 액세스하기 위한 자격 증명의 한 형태로 사용됩니다. 애플리케이션 키는 일반적으로 ID 공급자 또는 권한 부여 서버에서 생성 및 할당됩니다. 중요한 정보 또는 작업에 대한 무단 액세스를 방지하기 위해 애플리케이션 키를 안전하게 관리하고 보호하는 것이 중요합니다.

다음 예제에서는 <QueryEndpointUri>, <ApplicationId>, <ApplicationKey>, <AuthorityId>, 및 <AuthorityId>를 사용자 고유의 값으로 바꿉니다.

  • 애플리케이션 키:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadApplicationKeyAuthentication(<ApplicationId>, <ApplicationKey>, <AuthorityId>);
    
  • 애플리케이션 키를 사용하여 연결 문자열:

    var connectionString = "Data Source=<QueryEndpointUri>;Initial Catalog=NetDefaultDB;AAD Federated Security=True;AppClientId=<ApplicationId>;AppKey=<ApplicationKey>;Authority Id=<AuthorityId>;"
    var kcsb = new KustoConnectionStringBuilder(connectionString);
    

중요합니다

코드의 비밀 하드코딩은 잘못된 방법입니다. 인증 자격 증명과 같은 중요한 정보를 일반 텍스트로 저장하면 보안 취약성이 발생합니다. 중요한 정보를 암호화하여 유지하거나 키 저장소에 안전하게 보관합니다. 암호화 또는 키 자격 증명 모음을 사용하면 권한이 부여된 사용자 또는 애플리케이션에서만 비밀이 보호되고 액세스할 수 있습니다.

사용자 주체 인증 방법

이 섹션에서는 사용자 주체를 사용하여 인증하는 다양한 방법을 다룹니다.

대화형 사용자 로그인 인증

이 인증 방법은 사용자의 자격 증명을 사용하여 Kusto와의 보안 연결을 설정합니다. 이 메서드는 사용자가 인증 프로세스를 완료하기 위해 사용자 이름과 암호를 입력하라는 메시지가 표시되는 웹 브라우저를 엽니다.

다음 예제에서는 <QueryEndpointUri>, <AuthorityId>, 및 <AuthorityId>를 사용자 고유의 값으로 바꾸십시오.

  • 대화형 사용자 로그인:

    var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
      .WithAadUserPromptAuthentication();
    

Azure Command-Line 인터페이스(CLI) 인증

이 인증 방법은 Azure Command-Line 인터페이스(CLI)를 사용하여 사용자를 인증하고 토큰을 가져옵니다. az login 명령을 실행하면 사용자가 안전하게 연결을 설정하고 인증을 위해 필요한 토큰을 검색할 수 있습니다. Azure CLI 캐시에서 토큰을 사용할 수 없고 매개 변수가 true으로 설정된 경우, 사용자에게 로그인하라는 메시지가 표시될 수 있습니다. 자세한 내용은 Azure Command-Line 인터페이스(CLI)를 참조하세요.

이 예제에서 <QueryEndpointUri>를 자신의 값으로 바꾸십시오.

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadAzCliAuthentication(interactive: true);

중요합니다

이 메서드는 .NET Framework 앱에 대해서만 지원됩니다.

디바이스 코드 인증

이 메서드는 IoT 디바이스 및 서버 터미널과 같은 로그인을 위한 적절한 사용자 인터페이스가 없는 디바이스를 위해 설계되었습니다. 사용자에게 스마트폰과 같은 다른 디바이스를 사용하여 인증할 수 있는 코드와 URL을 제공합니다. 이 대화형 메서드를 사용하려면 사용자가 브라우저를 통해 로그인해야 합니다.

다음 예제에서 <QueryEndpointUri>를 사용자 고유의 값으로 바꾸십시오.

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadDeviceCodeAuthentication((msg, uri, code) =>
  {
    // The callback is used to display instructions to the user on how to authenticate using the device code
    Console.WriteLine("Device Code Message: {0}", msg);
    Console.WriteLine("Device Code Uri: {0}", uri);
    Console.WriteLine("Device Code: {0}", code);

    return Task.CompletedTask;
  });

중요합니다

디바이스 코드 인증은 테넌트 조건부 액세스 정책에 의해 차단될 수 있습니다. 차단된 경우 대체 인증 방법을 선택합니다.

사용자 지정 토큰 공급자 인증 방법

이 섹션에서는 사용자 지정 토큰 공급자를 사용하여 인증하는 다양한 방법을 설명합니다.

페더레이션된 관리 ID 자격 증명 인증을 위한 사용자 지정 토큰 공급자

사용자 지정 토큰 공급자를 사용하여 인증을 위해 Microsoft Entra ID 토큰을 획득할 수 있습니다. 다음 예제에서는 사용자 지정 토큰 공급자를 사용하여 페더레이션된 관리 ID를 사용하여 토큰을 가져오는 방법을 보여 줍니다. 애플리케이션의 요구 사항에 맞게 코드를 수정할 수 있습니다.

다음 예제에서는 <AuthorityIdId>, <ApplicationId>, <ManagedIdentityClientId>, 및 <QueryEndpointUri>를 사용자 고유의 값으로 바꿉니다.

public class TokenProvider
{
  private ClientAssertionCredential m_clientAssertion;
  private TokenRequestContext m_tokenRequestContext;

  public TokenProvider(string queryEndpointUri)
  {
    string resourceId = null;

    try
    {
      // Get the appropiate resource id by querying the metadata
      var httpClient = new HttpClient();
      var response = httpClient.GetByteArrayAsync($"{queryEndpointUri}/v1/rest/auth/metadata").Result;
      var json = JObject.Parse(Encoding.UTF8.GetString(response));
      resourceId = json["AzureAD"]?["KustoServiceResourceId"]?.ToString();
      // Append scope to resource id
      resourceId = !string.IsNullOrWhiteSpace(resourceId) ? $"{resourceId}/.default" : null;
    }
    catch { /* Handle exception */}

    m_tokenRequestContext = new TokenRequestContext(new string[] { resourceId ?? "https://kusto.kusto.windows.net/.default" });

    // Create client assertion credential to authenticate with Kusto
    m_clientAssertion = new ClientAssertionCredential
    (
      <AuthorityIdId>,
      <ApplicationId>,
      async (token) =>
      {
        // Get Managed Identity token
        var miCredential = new ManagedIdentityCredential(<ManagedIdentityClientId>);
        var miToken = await miCredential.GetTokenAsync(new TokenRequestContext(new[] {
          "api://AzureADTokenExchange/.default"
        })).ConfigureAwait(false);
        return miToken.Token;
      }
    );
  }

  public async Task<string> GetTokenAsync()
  {
    var accessToken = await m_clientAssertion.GetTokenAsync(m_tokenRequestContext).ConfigureAwait(false);
    return accessToken.Token;
  }
}

var tokenProvider = new TokenProvider(<QueryEndpointUri>);

var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadTokenProviderAuthentication(
    async () =>
    {
      return await tokenProvider.GetTokenAsync();
    });

Azure TokenCredential 인증 사용

TokenCredential을 상속하고 GetToken 메서드를 구현하는 클래스를 만들어 사용자 지정 토큰 공급자를 만듭니다. 또는 다음과 같은 DefaultAzureCredential기존 토큰 공급자를 사용할 수 있습니다. 이 방법은 사용자 지정 토큰 공급자가 필요한 경우 다양한 인증 시나리오에 대한 유연성을 제공합니다.

관리 ID 인증을 사용하는 프로덕션 코드를 지원하거나 Visual Studio 또는 Azure CLI를 사용하여 코드를 테스트하는 데 사용할 DefaultAzureCredential 수 있습니다. DefaultAzureCredential 는 다른 인증 방법을 사용하도록 구성할 수 있습니다.

다음 예제에서는 <QueryEndpointUri><ManagedIdentityClientId>을 사용자 고유의 값으로 교체하세요.

var credentialProvider = new DefaultAzureCredential(new DefaultAzureCredentialOptions {
  ManagedIdentityClientId = <ManagedIdentityClientId>
 });
var kcsb = new KustoConnectionStringBuilder(<QueryEndpointUri>)
  .WithAadAzureTokenCredentialsAuthentication(credentialProvider);

비고

DefaultAzureCredential 는 Azure 서비스를 사용하여 인증하는 데 사용됩니다. 토큰을 얻기 위해 여러 인증 방법을 시도하고 관리 ID, Visual Studio, Azure CLI 등을 사용하도록 구성할 수 있습니다. 이 자격 증명은 다른 인증 방법을 사용하도록 설정할 수 있으므로 테스트 및 프로덕션 환경 모두에 적합합니다. 자세한 내용은 DefaultAzureCredential 클래스를 참조하세요.

다음 단계