K8s
  • Amazon EKS
  • 1.EKS 환경 구성
    • IDE 환경 구성
    • 인증/자격증명 및 환경 구성
  • 3.VPC구성과 eksctl 기반 설치
    • Cloudformation 구성
    • eksctl 구성
    • EKS 구성확인
  • 4.EKS Service 이해
    • Cluster IP 기반 배포
    • NodePort 기반 배포
    • Loadbalancer 기반 배포
  • 5.EKS Ingress
    • AWS Load Balancer Controller
  • 6.EKS 기반 관리
    • 패키지 관리 - Helm
    • 고가용성 Health Check 구성
    • 고가용성 Health Check 구성 (작업중)
    • Assign
    • 테인트와 톨러레이션
    • Pod 오버헤드 (Pod Overhead)
  • 7.Scheduling
    • 스케쥴링 - AutoScaling 구성
    • 스케쥴링-Karpenter
      • Basic Node Pool
        • Scaling Application
        • Limit Resources
        • Disruption
        • Drift
        • RightSizing
      • Multi NodePools
        • Team Based NodePool
        • Weighting NodePool
      • Cost Optimization
        • Consolidation
          • Single Node Consolidation
          • Multi Node Consolidation
          • Using Spot Instance
          • Spot to Spot Consolidation
        • Using Graviton
        • On-Demand & Spot Ratio Split
      • Scheduling Constraints
        • Node Affinity
        • Taints and Toleration
        • Topology Spread
        • Pod Affinity
        • Persistence Volume Topology
        • Pod Disruption Budget
        • Disruption Control
        • NodePool Disruption Budgets
        • Instance type and AZ
        • Multi-Arch
      • Control Pod Density
        • Static Pod Density
        • Dynamic Pod Density
        • Restrict Instance Type
      • EC2 Node Class
        • EC2 Node Classes
        • Custom AMI
        • Node Volumes
      • Observability
      • Migrating from Cluster Autoscaler
        • Install Cluster AutoScaler (CAS)
        • AutoScaling using Cluster AutoScaler (CAS)
        • Migrate from CAS to Karpenter
    • 스케쥴링-Karpenter (Old)
    • EKS Fargate (New)
    • EKS Fargate (old)
  • 8.Observability
    • K8s Dashboard 배포
    • Prometheus-Grafana
    • EFK기반 로깅
    • Container Insights
    • X-Ray기반 추적
    • Loki
  • 9. EKS Networking
    • Multus
    • VPC Advanced
    • External SNAT (TBD)
  • 10.EKS Storage
    • 볼륨/CSI
    • Stateful Container-EBS
    • Stateful Container-EFS
  • 11.EKS Security
    • 이미지 보안
    • OPA Gatekeeper
    • Kyverno
    • RBAC
    • IAM 그룹 기반 관리
    • IRSA (IAM Roles for Service Account)
    • Pod Security (TBD)
    • KMS 기반 암호화 (TBD)
    • Calico 네트워크 정책
  • 12.EKS CI/CD
    • Code Pipeline기반 CI/CD
    • Jenkins 기반 CI
    • WEAVE Flux 기반 GitOps (TBD)
    • Argo 기반 CD
    • Github Action & ArgoCD 기반 CI/CD
  • 13.EKS Service Mesh
    • Istio
      • Istio 소개
      • istio 설치와 구성
      • istio 트래픽 관리 1
      • istio 모니터링
      • Page 1
    • App Mesh (TBD)
  • Tip
    • Kubernetes 개념
      • Overview
      • Cluster Architecture
        • 노드
        • 컨트롤플레인과 노드간 통신
        • 컨트롤러
        • 클라우드 컨트롤러 매니저
      • Containers
        • 이미지
        • 컨테이너 소개
        • 런타임클래스
        • 컨테이너 환경변수
        • 컨테이너 라이프사이클 훅
      • Workloads
        • Pod
          • Pod 개요
          • Pod
          • Pod LifeCycle
          • 컨테이너 초기화
          • Pod 프리셋
          • 파드 토폴로지 분배 제약 조건
          • Untitled
        • Controller
      • Service-LB-Networking
      • Storage
      • Configuration
      • Security
      • Policies
      • Scheduling and Eviction
      • Cluster Admin
      • Extending Kubernetes
    • shell
    • git_source
    • aws cli
    • eksctl command
    • kubectl Command
    • helm command
    • Useful URL
Powered by GitBook
On this page
  • ECR Advanced Scanner
  • 1. ECR 환경 설정
  • 2. ECR 생성
  • 3. Enhanced Scanning
  • 4. 스캔 결과 확인

Was this helpful?

  1. 11.EKS Security

이미지 보안

Update : 2023-09-21

Previous11.EKS SecurityNextOPA Gatekeeper

Last updated 1 year ago

Was this helpful?

ECR Advanced Scanner

1. ECR 환경 설정

Container Image 보안 관련 실습을 진행하기에 앞서 ECR 에서 제공하는 Image Scanning 기능과 관련하여 환경 설정을 진행합니다. 아래의 명령을 실행하여 ECR 의 Scanning 과 관련할 설정을 변경하도록 합니다.

아래의 설정은 ECR Repository 에 Image 가 Push 되면 Enhanced Scanning Mode 를 사용하도록하며 Scanning 의 대상이 되는 Image 를 Filter(prod)로 제한하는 내용을 담고 있습니다.

aws ecr put-registry-scanning-configuration \
--scan-type ENHANCED \
--rules '[{"repositoryFilters" : [{"filter":"prod","filterType" : "WILDCARD"}],"scanFrequency" : "CONTINUOUS_SCAN"}]' \
--region $AWS_REGION

AWS Management Console 의 에서 아래와 같이 설정이 반영되어 있는 것을 확인합니다.

2. ECR 생성

ECR 환경 설정이 정상적으로 이뤄졌다면 이제 Container Image 와 관련된 각종 실습을 진행하기 위하여 ECR Repository 를 생성하도록 하겠습니다.

아래의 명령을 이용하여 3개의 ECR Repository 를 생성하도록 하겠습니다. 각 Repository 는 Production, Sandbox, Shared Image 용 Repository 로 각각 사용될 예정입니다.

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

ECR Repository 가 정상적으로 생성되었는지 확인합니다.

3. Enhanced Scanning

단계 1에서 설정한 ECR Registry 의 Enhanced Scanning 기능을 확인하기 위하여 Container Image 를 Push 하여 해당 Container Image 의 취약점을 진단하는지 확인하는 과정을 실습합니다. 먼저, ECR Repository 에 Push 할 Container Image 를 Cloud9 으로 Pull 합니다. 아래의 명령을 이용하여 Log4j 취약점을 포함하고 있는 Container Image 를 Pull 한 후 ECR Repository 에 Push 하기 위하여 Tag 를 설정하도록 합니다.

주의 !!! 실습에 사용한 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

Container Image 가 정상적으로 다운로드되었다면 ECR Repository 에 Push 하기 위하여 아래와 같이 AWS CLI 를 이용하여 Login 하도록 합니다.

aws ecr get-login-password --region $AWS_REGION | \
docker login --username AWS --password-stdin \
$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com

정상적으로 로그인이 되면 아래와 같은 결과를 확인 할 수 있습니다.

## ECR Login 예제입니다. ##
$ aws ecr get-login-password --region $AWS_REGION | \
> docker login --username AWS --password-stdin \
> $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
WARNING! Your password will be stored unencrypted in /home/ec2-user/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

ECR Registry 에 Login 이 성공하였다면 아래의 명령을 이용하여 조금 전 다운로드한 Container Image 를 두 개의 Repository 에 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

Cloud9 콘솔에서 Image 가 정상적으로 Push 되었다면 다음 단계를 진행합니다.

4. 스캔 결과 확인

"eks-security-sandbox" Repository 의 경우 아래와 같이 "Scanning" 이 꺼져있는 것을 확인할 수 있습니다. 즉, "eks-security-sandbox" Repository 에 Push 되는 Container Image 들은 취약점 Scanning 이 적용되지 않는다는 것을 알 수 있습니다.

"eks-security-prod" Repository 의 경우에는 아래와 같이 "See Findings" 링크가 있는 것을 확인할 수 있습니다. 해당 링크를 클릭하여 탐지된 취약점 리스트를 확인하도록 하겠습니다.

정상적인 경우 아래와 같이 Enhanced Scanning 기능을 통해 해당 Container Image 에 포함되어 있는 "Log4j" 취약점을 포함한 다양한 취약점들이 탐지된 것을 확인할 수 있습니다.

ECR Repository 에 Image 가 Push 되면 ECR 자체적으로 취약점 Scanning 을 시작합니다. 그리고 그 결과는 각 Image 가 Push 된 Repository 를 통해 확인할 수 있습니다 에 접속하여 현재 생성되어 있는 3개의 Repository 중 "eks-security-prod" 와 "eks-security-sandbox" Repository 에 각각 조금 전 Push 한 Container Image 가 Upload 되어 있는 것을 확인합니다.

ECR Repository 의 Enhanced Scanning 은 Amazon Inspector 와 통합되어 있는 기능으로 ECR Repository 뿐만 아니라 에서도 확인이 가능합니다. 에 접속하여 아래와 같이 "eks-security-prod" Repository 에 대한 취약점 정보를 확인하도록 합니다.

AWS Management Console 의 ECR 메뉴
AWS Management Console 의 Inspector 메뉴
Amazon Inspector 메뉴
ECR 메뉴