소프트웨어 정의 보안
더 많은 작업
- Software-Defined Security; SDSec, 코드형 보안(Security as Code), 코드형 정책(Policy as Code)
- 방화벽 규칙, 접근 정책, 암호화 설정 같은 보안 기능을 특정 하드웨어 장비에서 떼어 내 소프트웨어와 API로 정의하고 코드처럼 버전 관리·검증·자동 배포하는 방식
예전에는 보안 정책이 장비 안에 있었다. 방화벽 규칙은 방화벽 관리 화면에서, 스위치 ACL은 스위치 명령줄에서, 서버 설정은 서버마다 사람이 바꾸었다. 클라우드, 가상화, 컨테이너 환경에서는 서버와 네트워크가 몇 분 단위로 생기고 사라지므로 이 방식으로는 정책이 따라가지 못한다. 소프트웨어 정의 보안은 보안 통제를 API로 제어되는 소프트웨어 계층으로 옮기고, 정책을 사람이 읽을 수 있는 선언형 코드로 써서 인프라와 함께 자동으로 적용한다.
미국 NIST SP 800-204C는 클라우드 네이티브 애플리케이션 환경의 코드를 애플리케이션 코드, 애플리케이션 서비스 코드, 코드형 인프라(IaC), 코드형 정책(policy as code: 제로 트러스트 같은 런타임 정책을 선언형 코드로 정의), 코드형 관측(observability as code)의 다섯 유형으로 나누고, 이들을 모두 데브섹옵스 파이프라인으로 관리하라고 설명한다. CISSP 출제 기준 8.5는 시큐어 코딩 지침과 표준의 항목으로 '소프트웨어 정의 보안'을 명시한다. 즉 보안 정책을 코드로 쓰는 순간 그 코드에도 시큐어 코딩 원칙이 적용되어야 한다는 관점이다.
| 개념 | 설명 | 예 |
|---|---|---|
| 소프트웨어 정의 보안(SDSec) | 보안 기능을 하드웨어와 분리해 소프트웨어로 제공하고 중앙 제어 평면이 API로 정책을 배포 | 가상 방화벽, 클라우드 보안 그룹, 서비스 메시의 상호 TLS·인가 정책 |
| 코드형 보안(security as code) | 보안 요구사항, 검사, 설정 기준을 코드로 정의해 파이프라인에서 자동 실행 | 보안 기준선 설정 스크립트, 자동 보안 테스트, 탐지 규칙의 코드 관리 |
| 코드형 정책(policy as code) | 허용·거부 판단 규칙을 선언형 언어로 작성하고, 정책 엔진이 요청마다 평가 | OPA의 Rego 정책, 쿠버네티스 배포 승인 정책, 클라우드 조직 정책 |
| 코드형 인프라(IaC) | 서버·네트워크·스토리지 구성을 코드로 정의해 반복 배포 | 테라폼·클라우드 템플릿에 보안 그룹과 암호화 설정 포함 |
OPA(Open Policy Agent)는 범용 정책 엔진으로, 클라우드 네이티브 컴퓨팅 재단(CNCF)의 졸업(graduated) 프로젝트이다. OPA의 핵심 생각은 정책 결정(decision)과 정책 집행(enforcement)의 분리이다. 서비스는 "이 요청을 허용해도 되는가?"를 OPA에 질의하고, OPA는 Rego라는 선언형 언어로 쓰인 정책과 데이터를 평가해 결과를 돌려준다. 서비스는 그 결과에 따라 집행만 한다.
| 기술 | 소프트웨어 정의 보안과의 관계 |
|---|---|
| SDN | 네트워크의 제어 평면을 데이터 평면에서 분리해 중앙 컨트롤러가 소프트웨어로 트래픽 경로와 정책을 정한다. SDSec은 같은 원리를 보안 정책에 적용한 것으로, SDN 컨트롤러를 통해 마이크로 세그멘테이션과 격리 정책을 자동 배포한다. 데이터 평면과 제어 평면 참고. |
| 클라우드 보안 그룹 | 클라우드의 가상 방화벽 규칙을 API·템플릿으로 정의한다. 서버가 생길 때 역할 태그에 따라 규칙이 자동으로 붙는 것이 소프트웨어 정의 보안의 전형이다. 예: AWS 보안 그룹. |
| IaC 보안 스캔 | 배포 전에 IaC 템플릿을 정적 분석해 공개된 스토리지, 모든 IP에 열린 관리 포트, 암호화 미설정 같은 설정 오류를 찾는다. OWASP는 IDE 플러그인으로 이른 단계에서 IaC 위험을 잡고, 비밀을 IaC 파일에 넣지 말며, 모든 변경을 버전 관리하라고 권고한다. |
| 서비스 메시 | 마이크로서비스 사이의 상호 인증(mTLS), 인가, 트래픽 정책을 애플리케이션 밖의 사이드카·프록시 계층에서 코드형 정책으로 집행한다. |
| SASE·클라우드 보안 서비스 | 보안 기능을 클라우드 서비스로 제공하고 중앙 콘솔과 API로 정책을 일괄 배포한다. |
| 장점 | 위험 |
|---|---|
| 일관성: 같은 코드가 모든 환경에 같은 정책을 적용해 수작업 편차가 없다. | 설정 오류의 대규모 전파: 정책 코드 한 줄의 실수가 수천 개 자원에 동시에 배포된다. 수작업 시대의 오류가 한 장비에 그쳤다면 이제는 전체 환경으로 번진다. |
| 속도와 확장성: 자원이 생길 때 정책이 자동으로 붙는다. | 제어 평면 집중: 정책 컨트롤러, 파이프라인, 클라우드 관리 API 자격 증명을 탈취하면 모든 통제를 한 번에 무력화할 수 있다. |
| 감사 가능성: 정책 변경이 코드 이력과 리뷰 기록으로 남는다. | 코드 저장소와 파이프라인이 새 공격 표면이 된다(개발 환경 보안). |
| 시험 가능성: 정책을 배포 전에 단위 테스트하고 시뮬레이션할 수 있다. | 정책 언어·도구에 대한 전문성이 필요하고, 잘못 이해한 규칙이 의도와 다르게 동작할 수 있다. |
| 드리프트 탐지: 실제 설정이 코드와 달라지면 자동 탐지·복구할 수 있다. | 콘솔에서 직접 바꾼 긴급 변경이 다음 배포에서 덮어써지거나, 반대로 코드와 실제가 어긋난 채 방치될 수 있다. |
- 정책 코드도 일반 코드처럼 리뷰, 정적 분석, 단위 테스트를 거친다. 정책 저장소에는 직무 분리와 브랜치 보호를 적용한다.
- 단계적 배포: 감사(모니터링) 모드로 먼저 적용해 영향을 확인한 뒤 차단 모드로 바꾸고, 일부 환경부터 점진적으로 넓힌다.
- 제어 평면 보호: 컨트롤러와 관리 API 자격 증명에 특권 계정 관리, 다중 인증, 짧은 수명 토큰을 적용한다.
- 롤백 계획: 정책 배포 실패 시 이전 버전으로 즉시 되돌리는 절차를 준비하고, 기본값은 안전한 쪽(fail-secure)으로 정한다.
- 드리프트 감시: 지속적 보안 모니터링으로 코드와 실제 설정의 차이를 탐지한다.
- 소프트웨어 정의 보안의 핵심은 보안 정책을 하드웨어에서 분리해 코드·API로 정의하고 자동화하는 것이다.
- 가장 큰 위험은 설정 오류의 대규모 전파와 제어 평면 침해이다. 이에 대한 가장 좋은 대책은 정책 코드의 변경 관리(리뷰·테스트·단계적 배포)와 제어 평면 접근 통제이다.
- 코드형 정책은 정책 결정(PDP)과 집행(PEP)을 분리한다. 제로 트러스트 구조와 연결해 이해한다.
- IaC 보안 스캔은 배포 전에 설정 오류를 잡는 예방 통제이고, 드리프트 탐지는 배포 후의 탐지 통제이다.