규정 준수를 위한 IaC(Infrastructure as Code) 리팩토링 패턴
플랫폼 엔지니어로서, 여러분은 개발자들이 애플리케이션을 배포할 수 있도록 여러 버전의 플랫폼을 운영하는 조직에서 근무할 수 있습니다. 이러한 플랫폼은 온프레미스 인프라스트럭처 또는 퍼블릭 클라우드 리소스를 포함할 수 있습니다. 시간이 지남에 따라, 구버전 플랫폼의 유지보수에 더 많은 시간이 소요되면서 새로운 버전 확장에 따른 플랫폼 확산(platform sprawl)을 경험하게 됩니다. 이로 인해 워크플로우가 조직 전반에 분산되어, 크로스 플랫폼 개선, 모니터링, 디버깅, 패치 작업이 훨씬 어려워집니다. 기술 부채를 줄이고 빠르게 제공하기 위해, 애플리케이션, 인프라스트럭처, 보안을 새로운 패턴과 워크플로우로 표준화하여 리팩토링할 필요가 있습니다. 애플리케이션, 인프라스트럭처, 보안의 표준화는 대규모 규정 준수 및 수정 작업을 간소화합니다.이 글에서는 여러 플랫폼과 애플리케이션 팀 전반에 걸쳐 인프라스트럭처 프로비저닝 및 패치 워크플로우를 리팩토링하는 패턴에 대해 논의하며, 위험 요소 발견과 수정에 드는 전체 노력 수준을 최소화하는 방법을 제시합니다. 낮은 위험과 강력한 규정 준수를 위해 실천하는 표준화 작업은 시간이 필요하지만, 정책을 코드로 구현하고 불변성과 같은 원칙을 적용하면 리팩토링이 간소화되고 팀들이 단일 기록 시스템으로 전환하도록 유도할 수 있습니다.☑️ 표준화의 어려움여러분의 조직이 데이터센터와 두 개의 퍼블릭 클라우드에 걸쳐 다섯 개의 서로 다른 플랫폼을 운영하고 있다고 상상해보세요. 각 플랫폼 내의 애플리케이션은 해당 플랫폼의 자동화 및 보안 접근 방식을 따르지만, 플랫폼마다 자동화와 변경 관리 방식은 다릅니다. 개발자들을 위한 플랫폼과 그 버전이 늘어날수록 “플랫폼 확산”은 시간이 지남에 따라 관리하기 어려워집니다.모든 플랫폼에 걸쳐 보안 이슈를 해결해야 할 때, 여러분은 영향을 받는 플랫폼을 식별하고 개별 플랫폼의 자동화 방식을 기반으로 문제를 수정하는 데 대부분의 시간을 소비하게 됩니다. 예를 들어, 온프레미스에서 OpenShift로 운영되는 Kubernetes 클러스터와 퍼블릭 클라우드에서 관리되는 클러스터의 업그레이드 프로세스가 따로 존재할 수 있습니다. 일관된 기록 시스템과 기초 자동화 시스템이 없다면, 몇 달 동안 같은 문제를 반복해서 수정하는 상황에 직면할 수 있습니다.구버전과 신버전 플랫폼을 어떻게 표준화할 수 있을까요? 플랫폼 간 표준화를 위한 리팩토링에는 세 가지 접근 방식이 있습니다. 1. 여러 플랫폼에 걸친 워크플로우 추상화 (예: 내부 개발자 포털 사용): 기존 애플리케이션에 미치는 영향은 가장 적지만, 높은 수준의 개발 노력이 필요합니다.2. Terraform을 통한 기존 인프라스트럭처의 신규 플랫폼 이식: 인프라스트럭처를 코드로 관리할 수 있어 표준화의 기반을 마련합니다. 인프라 설정에 의존하는 기존 애플리케이션에는 다소 혼란을 줄 수 있으나, 중간에서 높은 수준의 개발 노력이 필요합니다.3. 구버전 플랫폼에서 신버전 플랫폼으로 리소스 이전: 플랫폼 간 차이에 따라 기존 애플리케이션에 큰 영향을 주며, 높은 수준의 개발 노력이 요구될 수 있습니다.어떤 리팩토링 방식을 선택하든, 정책을 코드로 구현하는 방식과 불변성 원칙은 여러 팀, 플랫폼, 워크플로우에 걸쳐 표준을 전달하고 유지함으로써 리팩토링 노력을 장기적으로 지원합니다.☑️ 코드형 정책(Policy as Code)인프라스트럭처에 대한 정책에는 “승인된 데이터베이스 버전만 사용” 또는 “사설 레지스트리의 Terraform 모듈만 사용”과 같은 규칙이 포함될 수 있습니다. 이러한 정책을 수동으로 전달, 검증, 시행하는 데는 시간과 노력이 소요되지만, 정책을 코드로 구현하면 이 규칙들을 자동화, 문서화, 버전 관리할 수 있습니다.코드형 정책(Policy as Code)을 통해 조직 전체의 보안, 규정준수 및 감사, 비용 통제, 운영 탄력성 정책을 관리할 수 있습니다. 그리고 소프트웨어 전달 파이프라인을 통해 자동으로 인프라스트럭처에 적용되는 정책을 코드로 구현하는 방법은 도구와 접근 방식에 따라 다를 수 있습니다. (예: Terraform Enterprise와 HCP Terraform은 OPA 또는 고유의 정책 코드 시스템인 Sentinel을 사용할 수 있음) 이러한 방식은 정책 요구사항을 코드화하여 인프라스트럭처 구성이 조직의 기준에 부합하는지 테스트할 수 있도록 합니다.인프라스트럭처 및 보안 라이프사이클 관리를 위한 정책 코드 작성 방법은 다음과 같습니다. 1. 프로덕션에 적용하기 전에 인프라 구성 변경 사항을 확인하는 정책을 만들 수 있습니다. 여기에는 프로덕션에 적용하기 전에 Terraform 또는 Packer 구성에 대한 정적 분석 또는 단위 테스트가 포함되는 경향이 있습니다.2. 라이브 인프라에서 정책 준수 여부를 테스트할 수 있습니다. 이 패턴에는 테스트 또는 프로덕션 인프라(새 머신 이미지가 있는 가상 머신 등)의 정책 준수 여부를 확인하기 위한 동적 분석이 포함됩니다.정적 분석은 Terraform 코드가 조직 요구 사항을 준수하는지 여부에 대한 피드백을 더 빠르게 제공하므로 많은 워크플로에서 티켓 제출과 시간이 많이 소요되는 수동 검토의 필요성이 없어집니다.동적 분석은 프로덕션 환경의 실제 상태에 대한 예약된 피드백을 제공하고 조직 요구 사항을 준수하는지 확인합니다. 비상 수정 또는 자동 업그레이드와 같이 코드로 병합되지 않는 브레이크 글래스 또는 자동 변경 사항을 식별하는 데 도움이 됩니다.· 정적 분석 계획: 이해관계자의 도움을 받아, 플랫폼 팀은 Terraform과 통합되거나 네이티브로 지원하는(예: Sentinel) 정책 코드 프레임워크를 선택해야 합니다. 공개된 정책 세트(publicly avaiable policy set)을 시작점으로 올바른 Terraform 모듈 버전 확인 등의 정책 구성을 구축하는 방법을 배울 수 있습니다.· 동적 분석 계획: 테스트 또는 비프로덕션 환경에서 Terraform 사용자 정의 조건(Terraform custom conditions)을 사용해 서버가 최신 승인 이미지 버전을 사용하고 있는지 확인합니다. 프로덕션 환경에서는 HCP Terraform Health Assessments를 통해 구성 드리프트(configuration drift)를 감지하고 인프라스트럭처 리소스가 Terraform 코드와 일치하는지 지속적으로 검증합니다.| 정책과 사용자 정의 조건을 사용하는 경우Terraform의 경우, Sentinel 또는 OPA 정책과 사용자 정의 조건은 기능적으로 겹칠 수 있습니다. 다음은 각각을 사용할 때의 일반적인 가이드라인입니다. 정책 사용 모든 Terraform 실행에 적용되는 규칙에 사용합니다. 예를 들어:· 유효한 모듈 버전 확인· 사설 Terraform 레지스트리의 모듈 사용 확인사용자 정의 조건 사용제3자 서비스나 종속성에 대한 속성을 검증할 때 사용합니다. 예를 들어:· 특정 리소스 태그와 CMDB 비교· HCP Packer 메타데이터에 대한 속성 검증| 정책 세트 사용개별 정책들을 정책 세트(policy set)으로 구성하여, 기술 리더십 및 정책 이해관계자들이 구축, 테스트, 승인한 표준 정책을 조직 내 여러 팀에 배포할 수 있도록 해야 합니다. 정책 세의 주요 장점은 다음과 같습니다.1. 정책 정의는 한곳에 중앙 집중화됩니다. 예를 들어, 모든 AWS 및 Azure 정책 세트는 버전 제어로 구성되어 보안 및 규정 준수 팀의 업데이트를 간소화합니다.2. 그들은 관련 정책을 그룹화하여 모듈화와 구성을 장려합니다. 벤치마크 유형, 규정 준수 수준 및 지역별로 그룹화하면 다양한 팀이 인프라 또는 애플리케이션과 관련된 정책 세트를 적용할 수 있습니다. 예를 들어, 팀이 PCI(Payment Card Industry) 보안 표준을 준수해야 하는 경우 PCI 규정 준수를 위한 검사가 포함된 사전 구축된 정책 세트를 선택합니다. 다중 테넌트 Kubernetes 클러스터에서 실행되는 웹 애플리케이션을 지원하는 다른 팀은 Kubernetes 특정 정책 세트를 선택하여 클러스터에 보안 구성이 있는지 확인할 수 있습니다.☑️ 코드로서의 정책 표준화: 사례 시나리오아래 다이어그램은 한 예시를 보여줍니다. 퍼블릭 클라우드 #1에서 플랫폼 표준화를 진행한다고 상상해보세요. 플랫폼 C는 Terraform을 사용하여 모든 인프라스트럭처를 배포 및 관리하며, Sentinel 정책을 통해 관리형 서비스에 대한 안전한 머신 이미지와 버전을 확인합니다. 플랫폼 B는 개발자들이 정책 검사 없이 리소스를 수동으로 프로비저닝할 수 있도록 허용합니다.회사는 두 워크플로우 중 어느 하나도 의무화하지 않지만, 모든 클라우드 계정에 대해 매월 보안 스캔을 실행하여 잠재적 취약점을 식별하도록 요구합니다. 이번 달 스캔 결과, 플랫폼 B는 해결해야 할 보안 경고가 다수 발생한 반면, 플랫폼 C는 Sentinel 검사를 통해 모든 문제를 사전에 차단하여 이번 달 수정할 취약점이 없습니다. 매달 방대한 보안 취약점을 패치하고 고강도 수동 배포를 수행하는 대신, 플랫폼 B의 개발자와 운영 관리자는 플랫폼 C의 시간 절약형 워크플로우를 채택하고자 합니다. 플랫폼 B는 보다 성공적인 워크플로우를 도입하기 위해 HCP Terraform으로 표준화하기로 결정하고, 플랫폼 C 팀과 협력하여 전환 과정을 간소화합니다.HCP Terraform으로 인프라스트럭처를 마이그레이션한 후, 플랫폼 B 팀은 새 정책을 많이 작성할 필요가 없게 됩니다. 이는 플랫폼 C가 그들의 Sentinel 정책 세트를 공유하기 때문입니다. 이제 HCP Terraform을 통해 인프라스트럭처 변경이 적용될 때마다, 플랫폼 B의 개발자들은 조직 전체의 보안 및 규정 준수 모범 사례에 대한 즉각적인 피드백을 받게 됩니다. 결과적으로, 플랫폼 C와 유사한 검사 절차를 실행함으로써 수정해야 할 취약점 목록이 크게 줄어듭니다. 퍼블릭 클라우드를 사용하는 개발자가 늘어남에 따라, 플랫폼 B와 C 팀은 정책 세트를 공유하여 더 많은 팀의 인프라스트럭처 변경이 기본적으로 안전하고 규정을 준수하도록 할 수 있습니다.조직 내 다수의 팀이 인프라스트럭처와 정책에 대해 단일 기록 시스템을 사용하게 되면, 보안과 효율성의 이점은 배가되어 조직 전반에 긍정적인 영향을 미칩니다.이제 조직의 100% 플랫폼이 HCP Terraform과 플랫폼 C에서 시작된 동일한 핵심 정책 세트 사용한다고 상상해보세요. 그러면 모든 팀에 대해 보안 및 규정 준수 목표를 전달하고 시행할 수 있는 단일 평면이 마련됩니다.예를 들어, 한 보안 연구 기관이 조직의 일부 가상 머신 베이스 이미지에 영향을 주는 새로운 취약점을 발표했다고 가정해봅시다. 여러분의 팀은 HCP Packer를 사용해 해당 취약점이 없는 새로운 베이스 이미지를 생성하고 기존 이미지를 폐기할 수 있습니다. 그 후, 중앙 플랫폼 팀은 해당 취약점을 패치하는 새로운 머신 이미지 버전을 확인하는 조직 전역의 Sentinel 정책을 업데이트할 수 있습니다. 조직 내 어느 팀이든 다음번 terraform apply를 실행할 때, 서버 수정이 필요하다는 알림을 받게 됩니다. Sentinel 정책은 모든 플랫폼과 팀에 걸쳐 안전한 머신 이미지라는 보안 목표를 효과적으로 전달합니다.☑️ 불변성(Immutability)이미지 취약점 패치 관리(VPM) 시나리오를 계속해서 보겠습니다. 각 팀이 안전한 머신 이미지에 대한 Sentinel 정책 검사를 통과하지 못하면, 수정 조치를 취해야 합니다. 팀은 업데이트된 머신 이미지를 사용하도록 Terraform 모듈과 구성을 수정합니다. 여러분의 조직 팀이 애플리케이션의 설정과 시작을 자동화하기 때문에, 단 한 줄의 Terraform 코드 변경만으로도 최소한의 간섭과 중단으로 새로운 인프라스트럭처 리소스를 생성할 수 있습니다. Terraform을 사용함으로써, 기존 이미지를 제자리에서 업데이트하는 대신, 불변성 원칙에 따라 기존 리소스를 파괴하고 업데이트된 새 리소스를 생성한 것입니다.불변성은 다음과 같은 몇 가지 이점을 제공합니다.1. 종속성 관리 복잡성 감소: 패키지에 취약점이 있을 때, 소프트웨어 종속성의 다양한 버전을 식별하여 업데이트해야 하는 부담을 줄입니다.2. 상위 종속성에 미치는 영향 최소화: 트래픽을 점진적으로 새로운 머신으로 전환하여 애플리케이션이 제대로 동작하는지 확인할 수 있습니다.3. 플랫폼 간 리팩토링 등 대규모 사용 사례에 대한 확장성 제공| 마이그레이션에서 불변성 활용구버전 플랫폼에서 신버전 플랫폼으로의 마이그레이션은 불변성 원칙의 혜택을 받을 수 있습니다. 예를 들어, 비규정 준수 서버에서 HashiCorp Nomad 클러스터가 운영되는 퍼블릭 클라우드로 자바 애플리케이션을 마이그레이션한다고 상상해보세요. Nomad job을 실행하여 자바 애플리케이션을 설명함으로써 불변성 원칙을 적용할 수 있습니다. 또한, 로드 밸런서를 운영하여 구버전 자바 애플리케이션과 신버전 Nomad 잡 간의 트래픽을 제어할 수 있습니다. 이 기법은 블루-그린 배포(blue-green deployment)라고도 하며, 신버전 Nomad 잡에서 문제가 발생할 경우 상위 사용자나 서비스에 미치는 중단 효과를 완화합니다.플랫폼 전반에 걸친 리팩토링이 특히 어려워 보일 때, 마이그레이션 워크플로우에 불변성 원칙을 적용하면 위험을 낮추는 접근 방식을 제공할 수 있습니다. 비용과 시간이 더 소요될 수 있지만, 이는 플랫폼과 리소스를 표준화하는 데 있어 신중한 접근법을 제공합니다.☑️ 코드형 정책과 불변성이 위험 발견과 수정 속도를 높이는 방법오늘날 많은 조직이 보안 및 규정 준수 위험과 관련된 문제를 해결하는 데 너무 많은 시간을 소모하고 있으며, 주로 위험 발견과 수정에 집중하고 있습니다.정책을 코드로 구현하면 위험 발견을 배포보다 우선시하고 가속화할 수 있습니다. 인프라스트럭처와 플랫폼의 표준화는 위험 발견을 확산시키며, 보안 실행 방식의 단편화로 인한 위험을 제거합니다. 또한, 모든 플랫폼이 유사한 자동화를 사용하여 변경 사항을 배포하므로 수정 시간도 단축됩니다.불변성은 추가적인 위험을 도입하지 않으므로 수정 시간을 단축합니다. 기존 인프라를 제자리에서 변경하는 대신, 깨끗한 상태에서 시작함으로써 구성 드리프트와 종속성 문제를 방지할 수 있습니다.☑️ 코드형 정책과 불변성이 리팩토링에 미치는 도움플랫폼 확산 문제를 다룰 때, 여러 플랫폼을 표준화하는 작업은 매우 많은 노력을 요구할 수 있습니다. 모든 리소스를 단일 표준으로 리팩토링하기보다는, 정책을 코드로 구현하여 제시한 표준에 맞게 플랫폼과 인프라스트럭처의 일부만 선택적으로 리팩토링할 수 있습니다.정책을 코드로 구현하면, 알려진 규정 준수 및 보안 기준을 캡처하는 테스트가 제공되어 인프라스트럭처를 생성하는 모든 팀에 이를 전달할 수 있습니다. 점점 더 많은 팀이 정책을 코드로 구현하는 자동화된 프로비저닝의 이점을 체감하면서, 채택과 표준화가 자연스럽게 이루어질 것입니다. 또한, 마이그레이션과 리팩토링과 관련된 위험을 완화하기 위해 불변성 원칙을 적용하는 것을 고려해볼 수 있습니다. 불변성은 시스템 중단을 최소화하면서 변경 사항을 롤아웃할 수 있는 반복 가능한 기반을 제공하며, 향후 인프라스트럭처와 보안 수정 시간을 줄여줍니다.▶ 하시코프(HashiCorp) : 자세히보기HashiCorp는 클라우드에 대한 보다 스마트한 접근 방식을 제공합니다. Infrastructure Cloud로 가장 중요한 애플리케이션을 지원하는 인프라 및 보안 수명주기 관리를 자동화합니다. 인프라 및 보안 수명주기 관리를 코드로 전환하고, 워크플로우를 자동화하고, 중앙 기록 시스템을 구축하여 개발자가 더 빠르게 작업할 수 있도록 지원하며 배포가 이루어지기 전에 비용 및 거버넌스 정책을 시행합니다. 클라우드네트웍스는 전담팀을 통해 테라폼, 볼트를 포함한 하시코프 제품군의 구축 및 기술지원 서비스를 제공합니다. 하시코프에 대한 문의사항은 공식 파트너사인 클라우드네트웍스로 연락 부탁드립니다.
April 30, 2025