소개
Kubescape는 위험 분석, 보안 준수, RBAC 시각화 및 이미지 취약점 스캐닝을 위해 개발된 오픈 소스 Kubernetes 도구로, Armosec가 개발했습니다. 또한 Kubescape는 Kubernetes 매니페스트를 스캔하여 배포를 공격 위험에 노출시킬 수 있는 잠재적인 구성 문제를 감지할 수 있습니다. 또한 Helm 차트를 스캔하고 RBAC(역할 기반 액세스 제어) 위반을 감지하며 위험 점수 계산을 수행하고 시간에 따른 위험 트렌드를 보여줄 수 있습니다.
Kubescape 주요 기능:
- Kubernetes 구성 오류를 감지하고 Armosec 클라우드 포털을 통해 복구 지원을 제공합니다.
- 위험 분석 및 시간 경과에 따른 추세를 Armosec 클라우드 포털을 통해 확인할 수 있습니다.
- ArmoBest, NSA, MITRE 및 Devops Best Practices와 같은 여러 보안 준수 프레임워크를 포함합니다.
- 예외 관리 지원을 통해 Kubernetes 관리자가 허용 가능한 위험 수준을 표시할 수 있습니다.
- Jenkins, Github 워크플로우, Prometheus 등과 같은 다양한 도구와 통합됩니다.
- 이미지 스캐닝 – 이미지를 취약점에 대해 스캔하고 쉽게 보고, 정렬 및 필터링할 수 있습니다(먼저 패치할 취약점 선택).
- RBAC 복잡성을 단순화하여 클러스터의 RBAC 구성을 보여주는 쉽게 이해할 수 있는 시각적 그래프를 제공합니다.
Kubescape를 실행하는 방법은 다음과 같습니다:
- 명령 줄 인터페이스(CLI)를 통해. 이것은 스크립트 및 다양한 자동화, CI/CD 파이프라인 내에서 실행하는 선호되는 방법입니다. 결과는 분석을 위해 Armosec 클라우드 포털에 업로드될 수 있습니다.
- 크론 작업으로 Kubernetes 클러스터 내에서. 이 모드에서 Kubescape는 Kubernetes 클러스터의 변경 사항을 지속적으로 모니터링하고 검사 결과를 Armosec 클라우드 포털에 업로드합니다. 이 기능은 DOKS 클러스터에 Armo 클러스터 구성 요소를 배포한 경우에만 작동합니다.
- Armosec 클라우드 포털 웹 인터페이스를 통해. 구성 스캐닝, 이미지 스캐닝을 트리거하고, RBAC 규칙을 보고 검사하며, 프레임워크를 사용자 정의할 수 있습니다. 이 기능은 DOKS 클러스터에 Armo 클러스터 구성 요소를 배포한 경우에만 작동합니다.
- 귀하의 Visual Studio Code IDE 내에서. 이렇게 하면 개발 초기 단계에서 문제를 매우 빠르게 찾을 수 있습니다.
Kubescape는 다음과 같은 다양한 프레임워크를 사용하여 구성 오류를 감지합니다:
Kubescape는 무료입니까?
네, 도구 및 커뮤니티 에디션은 영구히 무료이며, 클라우드 포털 백엔드 구현 및 다른 고급 기능에 대한 비용이 발생할 수 있습니다. 클러스터 당 스캔할 수 있는 최대 워커 노드 수에는 제한이 있습니다(최대 10대까지). Armo 클라우드 포털에서의 스캔 보고 데이터 보존은 한 달로 제한됩니다.
자세한 내용은 가격 요금제를 참조하십시오.
Kubescape는 오픈 소스입니까?
네, 도구 자체는 확실히 오픈 소스입니다. 각 구성 요소 구현에 대한 자세한 내용은 Armo GitHub 홈페이지에서 확인할 수 있습니다. 그러나 클라우드 포털 백엔드 구현은 오픈 소스가 아닙니다.
이 가이드에서는 Kubernetes 애플리케이션 공급망(컨테이너 이미지, Kubernetes YAML 매니페스트)에 대한 위험 분석을 수행하기 위해 Kubescape를 사용한 후 상황을 해결하기 위한 적절한 조치를 학습합니다. 마지막으로, Kubescape를 CI/CD 파이프라인에 통합하여 개발 초기 단계에서 취약점을 스캔하는 방법을 학습합니다.
목차
- 소개
- 요구 사항
- 단계 1 – Kubescape CLI 알아보기
- 단계 2 – Armosec 클라우드 포털 알아보기
- 단계 3 – DOKS용 Kubescape 자동 스캔 구성
- 단계 4 – CI/CD 파이프라인에서 Kubernetes 구성 취약점을 스캔하는 Kubescape 사용
- 단계 5 – Kubescape 스캔 결과 조사 및 보고된 문제 해결
- 단계 6 – Kubescape CI/CD 워크플로우 자동으로 트리거하기
- 단계 7 – 지속적인 모니터링을 위한 Slack 알림 활성화
- 결론
- 추가 자료
전제 조건
이 가이드의 모든 단계를 완료하려면 다음이 필요합니다:
- A working
DOKS
cluster runningKubernetes version >=1.21
that you have access to. For additional instructions on configuring a DigitalOcean Kubernetes cluster, see: How to Set Up a DigitalOcean Managed Kubernetes Cluster (DOKS). - A DigitalOcean Docker Registry. A free plan is enough to complete this tutorial. Also, make sure it is integrated with your DOKS cluster as explained here.
- Kubectl Kubernetes 상호 작용을 위한 CLI. 이
kubectl
및doctl
로 클러스터에 연결하는 지침을 따르십시오. - Helm, Kubernetes 클러스터에 Kubescape를 설치하기 위해.
- Kubescape CLI Kubescape 취약점 스캐너와 상호 작용하기 위해.
- A free Armosec Cloud Portal account used to periodically publish scan results for your Kubernetes cluster to a nice dashboard. Also, the Armosec portal web interface helps you with investigations and risk analysis.
- A Slack workspace you own, and a dedicated Slack app to get notified of vulnerability scan issues reported by Kubescape.
단계 1 – Kubescape CLI 알아보기
kubescape
명령줄 인터페이스를 통해 취약점을 수동으로 검사할 수 있습니다. kubescape CLI는 다양한 스크립트 및 자동화에서 사용할 수 있도록 설계되었습니다. Tekton, Jenkins, GitHub Workflows 등의 다양한 도구를 사용하여 구현된 CI/CD 파이프라인에서 실용적인 예제입니다.
kubescape는 전체 Kubernetes 클러스터를 무엇이든 (작업 부하, 컨테이너 등) 스캔하도록 설계되었습니다. 원하는 경우 특정 네임스페이스로 스캔을 제한할 수도 있습니다. 다른 기능으로는 호스트 스캔 (워커 노드), 로컬 또는 원격 저장소 스캔 (예: GitHub), Kubernetes YAML 매니페스트 또는 Helm 차트에서 구성 오류 검색이 있습니다. ArmoBest, NSA, MITRE 등의 다양한 프레임워크는 framework
명령을 통해 선택할 수 있습니다.
kubescape CLI가 호출되면 알려진 취약점 데이터베이스를 로컬 머신에 다운로드하거나 업데이트합니다. 그런 다음 스캔 프로세스를 시작하고 특정 형식으로 문제를 보고합니다. 기본적으로 표준 출력 또는 콘솔을 사용하여 요약 테이블을 인쇄합니다. Kubescape는 JSON, HTML, SARIF 등의 다른 형식으로 보고서를 생성할 수도 있습니다.
스캔 결과를 나중에 스캔 결과를 저장하고 시각화하기 위해 --submit
플래그를 사용하여 Armosec Cloud Portal로 보낼 수도 있습니다.
참고: Armosec 클라우드 포털로 스캔 결과를 제출하는 것은 필수적이지 않습니다. 포털을 사용하는 큰 장점은 가시성입니다. 스캔 보고서 및 전체 리스크 점수를 확인할 수 있는 멋진 대시보드에 액세스할 수 있기 때문입니다. 또한 조사 및 복구 힌트에 대해 장기적으로 도움이 됩니다.
kubescape CLI로 시도할 수 있는 몇 가지 예시:
-
전체 Kubernetes 클러스터를 스캔하고 콘솔(표준 출력)에 요약 보고서를 생성합니다:
-
스캔에 특정 네임스페이스만 사용:
-
스캔에서 특정 네임스페이스 제외:
-
특정 네임스페이스를 스캔하고 결과를 Armosec 클라우드 포털에 제출:
-
특정 프레임워크(예: NSA)를 사용하여 클러스터 스캔 수행:
Kubescape는 Kubernetes 클러스터 호스트(또는 워커 노드)를 OS 취약점으로 스캔할 수 있습니다. 이 기능을 활성화하려면 kubescape CLI에 --enable-host-scan
플래그를 전달해야 합니다. 이 플래그가 활성화되면 kubescape는 클러스터에 sensors
를 배포합니다. 센서는 각 노드에 Pod를 배포하는 Kubernetes 데몬세트를 사용하여 알려진 취약점을 스캔합니다. 스캔 프로세스가 완료되면 센서가 클러스터에서 제거됩니다(관련된 Kubernetes 리소스 포함).
Kubescape CLI는 모든 사용 가능한 옵션에 대한 도움말 페이지를 제공합니다. 아래 명령은 주요 도움말 페이지를 인쇄하는 데 사용될 수 있습니다:
출력은 다음과 유사합니다:
kubescape CLI 명령(또는 하위 명령)마다 연관된 도움말 페이지도 있으며 이는 kubescape [command] --help
를 통해 액세스할 수 있습니다.
더 많은 예제를 보려면 공식 kubescape CLI 문서 페이지를 방문해주세요.
단계 2 – Armosec 클라우드 포털 알아보기
Armosec는 쿠베스케이프 스캔 결과를 업로드하고 위험 분석을 수행할 수 있는 편리한 클라우드 기반 포털을 제공합니다. 이는 각 스캔 보고서를 시각화하고 검토하며 적절한 조치를 취하여 상황을 개선한 후 스캔을 다시 실행하여 결과를 확인하려는 경우에 매우 유용합니다. 각 보고서와 관련된 위험 점수에 대한 좋은 시각적 표현을 갖는 것은 보고된 보안 문제를 해결하기 위해 필요한 조사 및 반복 작업에 장기적으로 도움이 됩니다.
무료로 계정을 생성할 수 있으며 주로 (예: 테스트 또는 개발 요구 사항에 대한) 충분할 것으로 예상되는 10개의 워커 노드와 1개월의 데이터 보존이 제공됩니다. kubescape
클라우드 계정을 생성하는 방법에 대해 더 자세히 알아보려면 공식 문서 페이지를 참조하십시오.
계정을 생성한 후 고유한 사용자 ID가 생성되며 해당 계정에 대한 스캔 결과를 업로드하는 데 사용할 수 있습니다. 예를 들어, 스캔 결과를 업로드해야 하는 특정 자동화(예: CI/CD 파이프라인)가 있을 수 있으므로 관련된 사용자 ID가 여러 테넌트 간에 구별되도록 필요합니다.
위험 점수 분석 및 추세
Armosec 클라우드 계정에 업로드된 각 스캔 보고서마다 새로운 이력 레코드가 추가됩니다. 이 레코드에는 발견된 문제 목록과 관련된 위험 점수가 포함됩니다. 이를 통해 시간이 지남에 따른 위험 점수의 추세 및 관련 그래프를 확인할 수 있습니다. 또한 주요 보안 문제 목록도 주요 대시보드에 생성됩니다.
아래 그림은 이러한 기능을 설명합니다:
Kubescape 위험 점수 값 이해
각 스캔에서 kubescape는 내부 컨트롤을 사용하여 잠재적인 보안 위험을 확인합니다. Kubescape 제어는 클러스터의 특정 측면을 확인하기 위해 하부에서 사용되는 테스트를 나타내는 도구입니다. 더 나아가, 프레임워크는 특정 자원(또는 스캔되는 리소스)을 스캔하기 위해 내부적으로 사용되는 제어 또는 테스트의 모음입니다. 따라서 사용하는 프레임워크에 따라 다양한 체크 스위트가 수행됩니다(그러나 일부 테스트는 일부 공통점을 공유합니다). 마지막으로, 각 테스트와 연관된 위험 요소에 따라 최종 점수가 계산됩니다.
최종 점수는 0에서 100%까지의 양수입니다. 낮은 값은 최상의 점수를 나타내며, 높은 값은 최악을 나타냅니다. 따라서 안전한 쪽에 있고 싶다면 가능한 한 낮은 값을 목표로 해야 합니다. 실제로는 30% 이하의 위험 점수가 좋은 시작점이 될 것입니다.
보고된 보안 문제에 대한 지원된 교정
Armosec 클라우드 포털에서 제공하는 또 다른 유용한 기능은 보안 문제 해결 지원입니다. 이것은 kubescape 스캐너에서 발견된 각 보안 문제를 고치는 방법에 대한 권장 사항을 받는 것을 의미합니다. 이는 과정을 간소화하고 각 보고된 보안 문제를 해결하기 위해 수행해야 하는 각 반복에 대한 루프를 닫습니다.
아래 그림은 이 과정을 더 잘 설명합니다:
각 보고된 보안 문제에는 클릭하여 교정 지원을 받을 수 있는 렌치 도구 아이콘이 표시됩니다:
다음으로, 새 창이 열리며, 초록색으로 강조된 각 영향을 받는 Kubernetes 객체에 대한 세부 정보가 제공됩니다:
C-0018
, C-0030
, C-0086
등과 같은 각 제어를 클릭하여 강조된 문제를 조사할 수 있습니다. 각 보안 문제를 해결하는 방법에 대한 제안이 제시됩니다. 남은 것은 힌트를 따르고 각 보안 문제를 해결하는 것뿐입니다.
웹 UI에서 클러스터 스캔 트리거링
Armo 클라우드 포털은 Armo 클라우드 구성 요소 헬름 차트가 DOKS 클러스터에 배포된 경우 웹 인터페이스에서 클러스터 스캔을 트리거할 수 있는 기능을 제공합니다(다음 단계에서 설명함). 구성 및 이미지 스캔은 포털에서 한 번의 클릭으로 트리거할 수 있습니다. 이 기능을 사용하려면 Armo 클라우드 구성 요소가 클러스터를 백그라운드에서 스캔을 완료하고 결과를 업로드할 때까지 기다려야 합니다.
구성 스캔을 트리거하는 방법은 구성 스캔 페이지로 이동하여 스캔 버튼을 클릭하는 것입니다. 아래 사진은 이 작업을 수행하는 방법을 보여줍니다:
원하는 경우 스캔을 자동으로 실행할 현재 일정을 설정하거나 수정할 수도 있습니다. 스캔 버튼을 클릭한 후 나타나는 팝업 창에서 일정 버튼을 클릭하여이 작업을 수행할 수 있습니다. 동일한 창을 사용하여 스캔에 사용할 제어 프레임워크를 선택할 수 있습니다. 아래 사진은 이러한 작업을 수행하는 방법을 보여줍니다:
단계 3 – DOKS용 Kubescape 자동 스캔 구성
Armo Helm 차트는 전체 Kubernetes 클러스터 및 컨테이너 이미지에 대한 취약점 스캔을 트리거하는 cron 작업을 설치합니다. 각 cron 작업 간격은 Helm 값 파일에서 구성할 수 있습니다.
Armo 클러스터 구성 요소를 DOKS에 프로비저닝하기
kubescape
를 Helm을 사용하여 Kubernetes 클러스터에 배포하는 단계:
Helm
리포를 추가하고 사용 가능한차트
를 나열하십시오:
출력은 다음과 유사합니다:
참고:
흥미로운 차트는 Kubernetes 클러스터에 Armo 구성 요소를 설치할 armo/armo-cluster-components
입니다. 이 차트에 대한 자세한 내용은 armo-helm 리포지토리 페이지를 방문하십시오.
- 쿠베스케이프 CLI를 사용하여 Armo 계정 사용자 ID를 가져옵니다(다음 단계에서 필요함):
출력은 다음과 유사합니다:
참고:
kubescape
CLI를 사용하여 스캔 결과를 Armosec 클라우드 포털에 제출한 적이 없는 경우 위 명령이 작동하지 않습니다. 이 경우 포털에 로그인하여 여기에 설명된대로 계정 ID를 가져와야 합니다.
Helm
을 사용하여 Armo Kubescape 클러스터 구성 요소를 설치합니다. 해당<>
자리 표시자를 적절히 대체하세요:
–create-namespace \
참고:
armo-cluster-components
Helm 차트의 특정 버전을 사용합니다. 이 경우 1.7.15
버전을 선택했으며, 이는 Armo 클러스터 구성 요소의 1.7.15
릴리스에 해당합니다(단계 1.
의 출력 참조). 일반적으로 특정 버전에 맞추는 것이 좋습니다. 이렇게 하면 예측 가능한 결과를 얻을 수 있으며 Git
을 통한 버전 관리도 가능합니다.
이제 Armo 클러스터 구성 요소 배포가 모두 실행 중인지 확인합니다:
출력은 다음과 유사합니다:
모든 Armo 클러스터 구성 요소가 실행 중이어야 합니다.
- 마지막으로, 몇 분 후에 클라우드 포털에서 클러스터 스캔 보고서를 확인할 수 있어야 합니다.
- 구성 스캔 결과:
- 이미지 스캔 결과:
RBAC 시각화 결과:
더 많은 정보는 공식 설명서의 클러스터 취약점 스캔 페이지를 방문해 주세요.
Armo 클러스터 구성 요소 차트를 위한 Helm 값 조정
이 가이드에서 제공하는 Helm 값 파일을 편집하여 Armo 클러스터 구성 요소 차트의 동작을 변경할 수 있습니다.
- 다음 설정을 변경할 수 있습니다:
armoScanScheduler
및armoKubescapeScanScheduler
값을 통한 스캔 간격.
triggerNewImageScan
값을 통한 새 이미지 스캔 트리거.
귀하의 요구에 맞게 사용자 정의할 수 있는 전체 값 목록은 공식 Helm 차트 값 파일에서 확인할 수 있습니다.
변경 사항을 적용하려면 현재 Helm 차트 버전을 업그레이드해야 합니다. 다음을 통해 (반드시 <>
플레이스홀더를 적절히 대체하세요):
단계 4 – CI/CD 파이프라인에서 Kubernetes 구성 취약점을 스캔하기 위한 Kubescape 사용
생산 환경에서 불쾌한 상황을 피하고 보안 규정 스캔 도구를 CI/CD 파이프라인에 포함시키는 것은 어떤 이점이 있나요?
모든 것은 소프트웨어 개발이 시작되는 기초 수준에서 시작됩니다. 일반적으로 각 단계에 대해 전용 환경을 사용하고자 할 것입니다. 따라서 개발 초기에는 응용 프로그램 코드가 매우 자주 변경되므로 전용 개발 환경(일반적으로 하위 환경이라고 함)을 사용해야 합니다. 그런 다음 응용 프로그램은 QA(Quality Assurance) 환경에서 점점 더 정제되어 QA 팀이 수동 및/또는 자동 테스트를 수행합니다. 그 다음, 응용 프로그램이 QA 팀의 승인을 받으면 스테이징과 같은 상위 환경으로 승격되어 마지막으로 프로덕션으로 이동합니다. 응용 프로그램이 한 환경에서 다른 환경으로 승급되는 이 프로세스에서는 전용 파이프라인이 계속해서 응용 프로그램 아티팩트를 스캔하고 보안 위험 점수를 계산합니다. 점수가 특정 임계값을 충족하지 않으면 파이프라인이 즉시 실패하고 응용 프로그램 아티팩트의 프로덕션 승격이 초기 단계에서 중지됩니다.
따라서 보안 스캐닝 도구(예: kubescape)는 개발 초기부터 프로덕션 환경에 불필요한 아티팩트가 진입하는 것을 막는 게이트키퍼 역할을 합니다. 마찬가지로 상위 환경 파이프라인은 최종 프로덕션 단계에 응용 프로그램 아티팩트의 진입을 허용하거나 금지하기 위해 kubescape
를 사용합니다.
이 단계에서는 GitHub 워크플로를 통해 통합된 취약점 스캐닝이 포함된 샘플 CI/CD 파이프라인을 생성하고 테스트하는 방법을 배우게 됩니다. DigitalOcean Kubernetes와 함께 Github Actions를 사용하는 기본 사항을 배우려면 이 튜토리얼을 참조하세요.
다음 섹션에서 제공된 파이프라인은 DigitalOcean kubernetes-sample-apps 저장소의 game-2048-example 애플리케이션을 빌드하고 배포합니다.
- 고수준 개요에서, Kubernetes-sample-apps 저장소에 제공된 예제 CI/CD 워크플로는 다음 단계로 구성됩니다:
- 애플리케이션 빌드 및 테스트 단계 – 주요 애플리케이션 아티팩트를 빌드하고 자동화된 테스트를 실행합니다.
- Kubescape 스캔 단계 – 애플리케이션과 관련된 Kubernetes YAML 매니페스트에서 알려진 취약점을 스캔합니다. 이것은 게이트 역할을 하며 최종 파이프라인 상태(통과/실패)가 이 단계에 의존합니다. 실패하는 경우 Slack 알림이 전송됩니다.
- 애플리케이션 이미지 빌드 및 푸시 단계 – 최신 git 커밋 SHA를 사용하여 애플리케이션 이미지를 빌드하고 태깅합니다. 그런 다음 이미지가 DOCR에 푸시됩니다.
애플리케이션 배포 단계 – 애플리케이션을 Kubernetes (DOKS)에 배포합니다.
아래 다이어그램은 파이프라인에서 각 작업 및 관련 단계를 그리고 있습니다(관련 설정만 표시됨):
- 참고:
kustomize
기반 프로젝트의 경우 최종 매니페스트를kubectl kustomize </path/to/kustomization_/file>
명령을 통해 렌더링하는 것이 가장 좋습니다. 이렇게 함으로써 모든 것(원격 리소스 포함)을 포함하여 스캔할 수 있습니다. 반면에 어떤 Kubernetes 리소스를 패치해야 하는지 식별하기 어려울 수 있습니다. 이는 생성된 매니페스트 파일이 적용해야 하는 모든 리소스로 구성되기 때문입니다. 이것이 Kustomize가 작동하는 방식입니다 – 각 오버레이에서 모든 구성 조각을 수집하고 기본에 적용하여 최종 복합체를 빌드합니다.
Kubescape
에게 현재 가이드가 이 접근 방식에 의존한다고 알려주어도 됩니다. 이렇게 하면 리포지토리에서 어떤 리소스를 수정해야 하는지 쉽게 식별할 수 있습니다. kustomize를 통해 생성된 원격 리소스는 상위로 수정해야 합니다. 또한, kustomize를 통해 생성된 Kubernetes 시크릿 및 ConfigMap은 캡처되지 않습니다.
특정 보안 규정 수준을 충족하지 못하면 파이프라인을 어떻게 실패시키나요?
Kubescape CLI는 이러한 목적을 위해 --fail-threshold
플래그를 제공합니다. 이 플래그는 각 스캔 후 계산된 전체 리스크 점수와 관련이 있습니다. 임계값 값에 따라 파이프라인을 실패하거나 통과시킬 수 있으며, 조건이 충족되지 않으면 응용 프로그램 배포를 중지할 수 있습니다.
아래 그림은 이 가이드에서 사용하는 예제 CI/CD 파이프라인의 흐름을 보여줍니다:
- 아래 단계를 따라
kubescape
CI/CD GitHub 워크플로우를 생성하고 kubernetes-sample-apps GitHub 저장소에서 제공하는 것을 테스트하십시오: - kubernetes-sample-apps GitHub 저장소를 포크합니다.
SLACK_WEBHOOK_URL
– kubescape 스캔 알림에 사용되는 Slack 수신 웹훅 URL을 보유합니다.- 포크된 리포지토리의 작업 탭으로 이동하여 Game 2048 Kubescape CI/CD 예제 워크플로우를 선택하십시오:
A new entry should appear in below list after clicking the Run Workflow green button. Select the running workflow to observe pipeline progress:
워크플로우 실행 버튼을 클릭하고 기본값을 남겨둡니다:
파이프라인은 kubescape-nsa-security-check 작업이 실행될 때 실패하고 중지됩니다. 이것은 전체 리스크 점수에 대한 기본 임계값인 30
이 원하는 값보다 낮기 때문에 예상된 동작입니다. 또한 워크플로우 실행에 대한 자세한 내용이 포함된 Slack 알림을 받아야합니다:
다음 단계에서는 kubescape
스캔 보고서를 조사하여 문제를 해결하고 위험 점수를 낮추고 파이프라인을 통과하는 방법을 배우게 됩니다.
단계 5 – Kubescape 스캔 결과 조사 및 보고된 문제 해결
위험 점수 값 임계값이 충족되지 않으면 game-2048 GitHub 워크플로가 실패하고 Slack 알림이 추가 정보와 함께 전송됩니다.
game-2048 워크플로는 보안 검사(로컬 이미지 스캔은 지원되지 않음)를 하나 실행합니다 – Kubernetes 매니페스트 구성 오류 검사. 이를 위해 kubescape-nsa-security-check 작업을 사용합니다. 사용되는 동등한 kubescape
명령어는 다음과 같습니다 – kubescape scan framework nsa /path/to/project/kubernetes/manifests
.
아래 코드 조각은 kubescape-nsa-security-check 작업의 주요 논리를 보여줍니다:
–submit –account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}
위의 구성은 kubescape CLI에게 kustomize/
디렉토리에 있는 모든 Kubernetes 매니페스트를 사용하여 새로운 스캔을 시작하도록하며 NSA 프레임워크를 사용합니다. 또한 -t 플래그를 통해 어떤 임계값을 사용할지 지정하고 Armo 클라우드 포털에 최종 결과를 제출하도록 지정합니다(–submit 플래그와 –acount을 함께 사용).
따라서 위험 점수 값을 낮추고 워크플로우를 통과하기 위해서는 kubescape-nsa-security-check 작업에서 보고된 문제를 조사하고 수정해야합니다. 다음으로는이 작업에서 보고된 보안 문제를 해결하는 방법을 배웁니다.
A new browser window opens showing in detail each control and description. You will also be presented with required actions to remediate the issue (highlighted in green color):
상태 보고서를 확인하려면 받은 Slack 알림에서 kubescape 스캔 결과 링크를 클릭할 수 있습니다. 그런 다음 Armo 클라우드 포털의 왼쪽 메뉴에서 REPOSITORIES SCAN 스캔 버튼을 클릭하십시오. 이제 목록에서 kubernetes-sample-apps 항목을 클릭하십시오:
스캔 보고서에서 모든 정보를 수집 한 후에는 레포지토리에있는 game-2048-example/kustomize/resources
하위 폴더에있는 deployment.yaml 파일을 편집 할 수 있습니다. 수정 사항은 이미 적용되어 있으며 파일의 마지막 줄을 주석 해제하기만 하면됩니다. 최종 deployment.yaml
파일은 아래와 같아야합니다:
# `<>` 플레이스홀더를 도커 레지스트리 정보로 대체합니다
- 참고:
간소화를 위해이 예에서 C-0055 제안 사항이 생략되었습니다. Kubernetes의 안전 컴퓨팅 모드에 대해 더 읽어 볼 수 있습니다 여기에서. - 무엇이 변경되었습니까? 다음 보안 수정 사항이 적용되었습니다:
readOnlyRootFilesystem
– 컨테이너 이미지를 읽기 전용으로 실행합니다 (컨테이너에서kubectl exec
를 사용하여 파일을 변경할 수 없음).runAsNonRoot
– USER 지시문에서 정의한 비 루트 사용자로 실행합니다 game-2048 프로젝트의 Dockerfile.
allowPrivilegeEscalation
– allowPrivilegeEscalation을 false로 설정하면 컨테이너의 하위 프로세스가 부모보다 더 많은 권한을 얻을 수 없도록합니다.
capabilities.drop
– 컨테이너를 보다 안전하게 만들기 위해 실행에 필요한 최소한의 권한을 제공해야합니다. 실제로는 기본적으로 모든 것을 삭제한 다음 필요한 기능을 단계적으로 추가합니다. 이 Armosec가 작성한 기사에서 컨테이너 보안에 대해 자세히 읽을 수 있습니다.
A few final checks can be performed as well on the Kubernetes side to verify if the reported issues were fixed:
- 마지막으로, deployment.yaml 파일의 변경 사항을 커밋하고 main 브랜치에 푸시하십시오. 수동으로 워크플로를 트리거 한 후 이번에는 성공적으로 완료되어야합니다:
- 게임-2048 배포가 읽기 전용(불변) 파일 시스템을 가지고 있는지 확인하려면 애플리케이션 index.html 파일을 작성하십시오:
컨테이너가 루트가 아닌 사용자로 실행되는지 확인하십시오(0이 아닌 정수 번호를 인쇄해야 함 – 예: 1000
):
컨테이너가 루트가 아닌 사용자로 실행되는지 확인하십시오(0이 아닌 정수 번호를 인쇄해야 함 – 예: 1000
):
모든 확인 항목이 통과되면 필요한 보안 권장 사항을 성공적으로 적용한 것입니다.
일부 보고된 문제가 팀에서 무시해도 안전하다고 판단하는 경우 최종 리스크 점수에 영향을 주고 싶지 않은 상황이 있습니다. Kubescape는 예외를 관리하고 이러한 상황을 극복하기 위한 내장 기능을 제공합니다.
A more efficient approach is where you integrate vulnerability scan tools directly in your favorite IDE (or Integrated Development Environment). This way, you can detect and fix security issues ahead of time in the software development cycle.
이 기능에 대해 더 읽어보실 수 있습니다. 여기.
- IDE용 Kubescape
- Kubescape는 다음과 같은 확장 프로그램을 통해 IDE 통합을 지원합니다:
위의 플러그인들은 개발 초기 단계에서 문제를 감지하고 수정하는 데 도움을 주어, 제품 시스템에서의 번거로움, 비용 및 보안 결함을 제거하는 데 도움이 됩니다. 또한 장기적으로 반복을 줄이고 인간의 노력을 절약할 수 있습니다. 예를 들어, CI/CD 자동화에서 보고된 각 보안 문제마다 코드를 수정하고 변경 사항을 커밋한 후 CI/CD 자동화를 다시 기다리고 실패한 경우 반복해야 합니다.
Kubescape 문서 페이지로 이동하여 INTEGRATIONS 섹션에서 이러한 기능에 대해 자세히 읽을 수 있습니다.
단계 6 – Kubescape CI/CD 워크플로우 자동으로 트리거하기
다음과 같은 줄을 game-2048-kubescape.yaml 파일의 맨 위에 주석 해제하여 워크플로우를 각 커밋 또는 메인 브랜치에 대한 PR마다 자동으로 트리거할 수 있습니다:
파일을 편집한 후 변경 사항을 기본 브랜치에 커밋하고 준비가 되었습니다.
단계 7 – 지속적인 모니터링을 위한 Slack 알림 활성화
지금까지 구현한 취약성 스캔 자동화는 좋은 시작점이지만 완벽하지는 않습니다. 왜냐하면?
현재 방식의 한 가지 문제는 배포한 자산에 대한 새로운 문제가 보고되었을 때 알 수 없다는 것입니다. 다시 말해, 보안 위험을 평가하고 CI/CD 자동화가 실행된 특정 시점에 문제를 해결하기 위한 조치를 취했습니다.
하지만 그 사이에 새로운 문제가 보고되고 응용 프로그램이 다시 취약해질 수 있습니다.
Kubescape의 모니터링 기능은 지속적으로 공개되는 새로운 취약성에 대응할 수 있도록 도와줍니다. Slack 통합과 결합하면 프로덕션 환경에서 응용 프로그램에 영향을 줄 수 있는 새로 공개된 문제를 즉시 해결할 수 있습니다.
- Armo 클라우드 포털은 각 클러스터 스캔 후 실시간 알림을 보내기 위한 Slack 통합을 지원합니다. 이 기능을 사용하려면 Armo 클라우드 구성 요소 Helm 차트를 DOKS 클러스터에 설치해야 합니다. 설명은 다음에서 확인할 수 있습니다. 단계 3 – DOKS용 Kubescape 자동 스캔 구성
- Slack 알림을 활성화하면 DOKS 클러스터에서 감지된 중요한 취약점에 대한 알림을 받게 됩니다. 예를 들면:
- 워커 노드 취약점 (OS 레벨).
컨테이너 이미지 취약점.
- 배포, 포드 등 다양한 리소스에 대한 Kubernetes 잘못된 구성.
- 먼저, Slack 앱을 만들어야 합니다. 그런 다음 OAuth & Permissions 페이지에서 Slack Bot에 다음 권한을 부여해야 합니다:
channels:join
– 워크스페이스의 공개 채널에 가입합니다.channels:read
– 워크스페이스의 공개 채널에 대한 기본 정보를 보냅니다.groups:read
– Slack 앱이 추가된 개인 채널에 대한 기본 정보를 보냅니다.chat:write
– @<Your Slack App Name>으로 메시지를 보냅니다.
im:read
– Slack 앱이 추가된 다이렉트 메시지에 대한 기본 정보를 보냅니다.
mpim:read
– Slack 앱이 추가된 그룹 다이렉트 메시지에 대한 기본 정보를 보냅니다.
다음으로, Armo 클라우드 포털 계정의 설정 페이지(우측 상단 기어 아이콘)로 이동하십시오. 거기서 통합 페이지를 선택한 다음 Slack을 선택하십시오.
이제 슬랙 봇 OAuth 토큰을 OAuth 및 권한 페이지에서 슬랙 앱 페이지에서 찾을 수 있습니다. 해당 토큰을 토큰 삽입 입력란에 붙여넣으십시오. 마지막으로, 알림을 받을 방법과 알림을 전송할 슬랙 채널을 선택하십시오. 알림 설정 버튼을 클릭하면 설정이 완료됩니다. 아래 이미지는 세부 정보를 설명합니다:
Slack 통합을 구성한 후에는 지정된 채널에서 클러스터 스캔 후 주기적으로 알림을 받아야 합니다:
위와 유사한 알림을 받으면 Armosec Kubescape Slack 통합을 성공적으로 구성한 것입니다.
이 가이드에서는 가장 인기 있는 쿠버네티스 취약성 스캐닝 도구 중 하나인 Kubescape를 사용하는 방법을 배웠습니다. 또한 Kubescape CLI를 사용하여 클러스터 및 리포지토리 스캔 (YAML 매니페스트)을 수행하는 방법을 배웠습니다. 그런 다음 GitHub 워크플로우를 사용하여 구현된 전통적인 CI/CD 파이프라인에 취약성 스캐닝 도구를 통합하는 방법을 배웠습니다.
마지막으로 취약성 스캔 보고서를 조사하고 상황을 해결하기 위해 수정을 적용하고, game-2048 애플리케이션에서 실제 예제를 통해 위험 점수를 최소화하는 방법을 배웠습니다. kubernetes-sample-apps 리포지토리.
- 더 알아보기
- 다음의 추가 자료를 읽음으로써 더 많은 정보를 얻을 수 있습니다:
- Snyk 취약성 스캐닝 도구 사용
- Armo에 의한 Kubernetes 보안 모범 사례
- Armosec에 의한 시간 앞당겨 보안 문제 파악
- Armosec에 의한 Kubernetes 배포물 보안
- Armosec 호스트 스캐너에 대해 더 알아보기
Source:
https://www.digitalocean.com/community/developer-center/using-the-kubescape-vulnerability-scan-tool