다음을 통해 공유


Spring Cloud Azure 인증

이 문서는✅ 버전 4.19.0 ✅ 버전 5.19.0에 적용됩니다.

이 문서에서는 모든 Spring Cloud Azure 인증 방법을 설명합니다.

DefaultAzureCredential

DefaultAzureCredential 애플리케이션이 Azure Cloud에서 실행되도록 의도된 대부분의 시나리오에 적합합니다. DefaultAzureCredential 개발 환경에서 인증하는 데 사용되는 자격 증명을 사용하여 배포할 때 일반적으로 인증하는 데 사용되는 자격 증명을 결합하기 때문입니다.

메모

DefaultAzureCredential 합리적인 기본 동작을 사용하여 일반적인 시나리오를 처리하여 SDK 시작을 간소화하기 위한 것입니다. 더 많은 제어를 원하거나 시나리오가 기본 설정에서 제공되지 않는 경우 다른 자격 증명 형식을 사용해야 합니다.

DefaultAzureCredential 다음 메커니즘을 통해 순서대로 인증을 시도합니다.

'DefaultAzureCredential'에 대한 인증 메커니즘을 보여 주는 다이어그램

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

보안 주체에게 Azure 리소스에 액세스할 수 있는 충분한 권한이 부여되었는지 확인합니다. 자세한 내용은 Microsoft Entra ID사용하여 액세스 권한 부여를 참조하세요.

메모

Spring Cloud Azure AutoConfigure 4.1.0부터 springCloudAzureCredentialTaskExecutor 명명된 ThreadPoolTaskExecutor 콩이 기본적으로 자동으로 등록되고 Azure ID에서 만든 모든 스레드를 관리합니다. 이 스레드 풀에서 관리하는 각 스레드의 이름 앞에는 az-identity-. 이 ThreadPoolTaskExecutor 콩은 Spring Boot에서 제공하는 Executor 콩과 독립적입니다.

관리 ID

일반적인 과제는 솔루션을 구성하는 여러 구성 요소 간의 통신을 보호하는 데 사용되는 비밀 및 자격 증명을 관리하는 것입니다. 관리 ID는 자격 증명을 관리할 필요가 없습니다. 관리 ID는 Microsoft Entra 인증을 지원하는 리소스에 연결할 때 애플리케이션에서 사용할 ID를 제공합니다. 애플리케이션은 관리 ID를 사용하여 Microsoft Entra 토큰을 가져올 수 있습니다. 예를 들어 애플리케이션은 관리 ID를 사용하여 자격 증명을 안전한 방식으로 저장하거나 스토리지 계정에 액세스할 수 있는 Azure Key Vault와 같은 리소스에 액세스할 수 있습니다.

애플리케이션에서 연결 문자열 또는 키를 사용하는 대신 관리 ID를 사용하는 것이 좋습니다. 더 안전하며 비밀 및 자격 증명을 관리하는 문제를 줄일 수 있기 때문입니다. 이 경우 DefaultAzureCredential 로컬에 저장된 계정 정보를 사용하여 로컬로 개발한 다음, Azure Cloud에 애플리케이션을 배포하고 관리 ID를 사용하는 시나리오를 더 잘 제공할 수 있습니다.

관리 ID 형식

관리 ID에는 두 가지 유형이 있습니다.

  • 시스템 할당 - 일부 Azure 서비스를 사용하면 서비스 인스턴스에서 직접 관리 ID를 사용하도록 설정할 수 있습니다. 시스템 할당 관리 ID를 사용하도록 설정하면 Microsoft Entra에서 해당 서비스 인스턴스의 수명 주기와 연결된 ID가 만들어집니다. 따라서 리소스가 삭제되면 Azure에서 자동으로 ID를 삭제합니다. 기본적으로 Azure 리소스만 이 ID를 사용하여 Microsoft Entra ID에서 토큰을 요청할 수 있습니다.
  • 사용자 할당 - 관리 ID를 독립 실행형 Azure 리소스로 만들 수도 있습니다. 사용자가 할당한 관리 ID를 만들고 하나 이상의 Azure 서비스 인스턴스에 할당할 수 있습니다. 사용자 할당 관리 ID를 사용하면 ID를 사용하는 리소스와 별도로 관리됩니다.

메모

사용자가 할당한 관리 ID를 사용하는 경우 spring.cloud.azure.credential.client-id 또는 spring.cloud.azure.<azure-service>.credential.client-id통해 클라이언트 ID를 지정할 수 있습니다. 시스템 할당 관리 ID를 사용하는 경우 자격 증명 구성이 필요하지 않습니다.

보안 주체에게 Azure 리소스에 액세스할 수 있는 충분한 권한이 부여되었는지 확인합니다. 자세한 내용은 Microsoft Entra ID사용하여 액세스 권한 부여를 참조하세요.

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

기타 자격 증명 형식

더 많은 제어를 원하거나 시나리오가 DefaultAzureCredential 또는 기본 설정에서 제공되지 않는 경우 다른 자격 증명 형식을 사용해야 합니다.

Microsoft Entra ID를 사용한 인증 및 권한 부여

Microsoft Entra ID를 사용하면 Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 사용자 또는 애플리케이션 서비스 주체일 수 있는 보안 주체에 권한을 부여할 수 있습니다. 보안 주체(사용자 또는 애플리케이션)가 Azure 리소스(예: Event Hubs 리소스)에 액세스하려고 하면 요청에 권한이 부여되어야 합니다. Microsoft Entra ID를 사용하면 리소스에 대한 액세스는 2단계 프로세스입니다.

  1. 먼저 보안 주체의 ID가 인증되고 OAuth 2.0 토큰이 반환됩니다.
  2. 다음으로 토큰은 지정된 리소스에 대한 액세스 권한을 부여하기 위해 Azure 서비스에 요청의 일부로 전달됩니다.

Microsoft Entra ID로 인증

Microsoft Entra 인증을 지원하는 리소스에 애플리케이션을 연결하려면 접두사 spring.cloud.azure.credential 또는 spring.cloud.azure.<azure-service>.credential 사용하여 다음 구성을 설정할 수 있습니다.

다음 표에서는 인증 속성을 나열합니다.

재산 묘사
client-id Azure에서 서비스 주체 인증을 수행할 때 사용할 클라이언트 ID입니다.
client-secret Azure에서 서비스 주체 인증을 수행할 때 사용할 클라이언트 암호입니다.
client-certificate-path Azure에서 서비스 주체 인증을 수행할 때 사용할 PEM 인증서 파일의 경로입니다.
client-certificate-password 인증서 파일의 암호입니다.
사용자 이름 Azure에서 사용자 이름/암호 인증을 수행할 때 사용할 사용자 이름입니다.
암호 Azure에서 사용자 이름/암호 인증을 수행할 때 사용할 암호입니다.
관리 ID 사용 관리 ID를 사용하도록 설정할지 여부입니다.

모든 Spring Cloud Azure 구성 속성 목록은 Spring Cloud Azure 구성 속성참조하세요.

애플리케이션은 여러 위치에서 사용 가능한 자격 증명을 찾고, 자격 증명 속성이 구성되지 않은 경우 DefaultAzureCredential 사용합니다. 특정 자격 증명을 사용하려는 경우 지침은 다음 예제를 참조하세요.

다음 예제에서는 시스템 할당 관리 ID를 사용하여 인증하는 방법을 보여줍니다.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true

다음 예제에서는 사용자 할당 관리 ID를 사용하여 인증하는 방법을 보여줍니다.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
    client-id: ${AZURE_CLIENT_ID}

다음 예제에서는 클라이언트 암호와 함께 서비스 주체를 사용하여 인증하는 방법을 보여줍니다.

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-secret: ${AZURE_CLIENT_SECRET}
  profile:
    tenant-id: <tenant>

메모

tenant-id 허용되는 값은 common, organizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 잘못된 엔드포인트(개인 및 조직 계정) 섹션을 참조하세요. - ID 공급자의 사용자 계정이 테넌트존재하지 않습니다. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

다음 예제에서는 클라이언트 PFX 인증서와 함께 서비스 주체를 사용하여 인증하는 방법을 보여줍니다.

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
    client-certificate-password: ${AZURE_CLIENT_CERTIFICATE_PASSWORD}
  profile:
    tenant-id: <tenant>

메모

tenant-id 허용되는 값은 common, organizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 잘못된 엔드포인트(개인 및 조직 계정) 섹션을 참조하세요. - ID 공급자의 사용자 계정이 테넌트존재하지 않습니다. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

다음 예제에서는 클라이언트 PEM 인증서와 함께 서비스 주체를 사용하여 인증하는 방법을 보여줍니다.

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    client-certificate-path: ${AZURE_CLIENT_CERTIFICATE_PATH}
  profile:
    tenant-id: <tenant>

메모

tenant-id 허용되는 값은 common, organizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 잘못된 엔드포인트(개인 및 조직 계정) 섹션을 참조하세요. - ID 공급자의 사용자 계정이 테넌트존재하지 않습니다. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

다음 예제에서는 사용자 자격 증명을 사용하여 인증하는 방법을 보여줍니다.

spring.cloud.azure:
  credential:
    client-id: ${AZURE_CLIENT_ID}
    username: ${AZURE_USER_USERNAME}
    password: ${AZURE_USER_PASSWORD}

다음 예제에서는 다른 서비스 주체를 사용하여 Key Vault로 인증하는 방법을 보여 줍니다. 이 예제에서는 시스템 할당 관리 ID 1개와 서비스 주체 1개 등 두 개의 자격 증명으로 애플리케이션을 구성합니다. Key Vault 비밀 클라이언트는 서비스 주체를 사용하지만 다른 구성 요소는 대신 관리 ID를 사용합니다.

spring.cloud.azure:
  credential:
    managed-identity-enabled: true
  keyvault.secret:
    credential:
      client-id: ${AZURE_CLIENT_ID}
      client-secret: ${AZURE_CLIENT_SECRET}
    profile:
      tenant-id: <tenant>

메모

tenant-id 허용되는 값은 common, organizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 잘못된 엔드포인트(개인 및 조직 계정) 섹션을 참조하세요. - ID 공급자의 사용자 계정이 테넌트존재하지 않습니다. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

Microsoft Entra ID를 사용하여 액세스 권한 부여

권한 부여 단계를 수행하려면 하나 이상의 Azure 역할을 보안 주체에 할당해야 합니다. 보안 주체에 할당된 역할은 보안 주체가 가질 권한을 결정합니다.

모든 Azure 기본 제공 역할 목록은Azure 기본 제공 역할 참조하세요.

다음 표에서는 Spring Cloud Azure에서 지원되는 Azure 서비스에 대한 액세스 권한을 부여하기 위한 Azure 기본 제공 역할을 나열합니다.

역할 묘사
앱 구성 데이터 소유자 App Configuration 데이터에 대한 모든 권한을 허용합니다.
앱 구성 데이터 판독기 App Configuration 데이터에 대한 읽기 액세스를 허용합니다.
Azure Event Hubs 데이터 소유자 Azure Event Hubs 리소스에 대한 모든 권한을 허용합니다.
Azure Event Hubs 데이터 수신기 Azure Event Hubs 리소스에 대한 수신 액세스를 허용합니다.
Azure Event Hubs 데이터 보낸 사람 Azure Event Hubs 리소스에 대한 액세스를 보낼 수 있습니다.
Azure Service Bus 데이터 소유자 Azure Service Bus 리소스에 대한 모든 권한을 허용합니다.
Azure Service Bus 데이터 수신기 Azure Service Bus 리소스에 대한 수신 액세스를 허용합니다.
Azure Service Bus 데이터 보낸 사람 Azure Service Bus 리소스에 대한 액세스를 보낼 수 있습니다.
스토리지 Blob 데이터 소유자 POSIX 액세스 제어 할당을 포함하여 Azure Storage Blob 컨테이너 및 데이터에 대한 모든 권한을 제공합니다.
스토리지 Blob 데이터 판독기 Azure Storage 컨테이너 및 Blob을 읽고 나열합니다.
스토리지 큐 데이터 판독기 Azure Storage 큐 및 큐 메시지를 읽고 나열합니다.
Redis Cache 기여자 Redis 캐시를 관리합니다.

메모

Spring Cloud Azure Resource Manager를 사용하여 Event Hubs, Service Bus 및 Storage 큐 또는 Cache for Redis의 속성에 대한 연결 문자열을 가져오는 경우 Azure 기본 제공 역할 Contributor할당합니다. Azure Cache for Redis는 특별하며 Redis Cache Contributor 역할을 할당하여 Redis 속성을 가져올 수도 있습니다.

메모

Key Vault 액세스 정책은 지정된 보안 주체(즉, 사용자, 애플리케이션 또는 사용자 그룹)가 Key Vault 비밀, 키 및 인증서에 대해 다른 작업을 수행할 수 있는지 여부를 결정합니다. Azure Portal, Azure CLI 또는 Azure PowerShell을 사용하여 액세스 정책을 할당할 수 있습니다. 자세한 내용은 Key Vault 액세스 정책할당을 참조하세요.

중요하다

Azure Cosmos DB는 Cosmos DB Built-in Data ReaderCosmos DB Built-in Data Contributor두 가지 기본 제공 역할 정의를 노출합니다. 그러나 역할 관리에 대한 Azure Portal 지원은 아직 제공되지 않습니다. 권한 모델, 역할 정의 및 역할 할당에 대한 자세한 내용은 Azure Cosmos DB 계정Microsoft Entra ID를 사용하여 역할 기반 액세스 제어 구성을 참조하세요.

SAS 토큰

SAS(공유 액세스 서명)를 사용하여 인증을 위한 서비스를 구성할 수도 있습니다. spring.cloud.azure.<azure-service>.sas-token 구성할 속성입니다. 예를 들어 spring.cloud.azure.storage.blob.sas-token 사용하여 Storage Blob 서비스에 인증합니다.

연결 문자열

연결 문자열은 연결 정보 및 자격 증명을 제공하기 위해 일부 Azure 서비스에서 지원됩니다. 연결 문자열을 사용하여 해당 Azure 서비스에 연결하려면 spring.cloud.azure.<azure-service>.connection-string구성하기만 하면 됩니다. 예를 들어 Event Hubs 서비스에 연결하도록 spring.cloud.azure.eventhubs.connection-string 구성합니다.