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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
kubeaudit — kubeaudit는 일반적인 보안 통제 항목에 대해 Kubernetes 클러스터를 감사하는 데 도움을 줍니다. | Kitploit
도구/GitHubGitHub/shopify/kubeaudit
Cloud Infrastructure SecurityVulnerability ScannersContainer SecurityConfiguration AuditingCloud SecurityDevSecOpsMisconfigurationArchived
GitHubshopify/kubeaudit

kubeaudit

kubeaudit는 일반적인 보안 통제 항목에 대해 Kubernetes 클러스터를 감사하는 데 도움을 줍니다.

저장소 보기
1.9k1891년 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Build Status Go Report Card GoDoc

이제 클러스터는 Kubernetes >=1.19를 실행해야 합니다.

미등록 kubernetes.io 어노테이션을 사용한 재정의 레이블은 더 이상 사용되지 않습니다. 곧 kubeaudit.io를 사용해야 합니다. 자세한 내용은 이 토론을 참조하세요.

🚨 지원 종료 공지 🚨

Kubeaudit은 2024년 10월까지 지원이 종료될 예정입니다.

이 프로젝트의 관리를 인수할 유지보수자를 적극적으로 찾고 있습니다. 프로젝트의 개발 및 유지보수를 계속하는 데 관심이 있으시면 연락해 주세요.

대안을 찾고 계신 사용자분들께는 유사한 기능을 제공하며 활발히 유지보수되고 있는 Kubebench로 전환할 것을 권장합니다.

커뮤니티의 기여와 지원에 감사드립니다.

kubeaudit ☁️ 🔒 💪

kubeaudit은 다양한 보안 문제에 대해 Kubernetes 클러스터를 감사하는 명령줄 도구이자 Go 패키지입니다. 예를 들어:

  • 비-root로 실행
  • 읽기 전용 루트 파일시스템 사용
  • 위험한 능력(capabilities) 제거, 새 능력 추가 금지
  • 권한 모드(privileged)로 실행 금지
  • 그 외 다수!

요약: kubeaudit은 안전한 컨테이너를 배포하도록 보장합니다!

패키지

kubeaudit을 Go 패키지로 사용하려면 패키지 문서를 참조하세요.

이 README의 나머지 부분은 kubeaudit을 명령줄 도구로 사용하는 방법에 초점을 맞춥니다.

명령줄 인터페이스 (CLI)

  • 설치
  • 빠른 시작
  • 감사 결과
  • 명령어
  • 설정 파일
  • 오류 재정의
  • 기여하기

설치

Brew

root@kitploit:~
brew install kubeaudit

바이너리 다운로드

Kubeaudit은 검증되고 안정적인 공식 릴리스를 제공합니다: 공식 릴리스

직접 빌드

main 브랜치는 안정 릴리스보다 최신 기능을 포함할 수 있습니다. 릴리스에 아직 포함되지 않은 최신 기능이 필요하다면, 최신 Go를 사용 중인지 확인하고 다음을 실행하세요:

root@kitploit:~
go get -v github.com/Shopify/kubeaudit

빠른 시작으로 kubeaudit을 사용하거나 모든 지원되는 명령어를 확인하세요.

Kubectl 플러그인

전제 조건: kubectl v1.12.0 이상

kubectl v1.12.0에서 외부 함수의 쉬운 플러그인 기능이 도입됨에 따라, kubeaudit을 kubectl audit으로 호출할 수 있습니다:

  • make plugin을 실행하고 $GOPATH/bin을 경로에 포함시키십시오.

또는

  • 바이너리 이름을 kubectl-audit으로 변경하고 경로에 위치시키십시오.

Docker

더 이상 Docker Hub에 이미지를 게시하지 않습니다 (Docker Hub가 Free Team 조직을 종료했기 때문). 당분간 이전 이미지는 계속 사용 가능하지만 언제든지 중단될 수 있습니다. 곧 Github Container 레지스트리에 이미지를 게시할 예정입니다.

클러스터에서 kubeaudit을 작업으로 실행하려면 클러스터에서 kubeaudit 실행을 참조하세요.

빠른 시작

kubeaudit에는 세 가지 모드가 있습니다:

  1. 매니페스트 모드
  2. 로컬 모드
  3. 클러스터 모드

매니페스트 모드

-f/--manifest 플래그를 사용하여 Kubernetes 매니페스트 파일을 제공하면, kubeaudit이 해당 매니페스트 파일을 감사합니다.

명령어 예시:

root@kitploit:~
kubeaudit all -f "/path/to/manifest.yml"

출력 예시:

root@kitploit:~
$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml"

---------------- Results for ---------------

  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: deployment
    namespace: deployment-apps-v1

--------------------------------------------

-- [error] AppArmorAnnotationMissing
   Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added.
   Metadata:
      Container: container
      MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container

-- [error] AutomountServiceAccountTokenTrueAndDefaultSA
   Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.

-- [error] CapabilityShouldDropAll
   Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list.
   Metadata:
      Container: container
      Capability: AUDIT_WRITE
...

지정된 최소 심각도의 오류가 발견되지 않으면 다음과 같이 반환됩니다:

root@kitploit:~
All checks completed. 0 high-risk vulnerabilities found

자동 수정

매니페스트 모드는 autofix 명령어를 사용하여 모든 보안 문제를 자동으로 수정하는 기능도 지원합니다:

root@kitploit:~
kubeaudit autofix -f "/path/to/manifest.yml"

수정된 매니페스트를 원본 파일을 수정하는 대신 새 파일에 쓰려면 -o/--output 플래그를 사용하세요.

root@kitploit:~
kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"

kubeaudit 설정 파일에 지정된 사용자 정의 규칙에 따라 매니페스트를 수정하려면 -k/--kconfig 플래그를 사용하세요.

root@kitploit:~
kubeaudit autofix -k "/path/to/kubeaudit-config.yml" -f "/path/to/manifest.yml" -o "/path/to/fixed"

클러스터 모드

Kubeaudit은 클러스터 내 컨테이너에서 실행 중인지 감지할 수 있습니다. 그렇다면 해당 클러스터의 모든 Kubernetes 리소스를 감사하려고 시도합니다:

root@kitploit:~
kubeaudit all

로컬 모드

Kubeaudit은 로컬 kubeconfig 파일($HOME/.kube/config)을 사용하여 클러스터에 연결을 시도합니다. 다른 kubeconfig 위치는 --kubeconfig 플래그로 지정할 수 있습니다. kubeconfig의 컨텍스트를 지정하려면 -c/--context 플래그를 사용하세요.

root@kitploit:~
kubeaudit all --kubeconfig "/path/to/config" --context my_cluster

Kubernetes 설정 파일에 대한 자세한 내용은 https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/ 를 참조하세요.

감사 결과

Kubeaudit은 세 가지 심각도 수준의 결과를 생성합니다:

  • Error: 보안 문제 또는 잘못된 Kubernetes 설정
  • Warning: 모범 사례 권장 사항
  • Info: 정보 제공, 조치 불필요. 재정의된 결과가 포함됩니다.

최소 심각도 수준은 --minSeverity/-m 플래그를 사용하여 설정할 수 있습니다.

기본적으로 kubeaudit은 사람이 읽기 쉬운 방식으로 결과를 출력합니다. 출력을 추가 처리하려면 --format json 플래그를 사용하여 JSON으로 설정할 수 있습니다. 결과를 로그로 출력하려면 (이전 기본값) --format logrus를 사용하세요. 일부 출력 형식은 터미널에서 결과를 더 쉽게 읽을 수 있도록 색상을 포함합니다. 색상을 비활성화하려면 (예: 텍스트 파일로 출력을 보내는 경우) --no-color 플래그를 사용할 수 있습니다.

SARIF 형식의 kubeaudit 보고서를 생성하려면 --format sarif 플래그를 사용하세요. SARIF 결과를 파일로 쓰려면 >로 출력을 리디렉션할 수 있습니다. 예:

root@kitploit:~
kubeaudit all -f path-to-my-file.yaml --format="sarif" > example.sarif

심각도 수준이 error인 결과가 있으면 kubeaudit은 종료 코드 2로 종료됩니다. 이는 --exitcode/-e 플래그를 사용하여 변경할 수 있습니다.

kubeaudit을 사용자 정의하는 모든 방법은 글로벌 플래그를 참조하세요.

명령어

감사자

감사자는 개별적으로도 실행할 수 있습니다.

글로벌 플래그

설정 파일

kubeaudit 설정은 두 가지 목적으로 사용될 수 있습니다:

  1. 일부 감사자만 활성화
  2. 감사자에 대한 설정 지정

개별 감사자에 플래그로 지정할 수 있는 모든 설정은 설정 파일을 사용하여 표현할 수 있습니다.

설정 파일 형식은 다음과 같습니다:

root@kitploit:~
enabledAuditors:
  # 감사자는 명시적으로 "false"로 설정되지 않으면 기본적으로 활성화됩니다.
  apparmor: false
  asat: false
  capabilities: true
  deprecatedapis: true
  hostns: true
  image: true
  limits: true
  mounts: true
  netpols: true
  nonroot: true
  privesc: true
  privileged: true
  rootfs: true
  seccomp: true
auditors:
  capabilities:
    # 추가 목록에 필요한 능력을 추가하면 kubeaudit이 오류를 보고하지 않습니다
    allowAddList: ['AUDIT_WRITE', 'CHOWN']
  deprecatedapis:
    # 버전을 지정하지 않고 'deprecatedapis' 감사자가 활성화된 경우, 더 이상 사용되지 않는 API로 정의된 리소스에 대해 WARN 결과가 생성됩니다.
    currentVersion: '1.22'
    targetedVersion: '1.25'
  image:
    # 이미지를 지정하지 않고 'image' 감사자가 활성화된 경우, 태그 없이 이미지를 사용하는 컨테이너에 대해 WARN 결과가 생성됩니다.
    image: 'myimage:mytag'
  limits:
    # 제한을 지정하지 않고 'limits' 감사자가 활성화된 경우, CPU 또는 메모리 제한이 지정되지 않은 컨테이너에 대해 WARN 결과가 생성됩니다.
    cpu: '750m'
    memory: '500m'

각 감사자에 대한 자세한 내용(설정 파일의 감사자별 설정 설명 포함)은 감사자 문서를 참조하세요.

참고: kubeaudit 설정 파일은 --kubeconfig 플래그로 지정된 kubeconfig 파일(로컬 모드의 Kubernetes 설정 파일 참조)과 동일하지 않습니다. 또한 all 및 autofix 명령어만 kubeaudit 설정 파일 사용을 지원합니다. 다른 명령어에서는 작동하지 않습니다.

참고: 플래그와 설정 파일을 함께 사용하는 경우 플래그가 우선합니다.

오류 재정의

보안 문제는 특정 컨테이너나 파드에 재정의 레이블을 추가하여 무시할 수 있습니다. 이는 감사자가 error 결과 대신 info 결과를 생성하고 감사 결과 이름에 Allowed가 추가됨을 의미합니다. 레이블은 각 감사자 문서에 설명되어 있지만, 재정의를 지원하는 감사자의 일반적인 형식은 다음과 같습니다:

재정의 레이블은 key와 value로 구성됩니다.

key는 재정의 유형(컨테이너 또는 파드)과 각 감사자에 고유한 재정의 식별자(특정 감사자에 대한 문서 참조)의 조합입니다. key는 재정의 유형에 따라 두 가지 형태 중 하나를 가질 수 있습니다:

  1. 컨테이너 재정의: 특정 컨테이너에 대해 감사자를 재정의하며, 다음과 같은 형식입니다:
root@kitploit:~
container.kubeaudit.io/[컨테이너 이름].[재정의 식별자]
  1. 파드 재정의: 파드 내 모든 컨테이너에 대해 감사자를 재정의하며, 다음과 같은 형식입니다:
root@kitploit:~
kubeaudit.io/[재정의 식별자]

value가 비어 있지 않은 문자열로 설정되면 info 결과에 OverrideReason으로 표시됩니다:

root@kitploit:~
$ kubeaudit asat -f "auditors/asat/fixtures/service-account-token-true-allowed.yml"

---------------- Results for ---------------

  apiVersion: v1
  kind: ReplicationController
  metadata:
    name: replicationcontroller
    namespace: service-account-token-true-allowed

--------------------------------------------

-- [info] AutomountServiceAccountTokenTrueAndDefaultSAAllowed
   Message: Audit result overridden: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
   Metadata:
      OverrideReason: SomeReason

Kubernetes 사양에 따라 value는 63자 이하여야 하며, 비어 있거나 영숫자 문자([a-z0-9A-Z])로 시작하고 끝나야 하며, 그 사이에는 대시(-), 밑줄(_), 점(.) 및 영숫자만 허용됩니다.

여러 감사자에 대한 여러 재정의 레이블을 동일한 리소스에 추가할 수 있습니다.

재정의하려는 감사자에 대한 구체적인 예제는 해당 감사자 문서를 참조하세요.

레이블에 대한 자세한 내용은 https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ 를 참조하세요.

기여하기

버그 수정, 기능 기여, 또는 단순한 오타 수정을 원하신다면, 행동 강령을 준수하는 한 자유롭게 기여해 주세요.

  1. 자신의 포크를 만드세요!
  2. 소스 가져오기: go get github.com/Shopify/kubeaudit
  3. 소스 디렉토리로 이동: cd $GOPATH/src/github.com/Shopify/kubeaudit
  4. 포크된 저장소를 포크로 추가: git remote add fork https://github.com/you-are-awesome/kubeaudit
  5. 기능 브랜치 생성: git checkout -b awesome-new-feature
  6. Kind 설치
  7. 테스트 실행하여 모든 것이 제대로 작동하는지 확인: USE_KIND=true make test (Kind 없이 테스트 실행: make test)
  8. 변경 사항 커밋: git commit -am 'Adds awesome feature'
  9. 브랜치 푸시: git push fork
  10. 기여자 라이선스 계약에 서명
  11. PR 제출 (모든 PR은 레이블을 붙여야 합니다: 🐛 (버그 수정), ✨ (새 기능), 📖 (문서 업데이트), 또는 ⚠️ (호환성 깨는 변경))
  12. ???
  13. 이익

참고: PR을 열기 전에 CLA에 서명하지 않았다면, PR에 "I've signed the CLA!"라는 댓글을 추가하여 검사를 다시 실행할 수 있습니다!

도구 다운로드
명령어설명문서
all사용 가능한 모든 감사자를 실행하거나, kubeaudit 설정에 지정된 감사자를 실행합니다.docs
autofix보안 문제를 자동으로 수정합니다.docs
version현재 kubeaudit 버전을 출력합니다.
명령어설명문서
apparmorAppArmor 없이 실행 중인 컨테이너를 찾습니다.docs
asat자동으로 마운트된 기본 서비스 계정을 사용하는 파드를 찾습니다.docs
capabilities권장 능력을 제거하지 않거나 새 능력을 추가하는 컨테이너를 찾습니다.docs
deprecatedapis더 이상 사용되지 않는 API 버전으로 정의된 리소스를 찾습니다.docs
hostnsHostPID, HostIPC 또는 HostNetwork가 활성화된 컨테이너를 찾습니다.docs
image원하는 이미지 버전(태그를 통해)을 사용하지 않거나 태그 없이 이미지를 사용하는 컨테이너를 찾습니다.docs
limits지정된 CPU 및 메모리 제한을 초과하거나 제한을 지정하지 않은 컨테이너를 찾습니다.docs
mounts민감한 호스트 경로가 마운트된 컨테이너를 찾습니다.docs
netpols기본 차단 네트워크 정책이 없는 네임스페이스를 찾습니다.docs
nonrootroot로 실행 중인 컨테이너를 찾습니다.docs
privesc권한 상승을 허용하는 컨테이너를 찾습니다.docs
privileged권한 모드로 실행 중인 컨테이너를 찾습니다.docs
rootfs읽기 전용 파일시스템이 없는 컨테이너를 찾습니다.docs
seccompSeccomp 없이 실행 중인 컨테이너를 찾습니다.docs
단축긴 이름설명
--format사용할 출력 형식 ("sarif", "pretty", "logrus", "json" 중 하나) (기본값은 "pretty")
--kubeconfig로컬 Kubernetes 설정 파일 경로. 로컬 모드에서만 사용됨 (기본값은 $HOME/.kube/config)
-c--context사용할 kubeconfig 컨텍스트 이름
-f--manifest감사할 yaml 설정 파일 경로. 매니페스트 모드에서만 사용됨. stdin에서 읽으려면 -를 사용할 수 있습니다.
-n--namespace지정된 네임스페이스의 리소스만 감사. 현재 매니페스트 모드에서는 지원되지 않습니다.
-g--includegenerated생성된 리소스(예: 디플로이먼트로 생성된 파드)를 스캔에 포함합니다. kubeaudit이 생성된 리소스에 대한 결과를 생성하도록 하려면 이 플래그를 사용할 수 있습니다 (예: 사용자 정의 리소스가 있거나 소유자 리소스가 더 이상 존재하지 않는 고립된 리소스를 포착하려는 경우).
-m--minseverity보고할 최소 심각도 수준 설정 ("error", "warning", "info" 중 하나) (기본값은 "info")
-e--exitcode심각도가 "error"인 결과가 있을 때 사용할 종료 코드. 관례적으로 0은 성공, 0이 아닌 모든 코드는 오류를 나타냅니다. (기본값은 2)
--no-color출력에 색상을 사용하지 않음 (기본값은 false)