| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- 볼륨추가
- ebs 마운트
- EC2
- 디스크 성능테스트
- /etc/fstab 설정
- Terrafrom
- 테라폼 자동완성
- 컨테이너 터미널 로그아웃
- EBS 최적화
- 테라폼 설치
- Authenticator
- AWS
- MFA 분실
- epxress-generator
- 테라폼 캐시
- ebs 재부팅
- 리눅스
- 리눅스 시간대
- 테라폼 맥
- /etc/fstab 뜻
- MFA 인증
- EBS
- AWS EBS
- 컨테이너 터미널
- 볼륨 연결
- docker 상태
- xfs_quota
- 텔레메트리란
- docker -i -t
- Mac Terraform
- Today
- Total
I got IT
EKS Security - ECR Enhanced Scanning 본문
※ 해당 글은 CloudNet@ gasida 님의 EKS 스터디 내용을 참고하여 작성하였습니다.
또한 다음 EKS Hands on lab 을 참고하였습니다. 🔗
들어가며
컨테이너 이미지는 애플리케이션을 실행하는 기반이므로, 보안이 취약하면 악성 코드 실행, 데이터 유출, 시스템 장악 등의 심각한 보안 사고가 발생할 수 있습니다. 특히, 공격자가 악의적인 이미지를 Kubernetes 클러스터에서 실행할 경우, 클러스터 전체가 위험에 노출될 수 있습니다.
따라서 컨테이너가 루트 권한을 사용하지 못하도록 설정하는 것도 이와같이 이미지의 취약성과 탈취 문제의 이슈도 있기 때문입니다. 따라서 이미지를 검사하고 취약점을 분석하는 것은 보안에 있어서 매우 중요한 요소입니다.
ECR Scanning
AWS ECR(Amazon Elastic Container Registry)에서는 컨테이너 이미지의 보안을 강화하기 위해 이미지 스캐닝(Image Scanning) 기능을 제공합니다. ECR의 스캐닝 기능에는 Basic Scanner와 Advanced Scanner 두 가지 옵션이 있으며, 주요 차이점은 취약점 탐지 범위와 기능의 고급화 정도입니다.
ECR Basic Scanner VS ECR Advanced Scanner
| 기능 | Basic Scanner | Advanced Scanner |
|---|---|---|
| 비용 | 무료 | 유료 (Amazon Inspector 요금) |
| 취약점 데이터 소스 | Amazon의 기본 CVE DB | Amazon Inspector 및 최신 CVE DB |
| 운영 체제 패키지 검사 | 지원 | 지원 |
| 애플리케이션 라이브러리 검사 | 미지원 | 지원 (Python, Java, Node.js 등) |
| 지속적인 스캔(Continuous Scanning) | 미지원 (푸시 시점 스캔) | 지원 (새로운 취약점 발견 시 자동 업데이트) |
| 자동 보안 업데이트 | 미지원 | 지원 |
| AWS Security Hub 연동 | 미지원 | 지원 |
| 실시간 알림 및 위협 탐지 | 미지원 | 지원 |
Basic Scanner는 운영 체제 수준의 패키지 취약점 분석만 제공하며, 비용이 들지 않지만 탐지 범위가 제한적입니다.
Advanced Scanner는 Amazon Inspector와 통합되어, 애플리케이션 코드까지 심층적인 보안 검사가 가능하며, 자동화된 지속 스캐닝 기능을 제공합니다. 하지만, 추가 비용이 발생합니다.
💡 보안이 중요한 엔터프라이즈 환경에서는 Advanced Scanner가 더 적합하지만, 기본적인 OS 패키지 검사만 필요하면 Basic Scanner를 활용하는 것이 경제적입니다.
ECR Advanced Scanner 사용하기
ECR 스캔 모드 설정하기
다음 명령어를 사용하여 Advanced Scanner를 활성화 합니다.
aws ecr put-registry-scanning-configuration \
--scan-type ENHANCED \
--rules '[{"repositoryFilters" : [{"filter":"prod","filterType" : "WILDCARD"}],"scanFrequency" : "CONTINUOUS_SCAN"}]' \
--region $AWS_REGION

- 특정 레포지토리(‘prod’ 포함)에서 지속적인(Continuous) 취약점 스캐닝을 수행하도록 설정. 새로운 취약점이 발견될 때마다 자동으로 스캔 결과를 갱신합니다.
- ECR의 레지스트리 스캐닝 정책을 설정하여 Advanced Scanning(ENHANCED) 기능을 활성화.
- 모든 계정의 리포지토리의 기본 값은 basic 입니다.
- ENHANCED 옵션은 OS 패키지 + 애플리케이션 라이브러리까지 검사 하는 기능 포함.
- 기본적으로 ECR 세팅은 계정 단위로 설정되며 하위 리포지토리로 상속됩니다. 이 때 모든 리포지토리에 대한 지속적인 스캐닝과 향상된 스캐닝을 사용할 필요가 없고 비용효율을 위해서 prod 이름을 포함하는 리포지토리만 지속스캔을 하도록 합니다.
- 옵션에 대한 자세한 설명은 다음 링크를 참고하시기 바랍니다. 🔗
해당 명령어를 수행하면 다음과 같이 웹콘솔에서 반영된 것을 확인할 수 있습니다.

ECR 생성
다음 코드를 사용하여 3개의 리포지토리를 생성합니다.
aws ecr create-repository --repository-name eks-security-prod
aws ecr create-repository --repository-name eks-security-sandbox
aws ecr create-repository --repository-name eks-security-shared
# 리포지토리 확인하기
aws ecr describe-repositories | jq '.repositories[].repositoryName'

스캐닝
이제 직접 이미지를 Pull 하여 스캔을 해봅니다. 스캐닝 기능을 테스트하기 위해 일부러 Log4j 취약점이 포함된 이미지를 Pull 할 것입니다. 이 후 해당 이미지를 각 eks-security-prod, eks-security-sandbox 저장소에 push 하기 위해 이미지에 태그를 달아줍니다.
⚠️ 실습에 사용한 Container Image 는 취약점을 포함하고 있으므로 절대 실제 운영환경에서는 절대 사용 금지
docker pull public.ecr.aws/docker/library/neo4j:4.4.0
docker tag public.ecr.aws/docker/library/neo4j:4.4.0 $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/eks-security-prod
docker tag public.ecr.aws/docker/library/neo4j:4.4.0 $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/eks-security-sandbox

이미지가 정상적으로 다운로드 되었음을 확인했으면 ECR repo에 Push 하기위해 AWS CLI를 이용해 로그인 해줍니다. 도커허브에 로그인하는 것과 같은 맥락입니다.
aws ecr get-login-password --region $AWS_REGION | \
docker login --username AWS --password-stdin \
$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
로그인을 성공하면 다음과 같은 화면이 출력됩니다.

ECR Registry 에 Login 이 성공하였다면 아래의 명령을 이용하여 위에서 Pull한 이미지를 각각의 저장소에 Push 하도록 합니다.
docker push $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/eks-security-prod
docker push $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/eks-security-sandbox
이미지를 성공적으로 Push 했으면 다음과 같이 웹콘솔에서 이미지가 업로드 된것을 확인할 수 있습니다.


이 때 각각의 이미지를 눌러서 확인해 보면 eks-security-prod 리포지토리에서는 스캐닝 결과가 표시된 것을 확인할 수 있습니다. 이는 위에서 repositoryFilters 를 사용하여 prod 가 붙은 리포지토리만 continouos scanning 을 사용할 것을 설정하였기 때문입니다.


eks-security-prod 에 업로드된 이미지의 취약성을 살펴보면 다음과 같이 위에서 언급한 Log4j의 취약점이 탐지된 것을 확인할 수 있습니다. 이것으로 Advanced Scanner는 이미지의 라이브러리의 취약점까지 스캔한다는 것이 검증이 되었습니다.

또한 해당 취약점들은 Amazon Inspector와 연동이 되기 때문에 해당 결과를 Inspector 서비스 페이지 에서도 확인이 가능합니다.


Amazon Inspector 와의 연동
Amazon Inspector는 EventBridge로 이벤트를 발송하여 스캔 결과를 알립니다. EventBridge를 사용하여 취약성이 탐지되면 자동으로 알람을 설정할 수 있습니다. 따라서 Enhanced Scanning을 사용하면 이러한 기능을 사용하여 이미지의 취약점이 탐지되면 EventBridge 를 통해 실시간으로 확인할 수 있는 모니터링 환경을 구현이 가능합니다.
취약점 모니터링 하기

ECR 스캐닝을 통해 탐지된 취약점을 간단하게 메일로 받아보는 파이프라인을 구성해 봅니다.
이벤트 브릿지의 대상을 SNS 뿐만 아니라 람다로 하여서 슬랙 웹훅으로 Route 할수도 있습니다. 또는 DynamoDB 로 전송하여 탐지된 결과를 따로 저장할 수 도있습니다.
이번 포스팅에서는 간단하게 이미지를 푸시할 때 취약점이 탐지되면 메일로 받아볼 수 있도록 파이프라인을 구성해 봅니다.
SNS 설정
다음 명령어를 사용하여 SNS 주제를 생성합니다.
aws sns create-topic --name my-vulnerability-notice
이메일 구독 생성
aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-2:$ACCOUNT_ID:my-vulnerability-notice \
--protocol email \
--notification-endpoint $MY_EMAIL
구독을 생성하면 confirmation 메일이 전송됩니다. Confirm subscription 버튼을 눌러줍니다.

EventBridge Rule 생성
ECR 스캔 발생 → Inspector 에서 Finding 발생 이벤트를 탐지 하기 위해 이벤트브릿지 규칙을 생성해 줍니다.
이 때 Inspector finding 에서 CRITICAL, HIGH 결과만 전달하기 위해 패턴을 다음과 같이 설정합니다.
aws events put-rule --name "image-vulnerability-event-rule" \
--event-pattern '{
"source": ["aws.inspector2"],
"detail-type": ["Inspector2 Finding"],
"detail": {
"severity": ["CRITICAL", "HIGH"]
}
}' \
--state ENABLED
해당 이벤트의 대상으로 위에서 생성한 SNS 주제를 설정해 줍니다.
aws events put-targets --rule "image-vulnerability-event-rule" --targets "[
{
\"Id\": \"1\",
\"Arn\": \"arn:aws:sns:ap-northeast-2:$ACCOUNT_ID:my-vulnerability-notice\"
}
]"
이제 ECR 이 탐지되면 메일로 수신하기 위한 파이프라인 구성은 모두 완료되었습니다.
취약점이 포함된 이미지 ECR 로 푸시하기
취약점이 포함된 컨테이너 이미지를 의도적으로 다운로드하여 보안 테스트나 연구를 진행하려는 경우, 다음과 같은 이미지를 활용할 수 있습니다
- docker pull bkimminich/juice-shop
- docker pull vulnerables/web-dvwa
- docker pull vulnerables/web-dvwa
그 중에서 WebGoat은 OWASP에서 제공하는 또 다른 교육용 웹 애플리케이션으로, 다양한 취약점을 학습하고 실습할 수 있도록 설계되었습니다. 취약점이 포함된 이미지를 Pull 합니다.
docker pull vulnerables/web-dvwa
이미지를 푸시하기 위해 이전에 했던 대로 이미지를 ecr repository로 태깅 하고 푸시하여줍니다. 그전에 eks-security-prod-2 리포지토리를 하나 생성합니다.
# ECR respository 생성
aws ecr create-repository --repository-name eks-security-prod-2
# 이미지 푸시하기 위한 ecr 태그설정
docker tag webgoat/webgoat-8.0 $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/eks-security-prod-2
# 이미지 푸시
docker push $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/eks-security-prod-2

이미지를 푸시하면 해당 repository는 continuous 스캔이 켜져있기 때문에 이미지가 스캔되고 발견된 취약점이 위 파이프라인을 통해 메일로 전송됩니다.


위와 같은 형태로 AWS Event 형식의 raw 데이터가 전송됩니다.
해당 데이터를 람다로 파싱하여 가공해서 슬랙웹훅으로 보내거나 StepFunction을 사용하여 조취를 취한다던지 다양한 방법으로 응용이 가능합니다.
정리
지금까지 ECR Advanced Scanning 모드를 사용해 봤습니다.
ECR Advanced Scanning은 AWS 환경 내에서 빠르고 쉽게 취약점 검사를 수행할 수 있는 장점이 있지만, 서드파티 솔루션 대비 기능이 제한적인 한계가 있습니다. 멀티 클라우드 환경에서는 Nexus 같은 서드파티 솔루션과 병행 운영하는 것이 현실적인 접근 방법이지 않을까 싶습니다.
또한 CI/CD에서 자동으로 취약점 있는 이미지를 차단하는 기능이 부족하므로, Lambda 또는 EventBridge를 활용한 추가적인 정책을 구현해야 할 것 같습니다.
그럼에도 불구하고 별도의 설치나 운영 관리해야할 공수 없이 간단하고 빠르게 이미지 취약점 검사를 수행할 수 있기 때문에 편의성에 대한 장점이 큰 것 같습니다.
'AWS > EKS' 카테고리의 다른 글
| EKS Auto Mode (0) | 2025.03.23 |
|---|---|
| EKS Security - OPA 로 정책 적용하기 (0) | 2025.03.16 |
| EKS Autoscaling - 3 (Karpenter) (0) | 2025.03.09 |
| EKS Autoscaling - 2 (Node level) (0) | 2025.03.09 |
| EKS Autoscaling - 1 (Pod level) (0) | 2025.03.08 |