kubectl을 사용해서 Pod를 생성하는 요청을 보냈다고 하면, Authentication, Authorization, Admission Controller를 거쳐서 Pod를 생성하게 된다.
이러한 수많은 과정을 거치기 전, 클러스터에 배포되기 전에 먼저 검토하고 보안 정책을 적용할 수 있다면 어떨까?
유저 워크로드를 정적 분석하여, 리소스 파일을 검토하고 정책을 적용하기 위해, kubesec이라는 툴을 사용할 수 있다.
kubesec은 리소스 파일을 분석하여, 보안 위협을 발생시킬 수 있는 이슈가 포함되어 있는지, 어떤 이유에서 위협이 발생할 수 있는지 기재되어 있는 결과 파일이 출력된다. 결과 파일에는 분석 결과에 따른 점수도 포함되어 있다.
[
{
"object": "Pod/node.default",
"valid": true,
"fileName": "node.yaml",
"message": "Failed with a score of -27 points",
"score": -27,
"scoring": {
"critical": [
{
"id": "Privileged",
"selector": "containers[] .securityContext .privileged == true",
"reason": "Privileged containers can allow almost completely unrestricted host access",
"points": -30
}
],
"passed": [
{
"id": "ServiceAccountName",
"selector": ".spec .serviceAccountName",
"reason": "Service accounts restrict Kubernetes API access and should be configured with least privilege",
"points": 3
}
],
...
위 결과 예시에서는 Privileged 관련 항목을 위반한 것으로 확인이 되었으며, 이에 따라 -27점을 기록하여 검사를 통과하지 못하였다.
직접 설치하는 방법은 다음과 같다. 그 외에도 도커 컨테이너로 실행하는 방법도 있다.
$ wget https://github.com/controlplaneio/kubesec/releases/download/v2.11.0/kubesec_linux_amd64.tar.gz
$ tar -xvf kubesec_linux_amd64.tar.gz
$ mv kubesec /usr/bin/
정상적으로 설치되었는지 확인한다.
$ kubesec
Validate Kubernetes resource security policies
Usage:
kubesec [command]
Available Commands:
help Help about any command
http Starts kubesec HTTP server on the specified port
scan Scans Kubernetes resource YAML or JSON
version Prints kubesec version
Flags:
-h, --help help for kubesec
kubesec scan 명령어를 사용하여 리소스 정의 파일을 분석할 수 있다.
$ kubesec scan pod.yaml
그 외에 kubesec을 직접 설치하지 않고, kubesec의 퍼블릭 호스트 서비스에 요청을 보내는 방법도 있다.
$ curl -sSX POST --data-binary @"pod.yaml" http://v2.kubesec.io/scan
kubesec을 로컬 서버로 실행한 후에 요청을 보내는 방법도 사용할 수 있다.
$ kubesec http 8080&