[Kubernetes] 리소스 정적 분석하기

Jay·2022년 1월 2일
0

유저 워크로드에 대한 정적 분석

kubectl을 사용해서 Pod를 생성하는 요청을 보냈다고 하면, Authentication, Authorization, Admission Controller를 거쳐서 Pod를 생성하게 된다.

이러한 수많은 과정을 거치기 전, 클러스터에 배포되기 전에 먼저 검토하고 보안 정책을 적용할 수 있다면 어떨까?

kubesec

유저 워크로드를 정적 분석하여, 리소스 파일을 검토하고 정책을 적용하기 위해, kubesec이라는 툴을 사용할 수 있다.

https://kubesec.io

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점을 기록하여 검사를 통과하지 못하였다.

kubesec 설치하기

직접 설치하는 방법은 다음과 같다. 그 외에도 도커 컨테이너로 실행하는 방법도 있다.

$ 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 사용해보기

kubesec scan 명령어를 사용하여 리소스 정의 파일을 분석할 수 있다.

$ kubesec scan pod.yaml

그 외에 kubesec을 직접 설치하지 않고, kubesec의 퍼블릭 호스트 서비스에 요청을 보내는 방법도 있다.

$ curl -sSX POST --data-binary @"pod.yaml" http://v2.kubesec.io/scan

kubesec을 로컬 서버로 실행한 후에 요청을 보내는 방법도 사용할 수 있다.

$ kubesec http 8080&
profile
공부 하고 싶은 직장인의 기록장

0개의 댓글