Starboard CLIを試す

Starboard CLIを試してみたメモ。

StarboardはCLIとOperatorとある。

導入

CLIの導入はバイナリ、kubectlプラグイン、コンテナイメージなどが利用可能だが、今回はバイナリをダウンロードした。

$ starboard version
Starboard Version: {Version:0.10.3 Commit:5bd33431a239b98be4a3287563b8664a9b3d5707 Date:2021-05-14T12:20:34Z}

starboard initクラスターにセットアップが行われる。ネームスペースが作成され、セキュリティレポートのCRDや設定を格納したConfigMapが作成される。

$ starboard init
$ k get cm -n starboard
NAME                       DATA   AGE
starboard                  11     8s
starboard-polaris-config   1      7s
$ kubectl api-resources --api-group aquasecurity.github.io
NAME                   SHORTNAMES    APIVERSION                        NAMESPACED   KIND
ciskubebenchreports    kubebench     aquasecurity.github.io/v1alpha1   false        CISKubeBenchReport
configauditreports     configaudit   aquasecurity.github.io/v1alpha1   true         ConfigAuditReport
kubehunterreports      kubehunter    aquasecurity.github.io/v1alpha1   false        KubeHunterReport
vulnerabilityreports   vuln,vulns    aquasecurity.github.io/v1alpha1   true         VulnerabilityReport

実行

4種類のスキャンが実行可能。

Trivy

NginxのDeploymentを作成する。

$ kubectl -n default create deployment nginx --image nginx:1.16
deployment.apps/nginx created

スキャナを実行する。対象のリソース指定は必須。

starboard -n default scan vulnerabilityreports deployment/nginx

このとき、裏側ではJob経由でPodが実行される。

レポートが作成されたことを確認する。レポートはコンテナ単位。

$ kubectl get vulnerabilityreports -o wide -A
NAMESPACE   NAME                     REPOSITORY      TAG    SCANNER   AGE   CRITICAL   HIGH   MEDIUM   LOW   UNKNOWN
default     deployment-nginx-nginx   library/nginx   1.16   Trivy     52s   13         45     29       92    0

レポートを確認する。出力が多いので結果は省略。

starboard -n default get vulnerabilities deployment/nginx -o yaml
# or
kubectl -n default get vulnerabilityreports deployment-nginx-nginx -o yaml

Polaris

Porarisを実行する。対象のリソース指定は必須。

starboard -n default scan configauditreports deployment/nginx

レポートが作成されたことを確認する。

$ kubectl get configauditreport -o wide -A
NAME               SCANNER   AGE   DANGER   WARNING   PASS
deployment-nginx   Polaris   24s   1        9         7

レポートを確認する。出力が多いので結果は省略。

starboard -n default get configaudit deployment/nginx -o yaml

HTML出力

レポートをHTML出力して確認する。

starboard -n default get report deployment/nginx > nginx.deploy.html
open nginx.deploy.html

TrivyとPolarisの両方の結果がHTMLで出力される。

f:id:sotoiwa:20210519071514p:plain

f:id:sotoiwa:20210519071530p:plain

対象はNamespaceやNodeの指定も可能。

kube-bench

スキャナを実行する。対象の指定は不要で全ノードに対して実行される。

starboard scan ciskubebenchreports

レポートが作成されたことを確認する。

$ kubectl get ciskubebenchreports -o wide
NAME                                             SCANNER      AGE    FAIL   WARN   INFO   PASS
ip-10-1-108-42.ap-northeast-1.compute.internal   kube-bench   8m1s   0      38     0      14
ip-10-1-71-185.ap-northeast-1.compute.internal   kube-bench   8m1s   0      38     0      14

レポートを確認する。こちらはstarboard getコマンドは対応していない。出力が多いので結果は省略。

kubectl get ciskubebenchreports ip-10-1-108-42.ap-northeast-1.compute.internal -o yaml

HTML出力は可能。最近マージされたばかり(#396)。

starboard get report node/ip-10-1-108-42.ap-northeast-1.compute.internal > ip-10-1-108-42.ap-northeast-1.compute.internal.html
open ip-10-1-108-42.ap-northeast-1.compute.internal.html

f:id:sotoiwa:20210519071555p:plain

kube-hunter

スキャナを実行する。対象はクラスターのため対象指定は不要。

starboard scan kubehunterreports

レポートが作成されたことを確認する。

$ kubectl get kubehunterreports -o wide
NAME      SCANNER       AGE   HIGH   MEDIUM   LOW
cluster   kube-hunter   65s   0      1        1

レポートを確認する。

$ kubectl get kubehunterreports cluster -o yaml
apiVersion: aquasecurity.github.io/v1alpha1
kind: KubeHunterReport
metadata:
  creationTimestamp: "2021-05-11T16:05:19Z"
  generation: 1
  labels:
    starboard.resource.kind: Cluster
    starboard.resource.name: cluster
  name: cluster
  resourceVersion: "44234551"
  selfLink: /apis/aquasecurity.github.io/v1alpha1/kubehunterreports/cluster
  uid: 37c647e2-f006-45d0-8f98-3a418d39bfb4
report:
  scanner:
    name: kube-hunter
    vendor: Aqua Security
    version: 0.4.1
  summary:
    highCount: 0
    lowCount: 1
    mediumCount: 1
    unknownCount: 0
  updateTimestamp: "2021-05-11T16:05:19Z"
  vulnerabilities:
  - avd_reference: https://avd.aquasec.com/kube-hunter/none/
    category: Access Risk
    description: |-
      CAP_NET_RAW is enabled by default for pods.
          If an attacker manages to compromise a pod,
          they could potentially take advantage of this capability to perform network
          attacks on other pods running on the same node
    evidence: ""
    severity: low
    vulnerability: CAP_NET_RAW Enabled
  - avd_reference: https://avd.aquasec.com/kube-hunter/khv002/
    category: Information Disclosure
    description: 'The kubernetes version could be obtained from the /version endpoint '
    evidence: v1.19.6-eks-49a6c0
    severity: medium
    vulnerability: K8s Version Disclosure

こちらはHTML出力は未対応。

クリーンアップ

掃除する。

starboard cleanup