중앙 집중식 구성

이 콘텐츠는 Azure용 클라우드 네이티브 .NET 애플리케이션 설계 eBook 에서 발췌한 것으로, .NET 문서에서 제공되거나 오프라인 상태에서도 읽을 수 있는 PDF(무료 다운로드 가능)로 제공됩니다.

Cloud Native .NET apps for Azure eBook cover thumbnail.

모든 항목이 단일 인스턴스 내에서 실행되는 모놀리식 앱과 달리 클라우드 네이티브 애플리케이션은 가상 머신, 컨테이너, 지리적 지역에 분산된 독립적인 서비스로 구성됩니다. 수십 개의 상호 종속된 서비스에 대한 구성 설정을 관리하는 것은 어려울 수 있습니다. 여러 위치에서 구성 설정의 중복 복사본은 오류가 발생하기 쉽고 관리하기 어렵습니다. 중앙 집중식 구성은 분산 클라우드 네이티브 애플리케이션에 대한 중요한 요구 사항입니다.

챕터1에서 설명한 것처럼 Twelve-Factor 앱 권장 사항에는 코드와 구성을 엄격하게 분리해야 합니다. 구성은 애플리케이션 외부에 저장되고 필요에 따라 읽기 전용이어야 합니다. 구성 값을 코드에 상수 또는 리터럴 값으로 저장하는 것은 위반입니다. 동일한 구성 값은 동일한 애플리케이션의 많은 서비스에서 자주 사용됩니다. 또한 개발, 테스트, 프로덕션과 같은 여러 환경에서 동일한 값을 지원해야 합니다. 가장 좋은 방법은 중앙 집중식 구성 저장소에 저장하는 것입니다.

Azure 클라우드는 몇 가지 유용한 옵션을 제공합니다.

Azure App Configuration

Azure App Configuration은 안전한 중앙 집중식 위치에 비밀이 아닌 구성 설정을 저장하는 완전 관리형 Azure 서비스입니다. 저장된 값은 여러 서비스 및 애플리케이션 간에 공유할 수 있습니다.

이 서비스는 사용하기 쉽고 다음과 같은 몇 가지 이점을 제공합니다.

  • 유연한 키/값 표현 및 매핑
  • Azure 레이블을 사용하여 태그 지정
  • 관리 전용 UI
  • 중요한 정보의 암호화
  • 쿼리 및 일괄 검색

Azure App Configuration은 키-값 설정에 대한 변경 내용을 7일 동안 유지 관리합니다. 특정 시점 스냅샷 기능을 사용하면 설정 기록을 다시 구성하고 실패한 배포에 대한 롤백도 수행할 수 있습니다.

App Configuration은 구성 저장소를 지나치게 호출하지 않도록 각 설정을 자동으로 캐시합니다. 새로 고침 작업은 캐시된 설정 값이 만료될 때까지 기다린 후 해당 설정을 업데이트합니다. 이는 구성 저장소에서 해당 값이 변경되는 경우에도 마찬가지입니다. 기본 캐시 만료 시간은 30초입니다. 만료 시간을 재정의할 수 있습니다.

App Configuration은 전송 중과 미사용 상태의 모든 구성 값을 암호화합니다. 키 이름 및 레이블은 구성 데이터를 검색하기 위한 인덱스로 사용되며 암호화되지 않습니다.

App Configuration은 강화된 보안을 제공하지만 애플리케이션 비밀을 저장하기에 가장 좋은 장소는 여전히 Azure Key Vault입니다. Key Vault는 하드웨어 수준 암호화, 세분화된 액세스 정책, 인증서 순환과 같은 관리 작업을 제공합니다. Key Vault에 저장된 비밀을 참조하는 App Configuration 값을 만들 수 있습니다.

Azure Key Vault

Key Vault는 비밀을 안전하게 저장하고 액세스하기 위한 관리되는 서비스입니다. 비밀은 API 키, 암호 또는 인증서와 같이 액세스를 엄격하게 제어하려는 모든 항목입니다. 자격 증명 모음은 비밀의 논리적 그룹입니다.

Key Vault를 사용하면 비밀이 우발적으로 유출될 가능성이 대폭 감소합니다. Key Vault를 사용하면 애플리케이션 개발자가 더 이상 애플리케이션에 보안 정보를 저장할 필요가 없습니다. 이렇게 하면 코드 내에 이 정보를 저장할 필요가 없습니다. 예를 들어 애플리케이션이 데이터베이스에 연결해야 할 수 있습니다. 연결 문자열을 앱 코드에 저장하는 대신 Key Vault에 안전하게 저장할 수 있습니다.

애플리케이션은 URI를 사용하여 필요한 정보에 안전하게 액세스할 수 있습니다. 이러한 URI를 사용하면 애플리케이션이 특정 버전의 비밀을 검색할 수 있습니다. Key Vault에 저장된 비밀 정보를 보호하기 위해 사용자 지정 코드를 작성할 필요가 없습니다.

Key Vault에 액세스하려면 적절한 호출자 인증 및 권한 부여가 필요합니다. 일반적으로 각 클라우드 네이티브 마이크로 서비스는 ClientId/ClientSecret 조합을 사용합니다. 이러한 자격 증명을 소스 제어 외부에 유지하는 것이 중요합니다. 애플리케이션 환경에서 설정하는 것이 가장 좋습니다. Key Vault FlexVolume을 사용하여 AKS에서 Key Vault에 직접 액세스할 수 있습니다.

eShop의 구성

eShopOnContainers 애플리케이션에는 각 마이크로 서비스가 포함된 로컬 애플리케이션 설정 파일이 포함되어 있습니다. 이러한 파일은 소스 제어에 체크 인되지만 연결 문자열 또는 API 키와 같은 프로덕션 비밀은 포함하지 않습니다. 프로덕션 환경에서 개별 설정을 서비스별 환경 변수로 덮어쓸 수 있습니다. 환경 변수에 비밀을 삽입하는 것은 호스팅된 애플리케이션의 일반적인 사례이지만 중앙 구성 저장소를 제공하지는 않습니다. 구성 설정의 중앙 집중식 관리를 지원하기 위해 각 마이크로 서비스에는 로컬 설정 또는 Azure Key Vault 설정 사용 간을 전환하기 위한 설정이 포함되어 있습니다.

참조