Spring Cloud Azure 인증

이 문서는 버전 4.14.0 ✔️ 버전 5.8.0에 적용됩니다. ✔️

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

DefaultAzureCredential

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

참고 항목

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

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

Diagram showing the authentication mechanism for `DefaultAzureCredential`.

  • 환경 - DefaultAzureCredential은 환경 변수를 통해 지정된 계정 정보를 읽고, 이 정보를 사용하여 인증합니다.
  • 관리 ID - 관리 ID를 사용하도록 설정된 상태에서 Azure 호스트에 애플리케이션을 배포하는 경우 DefaultAzureCredential은 해당 계정으로 인증합니다.
  • IntelliJ - IntelliJ DefaultAzureCredential 용 Azure 도구 키트를 통해 인증한 경우 해당 계정으로 인증됩니다.
  • 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 ThreadPoolTaskExecutor 부터 명명 springCloudAzureCredentialTaskExecutor 된 빈은 기본적으로 자동으로 등록되며 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를 생성하고, 이를 하나 이상의 Azure 서비스 인스턴스에 할당할 수 있습니다.

참고 항목

사용자 할당 관리 ID를 사용하는 경우 또는 을 통해 spring.cloud.azure.credential.managed-identity-client-idspring.cloud.azure.<azure-service>.credential.managed-identity-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에서 사용자 이름/암호 인증을 수행할 때 사용할 사용자 이름입니다.
password 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 값은 , commonorganizations, 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 값은 , commonorganizations, 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 값은 , commonorganizations, 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 값은 , commonorganizations, consumers또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않는 잘못된 엔드포인트(개인 및 조직 계정) 사용 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트로 변환을 참조하세요.

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

권한 부여 단계에서는 보안 주체에 하나 이상의 Azure 역할을 할당해야 합니다. 보안 주체에 할당된 역할에 따라 보안 주체가 가지는 권한이 결정됩니다.

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

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

역할 설명
App Configuration 데이터 소유자 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 리소스에 대한 액세스를 보낼 수 있습니다.
Storage Blob 데이터 소유자 POSIX 액세스 제어 할당을 포함하여 Azure Storage BLOB 컨테이너 및 데이터에 대한 모든 액세스 권한을 제공합니다.
Storage Blob 데이터 읽기 권한자 Azure Storage 컨테이너 및 Blob을 읽고 나열합니다.
Storage 큐 데이터 읽기 권한자 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 액세스 정책 할당을 참조하세요.

Important

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 은 구성할 속성입니다. 예를 들어 Storage Blob 서비스에 인증하는 데 사용합니다 spring.cloud.azure.storage.blob.sas-token .

연결 문자열

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