Azure 호스팅 Java 애플리케이션 인증

이 문서에서는 Azure ID 라이브러리가 Azure에서 호스트되는 애플리케이션에 대해 Microsoft Entra 토큰 인증을 지원하는 방법을 살펴봅니다. 이 지원은 이 문서에서 설명하는 일련의 TokenCredential 구현을 통해 가능합니다.

이 문서에서는 다음 주제에 대해 설명합니다.

Azure 호스팅 애플리케이션과 관련된 인증 문제를 해결하려면 Azure 호스팅 애플리케이션 인증 문제 해결을 참조하세요.

기본 Azure 자격 증명

DefaultAzureCredential 는 애플리케이션이 궁극적으로 Azure Cloud에서 실행되는 대부분의 시나리오에 적합합니다. DefaultAzureCredential 는 배포 시 인증하는 데 일반적으로 사용되는 자격 증명과 개발 환경에서 인증하는 데 사용되는 자격 증명을 결합합니다. DefaultAzureCredential 는 다음 메커니즘을 통해 순서대로 인증을 시도합니다.

DefaultAzureCredential authentication flow

  • 환경 - DefaultAzureCredential 환경 변수를 통해 지정된 계정 정보를 읽고 이를 사용하여 인증합니다.
  • 관리 ID - 애플리케이션이 관리 ID를 사용하도록 설정된 DefaultAzureCredential Azure 호스트에 배포하는 경우 해당 계정으로 인증합니다.
  • IntelliJ - IntelliJ DefaultAzureCredential 용 Azure 도구 키트를 통해 인증한 경우 해당 계정으로 인증합니다.
  • Visual Studio Code - Visual Studio Code Azure 계정 플러그 인 DefaultAzureCredential 을 통해 인증한 경우 해당 계정으로 인증합니다.
  • Azure CLI - Azure CLI az login 명령을 DefaultAzureCredential 통해 계정을 인증한 경우 해당 계정으로 인증합니다.

DefaultAzureCredential 구성

DefaultAzureCredential 는 환경 변수 또는 환경 변수의 setter를 통해 구성 집합을 DefaultAzureCredentialBuilder 지원합니다.

  • 환경 변수를 AZURE_CLIENT_IDAZURE_CLIENT_SECRETAZURE_TENANT_ID 설정하고 환경 변수정의된 대로 값으로 지정된 서비스 주체로 인증하도록 구성 DefaultAzureCredential 합니다.
  • 작성기 또는 환경 변수 AZURE_CLIENT_ID 에 대한 설정 .managedIdentityClientId(String) 은 사용자 정의 관리 ID로 인증하도록 구성 DefaultAzureCredential 되지만 비워 두면 시스템 할당 관리 ID로 인증하도록 구성됩니다.
  • 작성기 또는 환경 변수 AZURE_TENANT_ID 에 대한 설정 .tenantId(String) 은 공유 토큰 캐시, Visual Studio Code 및 IntelliJ IDEA에 대한 특정 테넌트에 인증하도록 구성 DefaultAzureCredential 됩니다.
  • 환경 변수 AZURE_USERNAME 를 설정하면 공유 토큰 캐시에서 캐시된 해당 토큰을 선택하도록 구성 DefaultAzureCredential 됩니다.
  • 작성기에서 설정 .intelliJKeePassDatabasePath(String) 하면 DefaultAzureCredential IntelliJ 자격 증명으로 인증할 때 특정 KeePass 파일을 읽도록 구성됩니다.

DefaultAzureCredential을 사용하여 인증

다음 예제에서는 을 사용하여 DefaultAzureCredentialazure-security-keyvault-secrets 클라이언트 라이브러리에서 인증하는 방법을 SecretClient 보여 줍니다.

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(new DefaultAzureCredentialBuilder().build())
  .buildClient();

DefaultAzureCredential을 사용하여 사용자 할당 관리 ID 인증

다음 예제에서는 사용자 할당 관리 ID가 SecretClient 구성된 Azure 리소스에 배포된 것을 사용하여 DefaultAzureCredential azure-security-keyvault-secrets 클라이언트 라이브러리에서 인증하는 방법을 보여 줍니다.

/**
 * The default credential uses the user-assigned managed identity with the specified client ID.
 */
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .managedIdentityClientId("<managed identity client ID>")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

DefaultAzureCredential을 사용하여 IntelliJ용 Azure 도구 키트에서 사용자 인증

다음 예제에서는 IntelliJ IDEA가 설치되어 있고 사용자가 IntelliJ용 Azure 도구 키트에 Azure 계정으로 로그인한 워크스테이션에서 Azure-security-keyvault-secrets 클라이언트 라이브러리를 사용하여 DefaultAzureCredential인증 SecretClient하는 방법을 보여 줍니다.

IntelliJ IDEA 구성에 대한 자세한 내용은 IntelliJCredential용 IntelliJ용 Azure 도구 키트 로그인을 참조 하세요.

/**
 * The default credential uses the KeePass database path to find the user account in IntelliJ on Windows.
 */
// KeePass configuration is required only for Windows. No configuration needed for Linux / Mac.
DefaultAzureCredential defaultCredential = new DefaultAzureCredentialBuilder()
  .intelliJKeePassDatabasePath("C:\\Users\\user\\AppData\\Roaming\\JetBrains\\IdeaIC2020.1\\c.kdbx")
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(defaultCredential)
  .buildClient();

관리 ID 자격 증명

관리 ID는 Azure 리소스의 관리 ID(시스템 또는 사용자 할당)를 인증합니다. 따라서 애플리케이션이 관리 ID, IMDS 엔드포인트 또는 둘 다를 지원하는 IDENTITY/MSIAzure 리소스 내에서 실행되는 경우 이 자격 증명은 애플리케이션을 인증하고 뛰어난 비밀 없는 인증 환경을 제공합니다.

자세한 내용은 Azure 리소스에 대한 관리 ID란?을 참조하세요.

관리 ID를 사용하여 Azure에서 인증

다음 예제에서는 시스템 할당 또는 사용자 할당 관리 ID를 SecretClient 사용하도록 설정된 Azure의 가상 머신, 앱 서비스, 함수 앱, Cloud Shell, 서비스 패브릭, 아크 또는 AKS 환경을 사용하여 ManagedIdentityCredential azure-security-keyvault-secrets 클라이언트 라이브러리에서 인증하는 방법을 보여 줍니다.

/**
 * Authenticate with a managed identity.
 */
ManagedIdentityCredential managedIdentityCredential = new ManagedIdentityCredentialBuilder()
  .clientId("<user-assigned managed identity client ID>") // required only for user-assigned
  .build();

// Azure SDK client builders accept the credential as a parameter.
SecretClient client = new SecretClientBuilder()
  .vaultUrl("https://<your Key Vault name>.vault.azure.net")
  .credential(managedIdentityCredential)
  .buildClient();

환경 변수

환경 변수를 사용하여 DefaultAzureCredentialEnvironmentCredential을 구성할 수 있습니다. 각 인증 유형에는 특정 변수에 대한 값이 필요합니다.

비밀이 있는 서비스 주체

변수 이름
AZURE_CLIENT_ID Microsoft Entra 애플리케이션의 ID입니다.
AZURE_TENANT_ID 애플리케이션의 Microsoft Entra 테넌트의 ID입니다.
AZURE_CLIENT_SECRET 애플리케이션의 클라이언트 암호 중 하나

인증서가 있는 서비스 주체

변수 이름
AZURE_CLIENT_ID Microsoft Entra 애플리케이션의 ID입니다.
AZURE_TENANT_ID 애플리케이션의 Microsoft Entra 테넌트의 ID입니다.
AZURE_CLIENT_CERTIFICATE_PATH 개인 키(암호 보호 제외)를 포함하여 PEM으로 인코딩된 인증서 파일의 경로입니다.

사용자 이름 및 암호

변수 이름
AZURE_CLIENT_ID Microsoft Entra 애플리케이션의 ID입니다.
AZURE_USERNAME 사용자 이름(일반적으로 이메일 주소)
AZURE_PASSWORD 지정된 사용자 이름에 대한 연결된 암호입니다.

구성은 이 순서대로 시도됩니다. 예를 들어 클라이언트 암호와 인증서에 대한 값이 모두 있는 경우 클라이언트 암호가 사용됩니다.

다음 단계

이 문서에서는 Azure에서 호스트되는 애플리케이션에 대한 인증을 설명했습니다. 이 인증 형식은 Java용 Azure SDK에서 인증할 수 있는 여러 방법 중 하나입니다. 다음 문서에서는 다른 방법을 설명합니다.

Azure 호스팅 애플리케이션 인증과 관련된 문제가 발생하는 경우 Azure 호스팅 애플리케이션 인증 문제 해결을 참조하세요.

인증을 마스터한 후 SDK에서 제공하는 로깅 기능에 대한 자세한 내용은 Java용 Azure SDK에서 로깅 구성을 참조하세요.