CI 파이프라인에서 Kubescape 연습하기

우리는 당신에게 특별한 것을 가져 왔습니다.

This is an inset supplementing a previously published about kubescape.



앞서 언급했듯이 설명된 도구에 대한 옵션CI integration이 있습니다. GitHub Actions도 지원됩니다.

예를 들어 GHA CI에서 YAML이 보안 검사에 실패하는 경우 전체 흐름을 중지할 수 있는 트리거 작업을 만들 수 있습니다. 이를 달성하기 위해 -t 플래그(임계값용) 및 적절한 값을 사용하여 도구를 호출할 수 있습니다. 유효한 값은 0 - 100 사이의 정수입니다. 100 값은 절대 실패하지 않습니다.

A value given after -t will serve as a semaphore to consider your cluster as insecure.



저자는 무엇을 얻고 있습니까? 그게 뭐야.

Otomato에서는 매니페스트와 클러스터를 빠르게 스캔하기 위해 고객의 파이프라인에 Kubernetes 보안 스캔을 더 쉽게 통합할 수 있도록 Kubescape GitHub 작업을 만들었습니다.

또한 이것은 kubeconfig contexts에 있는 전체 클러스터를 스캔할 수도 있습니다.

글쎄, 그것은 we've made it처럼 보입니다! 이 미리 정의된 작업을 사용하는 방법을 살펴보겠습니다.

매개변수



지원되는 매개변수는 다음과 같습니다.

⚙️ ksversion : 'v2.0.155'
⚠️필수. 관련 바이너리의 버전입니다. ARMOreleases 페이지를 참조하십시오.

⚙️ path : '.'
선택 과목. 스캔할 배포의 YAML을 찾을 경로입니다. 기본값은 repo의 홈 디렉토리입니다.

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Prepare file to scan
        run: |
          curl -O https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.2.0/deploy/static/provider/cloud/deploy.yaml
      - name: Scan files 
        uses: otomato-gh/kubescape-action@main
        with:
          ksversion: 'v2.0.155'
          format: 'json'
          path: 'deploy.yaml'


⚙️ threshold : 20
선택 과목. 임계값0..100 . 취약성 측면에서 배포 점수가 지정된 값보다 높으면 이 작업이 실패합니다.

⚙️ format : 'json'
선택 과목. 출력 형식: "pretty-printer", "json", "junit", "prometheus", "pdf"(기본값은 "pretty-printer"(원시 콘솔 덤프)).

⚙️ context : ''
선택 과목. 스캔을 실행할 K8s 클러스터(KUBECONFIG에 제공된 kube-context)(기본값은 비어 있으므로 설정하지 않으므로 YAML 파일만 스캔합니다).
KUBECONFIG 를 포함하려면 GitHub에 대한 가용성을 구성해야 합니다. 이를 수행하는 가장 좋은 방법은 클러스터 구성이 포함된 repository secret (Settings → Secrets → Action secrets)를 설정하는 것입니다.



클러스터의 컨텍스트가 GitHub에 저장되어 있으면 흐름에서 이를 처리할 수 있습니다.


KUBECONFIG 에 둘 이상의 컨텍스트가 정의된 경우 유용할 수 있습니다.

jobs:
  scan-cluster:
   runs-on: ubuntu-latest
   steps:  
    - name: Checkout
      uses: actions/checkout@v3    
    - name: Write kubeconfig to file
      run: echo "${{ secrets.KUBECONFIG_CONTENT }}" > mykubeconfig
    - name: Set context
      id: setcontext
      run: |
        echo $KUBECONFIG
        curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
        chmod +x kubectl
        var=$(kubectl config current-context)
        echo "::set-output name=KUBE_CONTEXT::$var"
      env: 
        KUBECONFIG: mykubeconfig
    - name: Scan cluster
      uses: otomato-gh/kubescape-action@main
      with:
          ksversion: 'v2.0.155'
          format:  'json'
          context: ${{ steps.setcontext.outputs.KUBE_CONTEXT }}
      env: 
        KUBECONFIG: mykubeconfig


🐞 명심하십시오: kubescape 명령 구문으로 인해 path 또는 context 중 하나만 스캔하도록 선택할 수 있습니다. 두 매개변수를 동시에 설정하는 것은 의미가 없습니다.

예제 흐름here을 찾을 수 있습니다.

논블로킹 실행



당연히 kubescape 에서 🔴 red semaphore 인 경우에도 후속 조치를 수행해야 하며, 이 경우 if: always() flag 을 사용하도록 설정됩니다.



Don't abuse it in everyday life, please! Stopping the flow, as a rule, occurs for significant reasons. Do not use if: always() too recklessly where the logic does not require it!



스캐닝 프로세스 자체는 도커 컨테이너 내부에서 수행됩니다.

- name: Retrieve Scan Results via File Upload
        if: always() 
        uses: actions/upload-artifact@v3
        with:
          name: scan-results
          path: results.*  


"json", "junit"및 "pdf"[output]의 경우 이 작업은 업로드된 아티팩트로 구현된 보고서 저장을 제공합니다. 즉, 결과 분석을 위해 보고서를 GHA 웹 UI(작업 페이지)에서 바로 다운로드할 수 있습니다.



Konrad Pabjan 덕분에 그는 preserving artifacts 의 작업에 처음으로 당황했습니다. 우리는 항상 오픈 소스에 대한 저명한 기여자를 언급합니다.

조금 눈에 띄지 않는 속임수



Dawid Dziurlacontribution를 사용하여 전자 메일로 보고서를 보낼 수 있지만 메일 서버에서 인증을 위한 사용자 이름과 암호는 저장소에 비밀로 존재해야 합니다.

- name: Send Scan Results by E-mail
        if: always()
        uses: dawidd6/action-send-mail@v3
        with:
          server_address: smtp.gmail.com
          server_port: 465
          # Optional (recommended): mail server username:
          # username: ${{secrets.MAIL_USERNAME}}
          # Optional (recommended) mail server password:
          # password: ${{secrets.MAIL_PASSWORD}}
          subject: GHA Kubescape Scan Result
          to: [email protected]        
          from: GitHub Actions Runner <[email protected]>
          secure: true
          # Optional plain body:
          # body: Report from ${{github.repository}} are ready! See attachment.
          # Optional HTML body read from file:
          # html_body: file://README.html
          ignore_cert: true
          # Optional converting Markdown to HTML (set content_type to text/html too):
          # convert_markdown: false
          # Optional attachments:
          # attachments: results.*


이 단계는 당사의 example 에서도 볼 수 있습니다.

편의성이 중요합니다. Kubernetes의 보안을 강화하는 데 행운을 빕니다!

🎨 사진출처 : 매뉴팩처링디지털

좋은 웹페이지 즐겨찾기