솔루션 아이디어
이 문서는 솔루션 아이디어 설명입니다. 클라우드 설계자는 이 지침을 사용하여 이 아키텍처의 일반적인 구현을 위한 주요 구성 요소를 시각화할 수 있습니다. 이 문서를 시작점으로 사용하여 워크로드의 특정 요구 사항에 맞는 잘 설계된 솔루션을 디자인할 수 있습니다.
이 솔루션 아이디어는 IaC용 GitHub를 사용하는 DevSecOps 파이프라인과 운영 우수성, 보안 및 비용 최적화를 위한 워크플로를 관리하는 방법을 보여줍니다.
Terraform은 Hashicorp의 상표입니다. 이 상표의 사용은 어떠한 보증도 의미하지 않습니다.
아키텍처
이 아키텍처의 Visio 파일을 다운로드합니다.
데이터 흐름
- 테스트 기반 개발에서는 IaC 템플릿과 같은 인프라 정의에 대한 코드 변경 내용을 GitHub 리포지토리에 체크 인합니다. 단위 테스트, 통합 테스트, PaC를 동시에 개발하여 IaC의 품질을 테스트합니다.
- PR(끌어오기 요청)은 GitHub Actions를 통해 자동화된 단위 테스트를 트리거합니다.
- 로컬로 배포된 인프라 상태 및 계획으로 IaC를 테스트하도록 GitHub Actions 워크플로 프로세스를 구성합니다.
- 코드 품질 및 보안 문제를 검사하도록 GitHub Actions를 구성합니다. 그런 다음, GitHub의 CodeQL에 빌드된 보안 검사 도구를 사용하여 IaC의 보안 취약성을 검색합니다. 취약성이 감지되면 GitHub는 조직 또는 리포지토리 소유자 및 관리자에게 경고를 보냅니다.
- IaC 도구는 각 환경에 대한 리소스를 프로비전하고 크기, 인스턴스 수 및 기타 속성을 맞게 수정합니다. 프로비전된 리소스에서 IaC에 대해 자동화된 통합 테스트를 실행할 수 있습니다.
- 인프라에 대한 수동 업데이트가 필요한 경우 지정된 관리자 액세스 권한이 수정을 수행하도록 상승됩니다. 수정 후에는 상승된 권한이 제거되고 문제가 GitHub에 기록되어 IaC가 조정되도록 합니다. 조정 단계 및 가능성은 특정 IaC 도구에 따라 달라집니다.
- SecOps는 지속적으로 모니터링하여 보안 위협 및 취약성으로부터 보호합니다. Azure Policy는 클라우드 거버넌스를 적용합니다.
- 변칙이 검색되면 수정을 위해 GitHub에서 문제가 자동으로 제기됩니다.
구성 요소
- GitHub는 버전 제어 및 협업을 위한 코드 호스팅 플랫폼입니다. GitHub 소스 제어 리포지토리에는 모든 프로젝트 파일과 해당 수정 기록이 포함되어 있습니다. 개발자는 함께 작업하면서 리포지토리에서 코드 관리하고 기여하고 토론할 수 있습니다.
- GitHub Actions는 CI(연속 통합), 자동화된 테스트 및 컨테이너 배포를 일련의 빌드 및 릴리스 워크플로를 제공합니다.
- GitHub Advanced Security는 IaC를 보호하는 기능을 제공합니다. 여기에는 다른 라이선스가 필요합니다.
- CodeQL은 인프라 구성 오류를 감지하기 위해 정적 코드에서 실행되는 보안 검색 도구를 제공합니다.
- Terraform은 HashiCorp에서 개발한 파트너 제품이며, Azure 및 기타 환경에서 인프라 자동화를 허용합니다.
- 클라우드용 Microsoft Defender는 하이브리드 클라우드 워크로드 전반에 걸쳐 통합 보안 관리 및 고급 위협 보호를 제공합니다.
- Microsoft Sentinel은 클라우드 네이티브 SIEM 및 SOAR(보안 오케스트레이션 자동화 응답) 솔루션입니다. 고급 AI 및 보안 분석을 사용하여 기업 전체에서 위협을 탐지하고 대응할 수 있도록 지원합니다.
- Azure Policy를 통해 팀은 클라우드 리소스에 규칙을 적용할 수 있는 정책 정의를 통해 IT 문제를 관리하고 방지할 수 있습니다. 예를 들어 프로젝트에서 인식할 수 없는 SKU를 사용하여 가상 머신을 배포하려는 경우 Azure Policy에서 문제를 알리고 배포를 중지합니다.
- Azure Monitor는 성능 메트릭 및 활동 로그와 같은 앱 원격 분석을 수집하고 분석합니다. 이 서비스에서 비정상적인 상태를 식별하면 앱과 직원에게 경고합니다.
시나리오 정보
개념적으로 IaC(Infrastructure as Code)에 대한 DevSecOps는 AKS의 애플리케이션 코드에 대한 DevSecOps와 유사 합니다. 그러나 IaC용 CI/CD(연속 통합 및 지속적인 업데이트)를 관리하고 자동화하려면 다른 파이프라인과 도구 집합이 필요합니다.
IaC를 채택할 때 코드를 개발하면서 자동화 테스트를 만드는 것이 중요합니다. 이러한 테스트는 워크로드가 확장될 때 IaC 테스트의 복잡성을 줄입니다. Terraform 상태 및 계획과 같은 로컬 인프라 구성 상태를 사용하여 IaC용 TDD(테스트 기반 개발)를 개발할 수 있습니다. 이러한 구성 상태는 실제 배포를 에뮬레이트합니다. Azure Resource Graph REST API를 사용하여 실제 인프라 배포에서 IaC에 대한 통합 테스트를 실행할 수 있습니다.
PaC(Policy as Code)는 규정 및 기업 거버넌스를 준수하는 인프라를 제공하는 중요한 방법이기도 합니다. PaC 워크플로를 파이프라인에 추가하여 클라우드 거버넌스를 자동화할 수 있습니다.
개발 단계 초기에 인프라를 보호하면 인프라를 잘못 구성하여 배포 후 공격 지점이 열릴 위험이 줄어듭니다. GitHub의 CodeQL을 사용하여 인프라용 정적 코드 분석 도구(예: Synk 또는 Aquasecurity tfsec)를 통합하면 인프라 코드의 보안 문제를 검사할 수 있습니다. 이 프로세스는 SAST(정적 애플리케이션 보안 테스트)와 비슷합니다.
인프라가 배포되어 운영 중일 때는 클라우드 구성 드리프트를(특히 프로덕션 환경에서) 해결하기 어려울 수 있습니다.
프로덕션 환경을 위한 클라우드 인프라를 배포하거나 수정하기 위한 전용 서비스 주체를 설정합니다. 그런 다음, 환경의 수동 구성을 허용하는 다른 모든 액세스를 제거합니다. 수동 구성이 필요한 경우에는 지정된 관리자의 액세스 권한을 상승시킨 다음, 변경 내용이 수정되면 상승된 액세스 권한을 제거합니다. GitHub에서 문제를 제기하도록 Azure Monitor를 구성하여 개발자가 변경 내용을 조정할 수 있도록 해야 합니다. 그러나 가능하면 수동 구성을 피해야 합니다.
보안 인시던트 방지를 위해 클라우드 환경에서 위협 및 취약성을 지속적으로 모니터링하는 것이 중요합니다. 위협 방지 및 SIEM(보안 정보 및 이벤트 관리) 도구를 사용하여 비정상적인 트래픽을 탐지할 수 있습니다. 이러한 도구는 보안 관리자에게 자동으로 경고하고 주의를 끌기 위해 GitHub에서 문제를 제기합니다.
잠재적인 사용 사례
귀하는 가상의 회사 Contoso에 다중 클라우드 전략을 사용하는 IaC 개발자로 구성된 중앙 팀의 일원입니다. 배포의 보안 및 품질을 보장하기 위해 IaC용 DevSecOps를 사용하여 새 Azure 랜딩 존에 클라우드 인프라를 배포하려고 합니다. 또한 인프라에 대한 모든 수정 사항을 추적하고 감사하려고 합니다.
참가자
Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.
주요 작성자:
- Vito Chin | 수석 클라우드 솔루션 설계자
- Yee Shian Lee | 수석 클라우드 솔루션 설계자
다음 단계
- DevSecOps에 사용할 선호하는 IaC 도구를 알아보고 IaC 보안 검사를 수행하기 위한 확장이 함께 제공되는지 확인합니다.
- 선호하는 IaC 언어 또는 템플릿인 Bicep 또는 Terraform on Azure에 대해 알아봅니다.
- 조직에 대한 GitHub 가이드
- GitHub Actions를 사용하여 Azure에 연결
- GitHub Actions
- 혁신 보안
- ARM용 AzOps 템플릿
- Terraform Landing Zones 모듈 및 솔루션
- Bicep을 사용하는 코드 제공 인프라 소개