워크로드에 알려진 취약점이 있는지 자동으로 스캔


이 페이지에서는 실행 중인 워크로드의 컨테이너 운영체제(OS)와 언어 패키지에서 알려진 취약점을 자동으로 스캔하고 가능한 경우 활용 가능한 완화 전략을 확인하는 방법을 설명합니다. 워크로드 취약점 스캔은 Google Kubernetes Engine(GKE) 클러스터 및 워크로드 보안을 개선하기 위한 독자적인 정보와 추천을 제공하는 기능 집합인 보안 상황 대시보드의 일부입니다.

자세한 내용은 워크로드 취약점 스캔을 참조하세요.

가격 책정

가격 책정 정보는 GKE 보안 상황 대시보드 가격 책정을 참조하세요.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • Google Kubernetes Engine API를 사용 설정합니다.
  • Google Kubernetes Engine API 사용 설정
  • 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우 gcloud components update를 실행하여 최신 버전을 가져옵니다.

요구사항

  • 워크로드 취약점 스캔을 사용하는 데 필요한 권한을 얻으려면 관리자에게 Google Cloud 프로젝트의 보안 상태 뷰어(roles/containersecurity.viewer) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

    이 사전 정의된 역할에는 워크로드 취약점 스캔을 사용하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.

    필수 권한

    워크로드 취약점 스캔을 사용하려면 다음 권한이 필요합니다.

    • resourcemanager.projects.get
    • resourcemanager.projects.list
    • containersecurity.locations.list
    • containersecurity.locations.get
    • containersecurity.clusterSummaries.list
    • containersecurity.findings.list

    커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

  • Advanced Vulnerability Insights를 사용하려면 GKE 버전 1.27 이상이 필요합니다.

워크로드 취약점 스캔 등급

등급에 취약점 스캔을 사용 설정하면 각 등급에 다음과 같이 스캔 기능이 추가됩니다. Google Kubernetes Engine(GKE) Enterprise 버전을 사용하여 클러스터 Fleet을 관리하는 경우 모든 구성원 클러스터에 적용되는 Fleet 수준의 취약점 스캔 설정을 구성할 수도 있습니다. 자세한 지침은 Fleet 수준에서 GKE 보안 상황 대시보드 기능 구성을 참조하세요.

등급 사용 설정된 기능 GKE 버전 요구사항
Standard
standard
컨테이너 OS 취약점 스캔
  • GKE Enterprise 에디션: 버전 1.27 이상을 실행하는 모든 새 클러스터에서 기본적으로 활성화됩니다.
  • GKE Standard 에디션: 버전 1.27 이상을 실행하는 모든 새 Autopilot 모드 클러스터에서 기본적으로 활성화됩니다. 모든 새로운 Standard 모드 클러스터에서 기본적으로 비활성화됩니다.
Advanced vulnerability insights
enterprise
  • 컨테이너 OS 취약점 스캔
  • 언어 패키지 취약점 스캔
  • GKE Enterprise 에디션: 버전 1.27 이상을 실행하는 모든 새 클러스터에서 기본적으로 활성화됩니다.
  • GKE Standard 에디션: 모든 새 클러스터에서 기본적으로 비활성화됩니다.

각 기능에 대한 자세한 내용은 워크로드 취약성 스캔 정보를 참조하세요.

컨테이너 OS 취약점 스캔 사용 설정

컨테이너 OS 취약점 스캔은 버전 1.27 이상을 실행하는 새로운 Autopilot 클러스터에서 기본적으로 활성화됩니다. 이 섹션에서는 새로운 기존 스탠다드 클러스터와 1.27 이전 버전을 실행하는 Autopilot 클러스터에서 이 기능을 활성화하는 방법을 설명합니다.

새 클러스터에서 컨테이너 OS 스캔 사용 설정

gcloud

gcloud CLI를 사용하여 새 GKE 클러스터를 만듭니다.

gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=standard

다음을 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동
  2. 만들기를 클릭합니다.
  3. GKE Standard 섹션에서 구성을 클릭합니다.
  4. 탐색창에서 보안을 클릭합니다.
  5. 보안 섹션에서 취약점 스캔 확인란을 선택합니다.
  6. 기본 옵션을 선택합니다.
  7. 클러스터의 다른 옵션을 구성하고 준비되면 만들기를 클릭합니다.

기존 클러스터에서 컨테이너 OS 스캔 사용 설정

gcloud

클러스터를 업데이트합니다.

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=standard

다음을 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 보안 상태 페이지로 이동합니다.

    보안 상태로 이동
  2. 설정 탭을 클릭합니다.
  3. 취약점 스캔 사용 설정된 클러스터 섹션에서 클러스터 선택을 클릭합니다.
  4. 추가할 클러스터의 체크박스를 선택합니다.
  5. 작업 선택 드롭다운 메뉴에서 기본으로 설정을 선택합니다.
  6. 적용을 클릭합니다.

Advanced Vulnerability Insights 사용 설정

Advanced Vulnerability Insights를 통해 실행 중인 애플리케이션에서 다음 취약점 유형을 지속적으로 검사할 수 있습니다:

  • 컨테이너 OS 취약점
  • 언어 패키지 취약점

Advanced Vulnerability Insights를 사용 설정하면 컨테이너 OS 취약점 스캔 기능이 자동으로 사용 설정되며 별도로 사용 중지할 수 없습니다.

요구사항

새 클러스터에서 Advanced Vulnerability Insights 사용 설정

gcloud

gcloud CLI를 사용하여 새 GKE 클러스터를 만듭니다.

gcloud container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=enterprise

다음을 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 Google Kubernetes Engine 페이지로 이동합니다.

    Google Kubernetes Engine으로 이동
  2. 만들기를 클릭합니다.
  3. GKE Autopilot 섹션에서 구성을 클릭합니다.
  4. 탐색창에서 고급 설정을 클릭합니다. Standard 클러스터를 만드는 경우 대신 보안을 클릭합니다.
  5. 보안 섹션에서 취약점 스캔 확인란을 선택합니다.
  6. 고급 옵션을 선택합니다.
  7. 클러스터의 다른 옵션을 구성하고 준비되면 만들기를 클릭합니다.

기존 클러스터에서 Advanced Vulnerability Insights 사용 설정

gcloud

클러스터를 업데이트합니다.

gcloud container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --workload-vulnerability-scanning=enterprise

다음을 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 보안 상태 페이지로 이동합니다.

    보안 상태로 이동
  2. 설정 탭을 클릭합니다.
  3. 취약점 스캔 사용 설정된 클러스터 섹션에서 클러스터 선택을 클릭합니다.
  4. 추가할 클러스터의 체크박스를 선택합니다.
  5. 작업 선택 드롭다운 메뉴에서 고급으로 설정을 선택합니다.
  6. 적용을 클릭합니다.

테스트 워크로드 배포

다음 예시 매니페스트에는 데모 목적의 알려진 취약점이 있습니다. 실제로 애플리케이션에 취약점이 있으면 이를 실행하지 않아야 합니다.

  1. 다음 매니페스트를 os-vuln-sample.yaml로 저장합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: frontend
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: guestbook
          tier: frontend
      template:
        metadata:
          labels:
            app: guestbook
            tier: frontend
        spec:
          containers:
          - name: php-redis
            image: us-docker.pkg.dev/google-samples/containers/gke/gb-frontend@sha256:dc8de8e0d569d2f828b187528c9317bd6b605c273ac5a282aebe471f630420fc
            env:
            - name: GET_HOSTS_FROM
              value: "dns"
            resources:
              requests:
                cpu: 100m
                memory: 100Mi
            ports:
            - containerPort: 80
    
  2. 알려진 Maven 취약점이 포함된 다음 매니페스트를 검토합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: maven-vulns
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mavenvulns
      template:
        metadata:
          labels:
            app: mavenvulns
        spec:
          containers:
          - name: maven-vulns-app
            image: us-docker.pkg.dev/google-samples/containers/gke/security/maven-vulns
            # This app listens on port 8080 for web traffic by default.
            ports:
            - containerPort: 8080
            env:
              - name: PORT
                value: "8080"
            resources:
              requests:
                memory: "1Gi"
                cpu: "500m"
                ephemeral-storage: "1Gi"
              limits:
                memory: "1Gi"
                cpu: "500m"
                ephemeral-storage: "1Gi"
  3. 선택적으로 클러스터의 사용자 인증 정보를 가져옵니다.

    gcloud container clusters get-credentials CLUSTER_NAME \
        --region=COMPUTE_REGION
    
  4. 클러스터에 애플리케이션을 배포합니다.

    kubectl apply -f os-vuln-sample.yaml
    kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/security/language-vulns/maven/deployment.yaml
    

다른 취약점을 테스트하려면 nginx와 같은 이전 이미지 버전을 스테이징 환경에 배포해 보세요.

결과 보기 및 작업 수행

초기 스캔에서는 스캔하는 워크로드 수에 따라 결과를 반환하는 데 15분 이상 걸립니다. GKE는 보안 상황 대시보드에 결과를 표시하고 항목을 Logging에 자동으로 추가합니다.

결과 보기

프로젝트 클러스터와 워크로드에서 발견된 문제에 대한 개요를 확인하려면 다음을 수행합니다.

  1. Google Cloud 콘솔에서 보안 상태 페이지로 이동합니다.

    보안 상태로 이동

  2. 문제 탭을 클릭합니다.

  3. 필터 문제 창의 문제 유형 섹션에서 취약점 체크박스를 선택합니다.

문제 세부정보 및 권장사항 보기

특정 취약점에 대한 자세한 정보를 보려면 해당 문제가 포함된 행을 클릭합니다.

취약점 문제 창에 다음 정보가 표시됩니다.

  • 설명: CVE 번호(해당하는 경우)가 포함된 문제에 대한 설명 및 취약점 및 잠재적 영향에 대한 자세한 설명입니다.
  • 권장 작업: 수정된 패키지 버전 및 수정을 적용할 위치 등 취약점 해결을 위해 수행할 수 있는 작업입니다.

발견된 문제의 로그 보기

GKE는 발견된 문제마다 항목을 Logging의 _Default 로그 버킷에 추가합니다. 이러한 로그는 특정 기간 동안만 보관됩니다. 자세한 내용은 로그 보관 기간을 참조하세요.

  1. Google Cloud 콘솔에서 로그 탐색기로 이동합니다.

    로그 탐색기로 이동
  2. 쿼리 필드에 다음 쿼리를 지정합니다.

    resource.type="k8s_cluster"
    jsonPayload.@type="type.googleapis.com/cloud.kubernetes.security.containersecurity_logging.Finding"
    jsonPayload.type="FINDING_TYPE_VULNERABILITY"
  3. 쿼리 실행을 클릭합니다.

GKE가 Logging에 새 발견 항목을 추가할 때 알림을 받으려면 이 쿼리에 대한 로그 기반 알림을 설정합니다. 자세한 내용은 로그 기반 알림 구성을 참조하세요.

삭제

  1. 배포한 샘플 워크로드를 삭제합니다.

    kubectl delete deployment frontend
    
  2. 원하는 경우 사용한 클러스터를 삭제합니다.

    gcloud container clusters delete CLUSTER_NAME \
        --region=COMPUTE_REGION
    

워크로드 취약점 스캔 사용 중지

워크로드 취약점 스캔을 사용하지 않도록 설정하려면 gcloud CLI 또는 Google Cloud 콘솔을 사용하세요.

gcloud

다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --region=LOCATION \
    --workload-vulnerability-scanning=disabled

다음을 바꿉니다.

콘솔

  1. Google Cloud 콘솔에서 보안 상태 페이지로 이동합니다.

    보안 상태로 이동
  2. 설정 탭을 클릭합니다.
  3. 취약점 스캔 사용 설정된 클러스터 섹션에서 클러스터 선택을 클릭합니다.
  4. 삭제하려는 클러스터의 체크박스를 선택합니다.
  5. 작업 선택 드롭다운 메뉴에서 사용 안함으로 설정을 선택합니다.
  6. 적용을 클릭합니다.

다음 단계