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의 보안을 강화하는 데 행운을 빕니다!
🎨 사진출처 : 매뉴팩처링디지털
Reference
이 문제에 관하여(CI 파이프라인에서 Kubescape 연습하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/otomato_io/what-about-kubescape-in-your-ci-pipeline-1810텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)