Kubernetes의 정적 분석
Kubelinter는 Kubernetes Yaml 파일 및 헬름 차트를 분석하고 생산 준비 및 보안에 중점을 둔 다양한 모범 사례에 대해 확인합니다.
Kubelinter는 현명한 기본 확인을 실행하여 Kubernetes Yaml 파일 및 헬름 차트에 대한 유용한 정보를 제공하도록 설계되었습니다. 이는 팀이 조기 및 종종 보안 오해 및 DevOps 모범 사례를 확인하는 데 도움이됩니다. 이들의 일반적인 예로는 컨테이너를 뿌리가 아닌 사용자로 실행하고, 특권이 가장 적은 특권을 집행하며, 민감한 정보를 비밀에만 저장하는 것이 포함됩니다.
Kubelinter는 구성 가능하므로 조직 내에서 따라야 할 정책에 따라 확인을 활성화하고 비활성화 할 수 있으며 고유 한 사용자 정의 확인을 만들 수 있습니다.
보풀 점검이 실패하면 Kubelinter는 잠재적 인 문제를 해결하는 방법에 대한 권장 사항을보고하고 0이 아닌 출구 코드를 반환합니다.
Kubelinter 설치, 사용 및 구성에 대한 자세한 설명서는 https://docs.kubelinter.io를 방문하십시오.
Kube-linter binaries는 여기에서 찾을 수 있습니다 : https://github.com/stackrox/kube-linter/releases/latest
GO를 사용하여 설치하려면 다음 명령을 실행하십시오.
go install golang.stackrox.io/kube-linter/cmd/kube-linter@latest그렇지 않으면 릴리스에서 최신 바이너리를 다운로드하여 경로에 추가하십시오.
홈 브루 또는 리눅스 브루를 사용하여 설치하려면 다음 명령을 실행하십시오.
brew install kube-linter nix-shell -p kube-linter
docker pull stackrox/kube-linter:latest
소스에서 kubelinter를 설치하는 것은 다음 단계를 따르는 것만 큼 간단합니다.
먼저, 쿠벨 린터 저장소를 복제하십시오.
git clone [email protected]:stackrox/kube-linter.git 그런 다음 소스 코드를 컴파일하십시오. 이렇게하면 각 플랫폼에 대한 Kube-Linter Binary 파일이 생성되어 .gobin 폴더에 배치됩니다.
make build마지막으로 Kubelinter를 사용할 준비가되었습니다. Kubelinter를 성공적으로 설치하는지 확인하려면 버전을 확인하십시오.
.gobin/kube-linter version여러 층의 테스트가 있습니다. 각 층은 통과 할 것으로 예상됩니다.
go 단위 테스트 :
make test엔드 투 엔드 통합 테스트 :
make e2e-test 마지막으로 bats-core 사용한 엔드 투 엔드 통합 테스트 :
make e2e-batsKubelinter 이미지는 CoSign에 의해 서명됩니다. 이미지를 사용하기 전에 이미지를 확인하는 것이 좋습니다.
COSIGN을 설치하면 Kubelinter Public Key를 사용하여 Kubelinter 이미지를 확인할 수 있습니다.
cat kubelinter-cosign.pub
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEl0HCkCRzYv0qH5QiazoXeXe2qwFX
DmAszeH26g1s3OSsG/focPWkN88wEKQ5eiE95v+Z2snUQPl/mjPdvqpyjA==
-----END PUBLIC KEY-----
cosign verify --key kubelinter-cosign $IMAGE_NAMEKubelinter는 또한 COSIGN 키리스 서명을 제공합니다.
다음과 같이 kubelinter 이미지를 확인할 수 있습니다.
# NOTE: Keyless signatures are NOT PRODUCTION ready.
COSIGN_EXPERIMENTAL=1 cosign verify $IMAGE_NAME kubelinter를 실행하여 YAML 파일을 감금하려면 가장 기본적인 형태의 두 단계 만 필요합니다.
보안 및 생산 준비 모범 사례를 테스트하려는 YAML 파일을 찾으십시오.
다음 명령을 실행하십시오.
kube-linter lint /path/to/your/yaml.yaml 다음 샘플 포드 사양 파일 pod.yaml 고려하십시오. 이 파일에는 두 가지 생산 준비 문제와 하나의 보안 문제가 있습니다.
보안 문제 :
생산 준비 :
컨테이너의 메모리 제한이 설정되지 않으므로 과도한 메모리를 소비 할 수 있습니다.
apiVersion : v1
kind : Pod
metadata :
name : security-context-demo
spec :
securityContext :
runAsUser : 1000
runAsGroup : 3000
fsGroup : 2000
volumes :
- name : sec-ctx-vol
emptyDir : {}
containers :
- name : sec-ctx-demo
image : busybox
resources :
requests :
memory : " 64Mi "
cpu : " 250m "
command : [ "sh", "-c", "sleep 1h" ]
volumeMounts :
- name : sec-ctx-vol
mountPath : /data/demo
securityContext :
allowPrivilegeEscalation : false위의 YAML을 pod.yaml에 복사하고 다음 명령을 실행 하여이 파일을 부과하십시오.
kube-linter lint pod.yamlKubelinter는 기본 점검을 실행하고 권장 사항을보고합니다. 아래는 이전 명령의 출력입니다.
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) The container "sec-ctx-demo" is using an invalid container image, "busybox". Please use images that are not blocked by the `BlockList` criteria : [".*:(latest)$" "^[^:]*$" "(.*/[^:]+)$"] (check: latest-tag, remediation: Use a container image with a specific tag other than latest.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" does not have a read-only root file system (check: no-read-only-root-fs, remediation: Set readOnlyRootFilesystem to true in the container securityContext.)
pod.yaml: (object: <no namespace>/security-context-demo /v1, Kind=Pod) container "sec-ctx-demo" has memory limit 0 (check: unset-memory-requirements, remediation: Set memory limits for your container based on its requirements. Refer to https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#requests-and-limits for details.)
Error: found 3 lint errors
Kubelinter 사용 및 구성에 대한 자세한 내용은 문서 페이지를 방문하십시오.
다음은 사용자가 작성한 kubelinter의 자습서입니다. 이 목록에 추가하려는 사람이 있으면 PR을 보내주십시오!
관리자 및 기타 사용자를 포함한 Kubelinter 커뮤니티에 참여하려면 Slack Workspace에 참여할 수 있습니다.
기여하려면 기고 가이드를 확인하십시오.
알림으로, Kubelinter 커뮤니티에 대한 모든 참여는 우리의 행동 강령에 의해 적용됩니다.
Kubelinter는 개발 초기 단계에 있습니다. 미래에 명령 사용, 플래그 및 구성 파일 형식에 대한 변경 사항이 깨질 수 있습니다. 그러나 kubelinter를 사용하여 환경 YAML 파일을 테스트하고 휴식이 무엇인지 확인하고 기여하는 것이 좋습니다.
Kubelinter는 Apache License 2.0에 따라 라이센스가 부여됩니다.
Kubelinter는 Stackrox에 의해 ❤️로 만들어졌습니다.
Kubelinter 또는 우리가하는 다른 멋진 일들에 관심이 있다면, 우리가 고용하고 있음을 알 수 있습니다! 우리의 열린 위치를 확인하십시오. 우리는 당신의 의견을 듣고 싶습니다!