*Docker 이미지를 푸시하거나 취약점 스캔을 실행하려고 CodeBuild를 설정하는 것에 지치셨나요? *
*AWS CodePipeline의 새로운 ECRBuildAndPublish와 InspectorScan 액션을 통해 이제 파이프라인 내에서 이미지를 직접 구축, 게시, 보호할 수 있어 추가 설정 없이 사용할 수 있습니다. 어떻게 작동하는지 궁금하신가요? 그럼 시작해 봅시다!*
동기

2024년 11월 26일 – re:Invent 2024를 앞두고 AWS가 ECRBuildAndPublish와 InspectorScan 액션을 도입하는 흥미로운 업데이트를 발표했습니다. 이 업데이트는 Docker 이미지 구축과 게시를 간소화하여 파이프라인이 원활하게 처리할 수 있게 합니다.
이번 업데이트가 여러분에게 어떤 의미인가요?
업데이트 😭 이전
Docker 이미지 빌드와 취약점 스캔을 파이프라인에 통합하려면 CodeBuild 프로젝트를 수동으로 구성해야 했습니다. 이 과정에는 다음이 포함됩니다:
- CodeBuild 프로젝트 구성 설정 중.
- ECR 및 기타 자원에 대한 안전한 접근을 보장하기 위해 IAM 역할과 권한 관리.
- Docker 이미지를 빌드하고 푸시하는 명령어가 포함된 buildspec.yml 파일을 작성하고 유지하기.
- 이미지 또는 소스 코드를 스캔하기 위한 서드파티 보안 도구 통합, 추가 설정과 비용이 필요합니다.
- 학습 곡선과 운영 오버헤드 처리로 인해 파이프라인 납품이 지연될 수 있습니다.
업데이트 🤩 이후
CodePipeline의 새로운 ECRBuildAndPublish 와 InspectorScan 액션을 통해 이러한 복잡성이 모두 제거되었습니다:
- 단순히 ECR 저장소 이름을 정의하고 소스 코드 저장소의 Docker파일을 가리키면 됩니다.
- CodePipeline은 이미지를 자동으로 빌드하고 ECR로 푸시하며, 취약점 스캔까지 통합하여 별도의 CodeBuild 프로젝트 없이 지원합니다.
- 이는 설치 시간이 줄고, 복잡성이 줄며, 자원 소비가 줄어든다는 뜻입니다.
*이번 업데이트는 파이프라인 구성을 단순화할 뿐만 아니라 컨테이너화된 워크플로우 자동화의 진입 장벽을 낮춰 팀이 운영 세부사항보다는 혁신에 더 집중할 수 있게 합니다. *
이 행동들에 대한 주요 노트
- ECRBuildAndPublish 액션 은 CodePipeline의 Amazon ECR 소스 액션 과 동일하지 않습니다. CodePipeline은 Amazon ECR 소스 저장소에 변경이 발생할 때 파이프라인을 트리거합니다.
- 두 동작 모두 CodePipeline이 관리하는 CodeBuild 컴퓨트를 사용하여 별도의 AWS CodeBuild 요금이 발생합니다.
실제 사용 보기: CodePipeline에서 ECRBuildAndPublish 및 InspectorScan 설정
건축 도면

- 사용자가 코드를 확인한다.
- 파이프라인 작동.
- InspectorScan의 SourceCodeScan 동작은 소스 코드의 취약점을 점검하기 위해 실행됩니다.
- 통과되면 도커 이미지가 구축되어 ECR로 푸시됩니다.
- 그 후 InspectorScan의 ECRImageScan을 최종 점검하여 ECR 저장소에 푸시된 도커 이미지의 취약점을 점검합니다.
전제 조건
- AWS 계정 접근
- 이미 아마존 ECR 저장소를 생성했습니다
- 도커파일
참고: 이 블로그에서는 Code pipeline action에 의한 취약점 스캔 결과를 보여주기 위해 Log4j cve가 포함된 취약한 DockerFile을 사용하고 있습니다. 운영 환경에서는 사용하지 마세요.
- Dockerfile 저장소 : https://github.com/jatinmehrotra/log4jpoc
ECR 저장소 생성
- 새 저장소 생성, 원하는 이름 붙일 수 있어
파이프라인을 만들어라
- Build custom pipeline 옵션을 사용해 새로운 코드피플라인을 생성합니다.

- 저는 GitHub를 소스 제공자로 사용하고 있어서, 저장소에 변경이 있으면 파이프라인이 실행됩니다.codestar 연결을 c로 설정해야 합니다.
- ECRBuildAndPublish 액션 을 추가하고 ECR 저장소를 지정합니다

- 배포 단계를 건너뛰고 파이프라인을 생성합니다.
- 파이프라인이 자동으로 실행되어 이미지를 ECR로 푸시합니다

참고: 만약 'toomanyrequests: pull rate 한도에 도달했습니다.'라는 오류가 보인다면, 인증 및 업그레이드를 통해 한도를 높일 수 있습니다. 그렇다면 AWS ECR 공개 갤러리의 기본 이미지를 사용해 보세요
큰 문제 🚨
- 이 블로그를 쓰는 시점에서, 콘솔에서 파이프라인을 생성하면(이 옵션은 오랫동안 기본 옵션이었습니다), 제가 콘솔에서 파이프라인을 만들면 자동으로 실행됩니다.

- 이 문제는 ECRBuildAndPublish 조치의 경우에만 매우 큰 문제입니다. 왜냐하면 취약한 도커 이미지가 ECR로 푸시되고, K8 같은 다운스트림 시스템이 그 이미지에서 컨테이너를 배포하면 취약한 애플리케이션이 배포된다면 큰 문제가 될 수 있기 때문입니다.
- 이 문제는 콘솔에서 파이프라인을 생성할 때 취약점을 검사하는 다른 단계나 행동을 추가할 수 없기 때문에 파이프라인 실행에 실패하고 이미지가 ECR 저장소에 게시되지 않기 때문입니다.

- 콘솔에서 이 문제가 해결될 때까지 더 많은 제어를 위해 IaC를 사용하는 것을 권장합니다.
AWS InspectorScan 테스트
- InspectorScan 작업은 SourceCodeScan 또는 ECRImageScan 두 가지 모드로 가능합니다
- 저는 소스 코드 취약점과 Docker 이미지 취약점을 모두 컨테이너로 담은 Repository를 사용했습니다.
- 저에게 행동을 추가하고 CI/CD를 안전하게 보호할 수 있는 이상적인 장소는 다음과 같습니다:
- ECRBuildAndPublish 작업 전에 InspectorScan 액션의 SourceCodeScan을 추가(빌드 단계)
- ECRBuildAndPublish 작업 후 InspectorScan 행동의 ECRImageScan 추가
InspectorScan의 SourceCodeScan 테스트
- 파이프라인 편집
- 스테이지를 추가하고, 이름은 검사 코드로 제시합니다

- 스테이지에 액션 그룹을 추가하고 편집하기
- Aws 인스펙터 스캔으로 액션 제공자 추가

- 실행 모드를 소스 코드 스캔으로 선택하세요
- 치명, 고, 중, 낮은 음의 임계값을 0으로 지정하세요. 이는 파이프라인을 실패시키는 데 매우 중요합니다. 이는 소스에서 발견된 치명적, 높음, 중간, 낮은 심각도 취약점의 수를 의미하며, 그 이상을 넘어서는 코드파이프라인은 이 작업을 실패해야 합니다.
- 선택한 출력 아티팩트 이름을 지정하고 파이프라인 변경 사항을 저장한 후 수동으로 파이프라인을 실행하세요.
- 보시다시피 파이프라인이 실행 전에 ECRBuildAndPublish 동작(빌드 단계)에 도달하기 전에 실패했습니다.
InspectorScan의 ECRImageScan 테스트
- ECRImageScan은 ECR 저장소에 있는 이미지를 스캔합니다. 태그가 포함된 이미지가 없으면 이 동작은 자동으로 실패합니다.
- ECRBuildAndPublish 작업 후에 액션을 추가해야 하므로 단계는 소스 코드 스캔과 동일하게 유지됩니다.

- ECR 저장소 내에서 푸시된 도커 이미지를 스캔할 때 새로운 단계와 액션을 추가할 예정입니다.

- 파이프라인을 통과하기 위해 소스 코드 스캔에서 임계값을 제거하여 실행을 ECRImageScan까지 전달합니다.
- 저장 후 파이프라인을 수동으로 실행

솔루션 아키텍트 관점에서
- ECRBuildAndPublish 와 InspectorScan 액션, 그리고 10월에 출시된 명령 액션 의 도입은 컨테이너화된 워크플로우를 단순화하는 데 있어 중요한 진전을 의미합니다. 추가 CodeBuild 설정의 필요성을 없애고 보안 스캔을 원활하게 통합함으로써 AWS는 파이프라인을 더 빠르고 접근성 있게 만들었습니다.
- 하지만 콘솔을 통해 생성된 파이프라인의 자동 실행 은 특히 취약한 이미지가 ECR로 유통될 가능성 때문에 타당한 보안 우려를 제기합니다. AWS가 수정 조치를 도입하기 전까지, 인프라 as Code(IaC)가 파이프라인 제어를 유지하는 가장 좋은 방법입니다.
이번 업데이트는 강력한 보안 조치를 보장하면서 더 빠르게 혁신하려는 팀에게 획기적인 변화를 가져옵니다.
📣 이 업데이트들에 대해 어떻게 생각하시나요?
🔍 비슷한 어려움을 겪었거나 창의적인 우회 방법을 찾으셨나요?