Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
kubesec — Kubernetes 리소스에 대한 보안 위험 분석 | Kitploit
도구/GitHubGitHub/controlplaneio/kubesec
Cloud Infrastructure SecurityDefensive ToolsStatic AnalysisContainer SecurityConfiguration AuditingCloud SecurityDevSecOpsMisconfiguration
GitHubcontrolplaneio/kubesec

kubesec

Kubernetes 리소스에 대한 보안 위험 분석

저장소 보기
1.5k1081개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
웹사이트

Kubesec

Testing Workflow Security Analysis Workflow Release Workflow

Go Report Card PkgGoDev

🚨 v1 API는 더 이상 사용되지 않습니다(deprecated). 릴리스 노트를 읽어주세요 🚨

Kubernetes 리소스에 대한 보안 위험 분석

🎬 데모

Kubesec CLI 데모

더 많은 예시는 Kubesec.io를 방문하세요. 여기서는 ControlPlane의 호스팅 API인 v2.kubesec.io/scan을 사용합니다.


  • 빠른 시작
  • Kubesec 다운로드
  • 사용 예시
    • 스캔
      • Docker 사용법
      • 출력 형식
    • 규칙 출력
    • 사용자 정의 스키마
  • HTTP 서버 모드
  • Kubesec-as-a-Service
  • 기여하기
  • 도움말
  • 변경 로그

🚀 빠른 시작

1. 매니페스트 준비

스캔할 Kubernetes 리소스 파일(예: kubesec-test.yaml)을 생성하세요. 빠른 테스트를 위해 다음 Pod 매니페스트를 저장할 수 있습니다:

root@kitploit:~
$ cat <<EOF > kubesec-test.yaml
apiVersion: v1
kind: Pod
metadata:
  name: kubesec-demo
spec:
  containers:
  - name: kubesec-demo
    image: gcr.io/google-samples/node-hello:1.0
    securityContext:
      readOnlyRootFilesystem: true
EOF

2. 첫 번째 스캔 실행

매니페스트 파일에 대해 스캔을 실행합니다:

root@kitploit:~
# 로컬 바이너리 사용
kubesec scan kubesec-test.yaml

# 또는 Docker 사용
docker run -i kubesec/kubesec:v2 scan /dev/stdin < kubesec-test.yaml

# 사람이 읽기 쉬운 테이블 출력 형식으로 로컬 바이너리 사용
kubesec scan kubesec-test.yaml --format table

[!TIP] 기본 JSON 형식 대신 사람이 읽을 수 있는 테이블로 결과를 보려면 --format table 플래그를 사용하세요.

kubesec는 리소스에 대한 보안 점수와 상세 분석을 출력합니다.

📦 Kubesec 다운로드

Kubesec은 다음과 같이 제공됩니다:

  • Docker 컨테이너 이미지 — docker.io/kubesec/kubesec:v2
  • Linux/MacOS/Win 바이너리 (최신 릴리스 받기)
  • Kubernetes Admission Controller
  • Kubectl 플러그인

또는 GitHub에서 최신 커밋을 다음과 같이 설치합니다:

Go 1.16+

root@kitploit:~
$ go install github.com/controlplaneio/kubesec/v2@latest

Go version < 1.16

root@kitploit:~
$ GO111MODULE="on" go get github.com/controlplaneio/kubesec/v2

📖 사용 예시

스캔

로컬 파일 또는 표준 입력에서 Kubernetes 리소스를 스캔합니다.

Kubesec은 단일 입력 파일에 포함된 여러 YAML 문서를 스캔하거나, ---로 구분된 여러 문서로 올바르게 포맷된 경우 여러 파일의 문서를 한 번에 스캔할 수 있습니다.

root@kitploit:~
# 특정 로컬 YAML 파일 스캔
kubesec scan ./deployment.yaml

# 표준 입력에서 스캔 (JSON 또는 YAML)
cat file.json | kubesec scan -

# 렌더링된 Helm 차트 스캔
helm template -f values.yaml ./chart | kubesec scan /dev/stdin

# '---'로 구분된 여러 YAML 문서 스캔
{ cat test/asset/multi.yml; echo "---"; cat test/asset/critical.yml; } | kubesec scan -

Docker 사용법

공식 Docker 이미지를 사용하여 동일한 스캔 명령을 실행할 수 있습니다:

root@kitploit:~
# Docker에서 표준 입력을 통해 파일 스캔
docker run -i kubesec/kubesec:v2 scan /dev/stdin < kubesec-test.yaml

출력 형식

Kubesec은 --format / -f 플래그로 지정되는 세 가지 출력 형식(json(기본값), table, template)을 지원하며, 단일 입력 파일에서 여러 YAML 문서를 스캔할 수 있습니다.

root@kitploit:~
# JSON 배열 출력 (기본 동작)
kubesec scan ./deployment.yaml --format json

# 사람이 읽을 수 있는 테이블 출력
kubesec scan ./deployment.yaml --format table

# 출력에 사용자 정의 템플릿 사용
kubesec scan ./deployment.yaml --format template --template report-template.tmpl

특정 규칙 스캔

root@kitploit:~
# 단일 규칙
kubesec scan --rules CapSysAdmin kubesec-test.yaml

# 여러 규칙
kubesec scan --rules RunAsNonRoot,SeccompAny,ApparmorAny kubesec-test.yaml
JSON 출력 예시
root@kitploit:~
[
  {
    "object": "Pod/security-context-demo.default",
    "valid": true,
    "message": "Failed with a score of -30 points",
    "score": -30,
    "scoring": {
      "critical": [
        {
          "selector": "containers[] .securityContext .capabilities .add == SYS_ADMIN",
          "reason": "CAP_SYS_ADMIN is the most privileged capability and should always be avoided",
          "points": -30
        }
      ],
      "advise": [
        {
          "selector": "containers[] .securityContext .runAsNonRoot == true",
          "reason": "Force the running image to run as a non-root user to ensure least privilege",
          "points": 1
        },
        {
          // ...
        }
      ]
    }
  }
]
테이블 출력 예시

테이블 출력

규칙 출력

root@kitploit:~
# 연결된 점수와 함께 모든 스캔 규칙 출력
kubesec print-rules

# 연결된 점수와 함께 모든 스캔 규칙을 테이블로 출력
kubesec print-rules --format table

규칙 출력 JSON 예시

root@kitploit:~
[
  {
    "id": "AllowPrivilegeEscalation",
    "selector": "containers[] .securityContext .allowPrivilegeEscalation == true",
    "reason": "Ensure a non-root process can not gain more privileges",
    "kinds": [
      "Pod",
      "Deployment",
      "StatefulSet",
      "DaemonSet"
    ],
    "points": -7,
    "advise": 0
  },
...
]

사용자 정의 스키마

Kubesec은 스캔할 매니페스트의 유효성을 검사하기 위해 kubeconform(@yannh 감사)을 활용합니다. 즉, 다른 스키마 위치를 지정하는 것은 kubeconform README에 설명된 규칙을 따릅니다.

root@kitploit:~
# 업스트림의 최신 스키마 사용
# 스키마는 다음에서 가져옵니다: https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/master-standalone-strict/pod-v1.json
kubesec scan ./pod.yaml

# 업스트림의 특정 스키마 버전 사용 (v 접두사 없이 x.y.z 형식)
# 스키마는 다음에서 가져옵니다: https://raw.githubusercontent.com/yannh/kubernetes-json-schema/master/v1.25.3-standalone-strict/pod-v1.json
kubesec scan ./pod.yaml --kubernetes-version 1.25.3

# airgap 환경에서 HTTP를 통해 특정 스키마 버전 사용
# 스키마는 다음에서 가져옵니다: `https://host.server/v<version>-standalone-strict/pod-v1.json`
kubesec scan ./deployment.yaml --kubernetes-version <version> --schema-location https://host.server

# airgap 환경에서 로컬 파일로 특정 스키마 버전 사용
# 스키마는 다음에서 읽습니다: `/opt/schemas/v<version>-standalone-strict/pod-v1.json`
kubesec scan ./deployment.yaml --kubernetes-version <version> --schema-location /opt/schemas

참고: 외부 네트워크 호출을 제한하고 airgap 환경에서 사용할 수 있도록 kubesec 이미지에는 스키마가 내장되어 있습니다. 스키마 위치를 변경하려면 런타임에 K8S_SCHEMA_VER 및 SCHEMA_LOCATION 환경 변수를 변경해야 합니다.

HTTP 서버 모드

Kubesec에는 네트워크를 통해 스캔 요청을 받기 위해 로컬 또는 컨테이너에서 실행할 수 있는 번들 HTTP 서버가 포함되어 있습니다.

CLI 사용법

root@kitploit:~
# 백그라운드에서 8080 포트로 HTTP 서버 시작
kubesec http 8080 &

# 실행 중인 서버에 파일을 POST로 전송
curl -sSX POST --data-binary @deployment.yaml http://localhost:8080/scan

# 완료되면 백그라운드 로컬 서버 중지
kill %

Docker 사용법

root@kitploit:~
# Docker를 사용하여 HTTP 서버 시작
docker run -d -p 8080:8080 kubesec/kubesec:v2 http 8080

# 실행 중인 서버에 파일을 POST로 전송
curl -sSX POST --data-binary @deployment.yaml http://localhost:8080/scan

서버를 중지하는 것을 잊지 마세요.

Kubesec-as-a-Service

Kubesec은 HTTPS를 통해 v2.kubesec.io/scan에서도 이용할 수 있습니다.

이 공개 서비스에 민감한 YAML을 제출하지 마세요.

이 서비스는 신의성실과 최선 노력(best effort) 기준으로 운영됩니다.

root@kitploit:~
# 호스팅되는 v2 API에 매니페스트 직접 제출
curl -sSX POST --data-binary @"deployment.yaml" https://v2.kubesec.io/scan

# jq를 사용하여 API 출력을 파싱하고, 점수가 10 이하이면 0이 아닌 종료 코드 반환
curl -sSX POST --data-binary @"deployment.yaml" https://v2.kubesec.io/scan | jq --exit-status '.score > 10'

# "rule" 쿼리 매개변수를 사용하여 특정 규칙만 스캔 (여러 개 지원)
curl -sSX POST --data-binary @test/asset/score-0-cap-sys-admin.yml "http://localhost:8080/scan?rule=SeccompAny&rule=ApparmorAny"

Bash 함수를 정의할 수도 있습니다. 예를 들어:

root@kitploit:~
# BASH 함수 정의
$ kubesec ()
{
    local FILE="${1:-}";
    [[ ! -e "${FILE}" ]] && {
        echo "kubesec: ${FILE}: No such file" >&2;
        return 1
    };
    curl --silent \
      --compressed \
      --connect-timeout 5 \
      -sSX POST \
      --data-binary=@"${FILE}" \
      https://v2.kubesec.io/scan
}


# Kubernetes 리소스를 v2.kubesec.io/scan에 POST
$ kubesec ./deployment.yml

# 점수가 10보다 크지 않으면 0이 아닌 상태 코드 반환
$ kubesec ./score-9-deployment.yml | jq --exit-status '.score > 10' >/dev/null
# status code 1

기여하기

자세한 내용은 CONTRIBUTING.md를 확인하세요.

도움말

Kubesec 및 Kubernetes 보안에 대해 질문이 있다면:

  • Kubesec 문서를 읽어보세요.
  • Twitter에서 @sublimino 또는 @controlplaneio에게 문의하세요.
  • 이슈를 등록하세요.

여러분의 피드백은 언제나 환영입니다!


❤로 만든 ControlPlane

도구 다운로드