제로 트러스트 환경에서 Spring Boot 앱에 대한 엔드 투 엔드 통신 보안

이 문서에서는 제로 트러스트 환경에서 Spring Boot 앱에 대한 엔드 투 엔드 통신 보안 방법을 설명합니다. Spring Boot 앱의 모든 통신 지점에서 통신을 엔드 투 엔드로 보호하거나 종료할 수 있습니다. 통신 보안에 필요한 모든 Azure 리소스에 대한 프로비저닝 및 구성을 자동화할 수도 있습니다.

솔루션 아키텍처의 일부로 보안 통신을 구현하는 것은 어려울 수 있습니다. 많은 고객이 수동으로 인증서를 회전하거나 자체 솔루션을 만들어 프로비저닝 및 구성을 자동화합니다. 그럼에도 불구하고 서버 시스템에는 무단 복사 또는 데이터 전송과 같은 데이터 반출 위험이 여전히 존재합니다. Azure Spring Apps를 사용하여 이러한 세부 정보가 처리됩니다. Azure Spring Apps는 대부분의 복잡성을 추상화하므로 서비스에서 보안 통신이 구성 가능하고 자동화 가능한 옵션으로 남습니다.

인터넷 통신 보안

TLS/SSL 프로토콜은 ID 및 신뢰를 설정하고 모든 형식의 통신을 암호화합니다. TLS/SSL은 보안 통신, 특히 상거래 및 고객 데이터를 전달하는 웹 트래픽을 가능하게 합니다.

모든 유형의 TLS/SSL 인증서를 사용할 수 있습니다. 예를 들어 인증 기관에서 발급한 인증서, 확장 유효성 검사 인증서, 여러 하위 도메인을 지원하는 와일드카드 인증서 또는 개발 및 테스트 환경에 대한 자체 서명된 인증서를 사용할 수 있습니다.

제로 트러스트 사용하여 인증서 보안 로드

제로 트러스트는 “절대 신뢰하지 말고, 항상 확인하고, 자격 증명이 없는” 원칙을 기반으로 합니다. 제로 트러스트는 알 수 없는 인증서와 관리되지 않는 인증서를 제거하여 모든 통신을 보호하는 데 도움이 됩니다. 제로 트러스트는 인증서에 대한 액세스 권한을 부여하기 전에 ID를 확인하여 공유되는 인증서만 신뢰합니다. 자세한 내용은 제로 트러스터 참고 자료 센터를 참조하세요.

Azure Key Vault에서 인증서를 안전하게 로드하기 위해 Spring Boot 앱은 관리 IDAzure RBAC(역할 기반 액세스 제어)를 사용합니다. Azure Spring Apps는 공급자 서비스 주체 및 Azure 역할 기반 액세스 제어를 사용합니다. 이 보안 로드는 Azure Key Vault JCA(Java Cryptography Architecture) 공급자를 사용하여 구동됩니다. 자세한 내용은 Azure Key Vault JCA Java용 클라이언트 라이브러리를 참조하세요.

Azure Key Vault를 사용하면 인증서의 스토리지 및 배포를 제어하여 실수로 인한 누출을 줄일 수 있습니다. 애플리케이션 및 서비스는 인증서에 안전하게 액세스할 수 있습니다. Key Vault Azure는 역할 기반 액세스 제어를 사용하여 액세스를 잠글 때 최소 권한 원칙을 사용하여 관리자와 같이 액세스가 필요한 사람만이 아니라 앱에 대한 액세스도 잠급니다. 애플리케이션 및 서비스는 Microsoft Entra ID 및 Azure 역할 기반 액세스 제어를 사용하여 인증 및 권한을 부여하여 인증서에 액세스합니다. 전체 감사 내역을 통해 Key Vault 인증서의 액세스 및 사용을 모니터링할 수 있습니다.

엔드투엔드 통신 보호 또는 모든 지점에서 TLS 종료

아래 다이어그램에 설명된 것처럼 다음 구성 요소를 통한 여러 통신 세그먼트가 있습니다.

  • Azure Front Door와 같은 네트워크 액세스 지점
  • Azure App Gateway
  • F5 BIG-IP 로컬 트래픽 관리자
  • Azure API Management
  • Apigee API Management Spring Boot 앱 및 데이터베이스, 메시징 및 이벤트 시스템 등의 백 엔드 시스템 그리고 앱 캐시.

Spring Boot 앱의 모든 통신 지점에서 통신을 엔드 투 엔드로 보호하거나 종료할 수 있습니다.

Diagram showing the architecture of end-to-end secure communications for Spring Boot apps.

다음 섹션에서는 이 아키텍처를 보다 자세히 설명합니다.

세그먼트 1: Azure Spring Apps로의 보안 통신

첫 번째 세그먼트(다이어그램의 세그먼트 1)는 소비자에서 Azure Spring Apps의 수신 컨트롤러로의 통신을 나타냅니다. 이러한 소비자에는 브라우저, 휴대폰, 데스크톱, 키오스크 또는 Azure Front Door, Azure App Gateway, F5 BIG-IP 로컬 트래픽 관리자, Azure API Management 및 Apigee API Management와 같은 네트워크 액세스 지점이 포함됩니다.

기본적으로 이 세그먼트는 *.azuremicroservices.io 도메인에 대해 Microsoft에서 제공하는 TLS/SSL 인증서를 사용하여 보호됩니다. Azure Spring Apps의 앱에 사용자 지정 도메인을 바인딩하여 Azure Key Vault에서 고유한 TLS/SSL 인증서를 적용할 수 있습니다. 코드가 필요하지 않습니다. 자세한 내용은 자습서: Azure Spring Apps에 기존 사용자 지정 도메인 매핑을 참조하세요.

세그먼트 2: 수신 컨트롤러에서 앱으로의 통신 보호

다음 세그먼트(다이어그램의 세그먼트 2)는 Azure Spring Apps 수신 컨트롤러에서 Azure Spring Apps의 모든 앱으로의 통신을 나타냅니다. TLS/SSL을 사용하여 수신 컨트롤러에서 HTTPS를 지원하는 앱으로의 트래픽을 보호할 수 있습니다. 자세한 내용은 애플리케이션에 대한 수신-앱 TLS 사용을 참조하세요.

Spring Boot 앱은 Spring의 접근 방식을 사용하여 HTTPS를 사용하도록 설정하거나 앱에서 Azure Key Vault 인증서 Spring Boot Starter를 사용하여 통신을 보호할 수 있습니다. 자세한 내용은 자습서: Azure Key Vault 인증서를 사용하여 Spring Boot 앱 보호를 참조하세요.

Azure Key Vault에서 TLS/SSL 인증서를 사용하여 통신을 보호하려면 다음 세 가지 구성 단계가 필요합니다. 코드가 필요하지 않습니다.

  1. pom.xml 파일에 다음 Azure Key Vault 인증서 Spring Boot Starter 종속성을 포함합니다.

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>azure-spring-boot-starter-keyvault-certificates</artifactId>
    </dependency>
    
  2. Azure Key Vault에서 TLS/SSL 인증서를 로드하도록 앱을 구성하려면 다음 속성을 추가합니다. Azure Key Vault의 URI와 인증서 이름을 지정해야 합니다.

    azure:
      keyvault:
        uri: ${KEY_VAULT_URI}
    
    server:
      ssl:
        key-alias: ${SERVER_SSL_CERTIFICATE_NAME}
        key-store-type: AzureKeyVault
    
  3. 앱의 관리 ID를 사용하도록 설정한 다음 Azure Key Vault에 대한 “가져오기” 및 “목록” 액세스 권한을 관리 ID에 부여합니다. 자세한 내용은 Azure Spring Apps에서 애플리케이션에 대해 시스템 할당 관리 ID 사용인증서 액세스 제어를 참조하세요.

세그먼트 3: 앱에서 관리되는 미들웨어로의 통신 보호

다음 세그먼트(다이어그램의 세그먼트 3)는 모든 앱에서 Azure Spring Apps의 관리되는 Spring Cloud Config Server 및 Spring Cloud Service Registry로의 통신을 나타냅니다. 기본적으로 이 세그먼트는 Microsoft에서 제공하는 TLS/SSL 인증서를 사용하여 보호됩니다.

세그먼트 4: 앱에서 앱으로의 통신 보안

다음 세그먼트(다이어그램의 세그먼트 4)는 Azure Spring Apps에서 앱과 또 다른 앱 간의 통신을 나타냅니다. Azure Key Vault 인증서 Spring Boot Starter를 사용하여 HTTPS 지원 호출된 앱에서 제공하는 TLS/SSL 인증서를 신뢰하도록 호출자 앱을 구성할 수 있습니다. 수신자 Spring Boot 앱은 Spring의 접근 방식을 사용하여 HTTPS를 사용하도록 설정하거나 앱에서 Azure Key Vault 인증서 Spring Boot Starter를 사용하여 통신을 보호할 수 있습니다. 자세한 내용은 자습서: Azure Key Vault 인증서를 사용하여 Spring Boot 앱 보호를 참조하세요.

세그먼트 5: 외부 시스템 통신에 대한 앱 보호

다음 세그먼트(다이어그램의 세그먼트 5)는 Azure Spring Apps에서 실행되는 앱과 외부 시스템 간의 통신을 나타냅니다. Azure Key Vault 인증서 Spring Boot Starter를 사용하여 외부 시스템에서 제공하는 TLS/SSL 인증서를 신뢰하도록 Azure Spring Apps에서 실행되는 앱을 구성할 수 있습니다. 자세한 내용은 자습서: Azure Key Vault 인증서를 사용하여 Spring Boot 앱 보호를 참조하세요.

Key Vault에서 앱으로 TLS/SSL 인증서를 암시적으로 로드

Spring 코드, Java 코드 또는 OpenSSL과 같은 오픈 소스 라이브러리가 JVM 기본 JCA 체인을 사용하여 JVM의 신뢰 저장소에 인증서를 암시적으로 로드하는 경우 TLS/SSL 인증서를 Key Vault에서 Azure Spring Apps로 가져오고 앱 내에서 해당 인증서를 사용할 수 있습니다. 자세한 내용은 Azure Spring Apps의 애플리케이션에서 TLS/SSL 인증서 사용을 참조하세요.

백 엔드 시스템에 대해 잘 알려진 공용 TLS/SSL 인증서 업로드

앱이 클라우드 또는 온-프레미스 시스템의 백 엔드 서비스와 통신하려면 통신을 보호하기 위해 공용 TLS/SSL 인증서를 사용해야 할 수 있습니다. 아웃바운드 통신을 보호하기 위해 이러한 TLS/SSL 인증서를 업로드할 수 있습니다. 자세한 내용은 Azure Spring Apps의 애플리케이션에서 TLS/SSL 인증서 사용을 참조하세요.

통신 보안을 위한 프로비저닝 및 구성 자동화

ARM 템플릿, Bicep 또는 Terraform을 사용하여 통신 보안을 위해 위에서 언급한 모든 Azure 리소스의 프로비저닝 및 구성을 자동화할 수 있습니다.

솔루션 빌드 및 통신 보안

Azure Spring Apps는 Spring Boot 애플리케이션에 대한 완전 관리형 서비스입니다. Azure Spring Apps는 사용자에서 비롯되는 인프라 및 Spring Cloud 미들웨어 관리의 복잡성을 추상화해줍니다. 따라서 사용자는 비즈니스 논리를 빌드하는 데 집중하고, Azure가 동적 스케일링, 패치, 보안, 규정 준수 및 고가용성 등을 처리하도록 할 수 있습니다. 몇 단계만 거치면 Azure Spring Apps를 프로비저닝하고, 애플리케이션을 만들고, Spring Boot 애플리케이션을 배포 및 스케일링하고, 몇 분 안에 통신 보안을 시작할 수 있습니다.

Azure Spring Apps는 Microsoft 및 VMware에서 공동으로 빌드, 운영 및 지원됩니다.

다음 단계