GWS로 우리 회사 AX 하는 법 무료 배포
Trivy 공급망 이슈로 보는 CICD 보안 구조
인사이트
최근 컨테이너 기반 배포 환경이 보편화되면서, 이미지를 중심으로 한 배포 구조가 표준처럼 자리잡고 있습니다. 코드가 아닌 이미지를 기준으로 배포가 이루어지고, 이 과정을 자동화하는 CI/CD 파이프라인 역시 필수요소가 되었습니다.
이와 함께 이미지 보안 스캔 또한 중요한 단계로 인식되고 있으며, 많은 환경에서 Trivy와 같은 도구를 활용하고 있습니다. 하지만 GitHub Actions에서 사용되는 Trivy Action 보안 스캔과 관련된 이슈까지 함께 살펴보겠습니다.
이번 글에서는 컨테이너 배포의 기본 흐름부터, GitHub Actions의 Trivy Action 보안 스캔과 관련된 이슈까지 함께 살펴보겠습니다.
1. 컨테이너 배포는 어떻게 이루어질까?
컨테이너 기반 배포는 일반적으로 코드 작성부터 시작해 이미지 빌드, 이미지 저장, 보안 스캔, 그리고 최종 배포까지의 흐름으로 이루어집니다.
① 코드 작성
개발자는 애플리케이션 구성 코드를 작성합니다. 이 코드는 Dockerfile이라는 설정 파일을 기반으로 하나의 '이미지'로 만들어집니다. Dockerfile은 어떤 운영체제를 사용할지, 어떤 라이브러리를 설치할지, 어떻게 실행할지를 미리 설정해 두는 일종의 실행 설명서라고 볼 수 있습니다.
② 이미지 빌드
Dockerfile에 정의된 내용을 바탕으로 컨테이너 이미지를 생성합니다. 이 과정에서 애플리케이션 코드뿐만 아니라, 실행에 필요한 라이브러리와 환경 설정까지 함께 구성됩니다. 단순히 코드를 복사하는 것이 아니라, 애플리케이션이 정상적으로 실행될 수 있는 환경을 하나의 이미지로 패키징하는 과정입니다. 이렇게 생성된 이미지는 어디서 실행하더라도 동일한 환경을 보장합니다.
③ 이미지 저장
빌드가 완료된 컨테이너 이미지는 이미지 레지스트리(저장소)에 업로드됩니다. 이미지 레지스트리는 컨테이너 이미지를 보관하는 저장소로, 대표적으로 Amazon ECR이나 Docker Hub와 같은 서비스가 사용됩니다. 저장된 이미지는 필요할 때 언제든지 가져와 실행할 수 있으며, 여러 서버나 환경에서 동일한 이미지를 기반으로 배포할 수 있습니다.
④ 보안 스캔
이미지가 저장된 이후에는, 해당 이미지에 취약점이 포함되어 있는지 확인하는 보안 스캔 과정을 거칩니다. 이미지 내부에 포함된 운영체제 패키지나 라이브러리에서 알려진 보안 취약점(CVE)이 존재하는지를 검사합니다. 오래된 라이브러리나 보안 패치가 적용되지 않은 패키지가 포함되어 있다면 실행 시 보안 위협으로 이어질 수 있기 때문에 사전에 이를 확인하는 것이 중요합니다. 보안 스캔은 필수 단계는 아니지만, 서비스 안정성과 보안 요구사항이 높아지면서 점점 중요해지고 있습니다.
⑤ 배포
보안 검증까지 완료된 이미지는 실제 서비스 환경에 배포되어 실행됩니다. 일반적으로 Kubernetes와 같은 컨테이너 오케스트레이션 환경에서 배포가 이루어지며, 여러 개의 컨테이너를 자동으로 관리하고 확장할 수 있도록 구성됩니다. 결과적으로 컨테이너 환경에서는 코드가 아닌 이미지를 기준으로 배포가 이루어지며, 동일한 환경을 유지하면서 일관된 배포를 수행할 수 있습니다.
2. 배포 과정을 자동으로 실행하는 GitHub Actions
컨테이너 배포의 여러 단계를 매번 수동으로 수행하기에는 번거롭고 실수가 발생하기 쉽습니다. 이를 해결하기 위해 등장한 것이 CI/CD 파이프라인이며, GitHub Actions를 통해 배포 과정을 자동화할 수 있습니다.
GitHub Actions는 코드 저장소에 변경이 발생했을 때, 미리 정의된 작업을 자동으로 실행해주는 도구입니다. .github/workflows 경로에 YAML 파일을 작성해 이미지 빌드, 저장, 배포 등의 단계를 순차적으로 정의하면, 코드가 업로드되는 순간 자동으로 실행됩니다.
또한 uses 구문을 통해 외부에서 제공되는 Action을 가져와 사용할 수 있어 복잡한 작업도 간단하게 구성할 수 있습니다. 다만 이 구조는 내가 작성하지 않은 외부 코드가 파이프라인 내부에서 그대로 실행된다는 특징을 가지며, 보안 측면에서 새로운 위험 요소가 될 수 있습니다.
3. 보안 도구에서 발생한 공급망 공격, Trivy 이슈
보안 스캔 단계에서 많이 사용되는 Trivy는 컨테이너 이미지의 운영체제 패키지, 라이브러리, 애플리케이션 의존성을 분석해 알려진 취약점을 확인해주는 도구입니다. 최근 이 과정에서 주목할 만한 보안 이슈가 발생했습니다. 문제는 Trivy 자체의 취약점이 아니라, GitHub Actions에서 Trivy를 실행하는 방식에 있었습니다. Trivy를 실행하는 Action이 공격자에 의해 변경되면서, 보안 취약점을 점검해야 할 코드가 악성 코드로 바뀌게 된 것입니다.
uses: aquasecurity/trivy-action@v0.69.4
겉으로는 동일한 버전(v0.69.4)을 사용하는 것처럼 보이지만, 실제로 실행되는 내부 코드는 이미 악성 코드로 바뀌어 있었습니다. 이번 이슈는 GitHub Actions에서 Trivy를 사용하는 경우에 해당하며, Aqua Security 상용 플랫폼의 Trivy에는 영향이 없는 것으로 확인되었습니다. 공식적으로 권장되는 대응 방안은 다음과 같습니다.
- 1단계: 안전한 버전으로 업데이트 Trivy 바이너리 v0.69.2 ~ v0.69.3, Trivy Action v0.35.0, setup-trivy v0.2.6으로 즉시 업데이트해야 합니다.
- 2단계: 비밀 정보 교체(Secrets Rotation) 손상된 버전이 실행되었을 가능성이 있다면, 파이프라인에서 접근 가능한 모든 비밀 정보를 노출된 것으로 간주하고 즉시 교체해야 합니다. AWS / GCP / Azure 자격 증명, Git 접근 키, 컨테이너 레지스트리 인증 정보, SSH 키 및 Kubernetes 토큰 등이 모두 대상에 포함됩니다.
4. AWS 환경에서 컨테이너 보안 스캔 구성하기
AWS 환경에서는 Amazon ECR을 통해 이미지를 저장하면서 동시에 취약점 스캔을 수행할 수 있습니다. CI/CD 파이프라인 내부에서 별도의 보안 도구를 실행하지 않아도, 이미지가 저장되는 시점에 검사가 이루어지는 구조입니다.
이 방식은 외부 Action 실행 과정에서 발생할 수 있는 공급망 리스크를 줄이고, 보다 안정적인 위치에서 보안 검사를 수행할 수 있다는 점에서 의미가 있습니다. 실무에서는 ECR 기반 스캔을 기본으로 활용하면서, 필요에 따라 배포 이전 단계에서 추가 검증을 병행하는 방식이 많이 사용됩니다.
컨테이너 보안은 특정 도구를 사용하는 것보다, 이미지 생성부터 배포까지의 전체 흐름을 어떻게 설계하느냐에 따라 달라집니다. 컨테이너 배포 설계가 필요하다면, 파이브클라우드가 실무에 맞는 방향으로 함께 도와드리겠습니다. 신규 구축이나 개선이 필요하신 경우 언제든지 파이브클라우드에 문의해 주세요.