Certified Kubernetes Security Specialist (CKS)受験記

## はじめに

CNCF主催の認定試験 **Certified Kubernetes Security Specialist (CKS)** を受験し合格したので、受験記を記載します。同認定試験の受験を考えている方の参考になれば幸いです。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## 試験概要

* 受験日：2024/5/21
* 試験形式
    * オンライン試験
    * 1回再受験可能
    * 実機オペレーション形式
    * 試験時間120分
    * 試験言語は日本語、英語が提供
    * 100点満点中67点以上で合格
    * 試験中はKubernetesドキュメントを参照することができます。

## CKSとは

:::note warn
* CKS試験は私が受験したタイミングからアップデートされ、試験範囲が一部追加・変更されています。
* 改めてカリキュラム確認をお願いします。
:::

* Linux Foundationが主催する、Kubernetesに関する知識を認定する資格。2025年3月時点でKubernetes関連資格は以下が存在する。
    * CKA (Certified Kubernetes Administrator)：Kubernetesに関する基本的な知識 + Kubernetesクラスタの管理知識を問う資格
    * CKAD (Certified Kubernetes Application Developer)：Kubernetesを利用する側としての知識を問う資格。主にアプリケーション開発者を想定していると思われる。
    * CKS (Certified Kubernetes Security Specialist)：この試験を受けるにはCKAを持っていることが前提となる。これからもわかるように、CKAレベルの知識はある上で、セキュリティ向上のための知識を問う試験。
    * KCNA (Kubernetes and Cloud Native Associate)：Kubernetes、クラウドネイティブに関する基礎的な知識を問うアソシエイトレベルの試験。
    * KCSA (Kubernetes and Cloud Native Security Associate)：Kubernetes、クラウドネイティブにおけるセキュリティに関する知識を問うアソシエイレベルの試験。
* Kubernetes上で実行するコンテナワークロードや、Kubernetesクラスタ自体のセキュリティを担保する手法・設定を学べます。
* **受験条件としてCKA資格を持っている必要がある**ので、実質CKAの上位資格と言ってもいいのかなと思います。
* 上記5つの認定を取得すると[Kubestronaut](https://www.cncf.io/training/kubestronaut/)に認定されます。

### 難易度

* これまで受けた試験の中でトップレベルの難易度でした。100点満点中67点で合格のところ、68点で超ギリギリで合格でした。
* CKAが前提なこともあり基本的なKubernetes操作はもちろん知っている前提で、セキュリティ設定やサードパーティツールを使う必要があります
* また、120分で15-20問を解く必要があり、時間が足りません。1問あたり6-8分しかかけれません。

## 勉強方法

### 学習リソース

* 対象領域
    * [公式ページ](https://training.linuxfoundation.org/ja/certification/certified-kubernetes-security-specialist/)に対象領域は記載がありますが、抽象的なため理解が難しかったです。
    * [このサイト](https://github.com/walidshaari/Certified-Kubernetes-Security-Specialist)が、公式の対象領域と具体的な技術・設定の対応がわかりやすかったです。
* Udemy
    * まずはKubernetesの思い出しも兼ねて、[UdemyのCKS対策講座](https://www.udemy.com/course/certified-kubernetes-security-specialist-certification/)を受けました。
    * 内容的には網羅されていると思いますが、インド人の方が講師のため英語にクセがあります。おすすめするかというと微妙です。
* YouTube [Kubernetes CKS Full Course Theory + Practice + Browser Scenarios](https://www.youtube.com/watch?v=d9xfB5qaOfg)
    * CKS受験記を検索すると色々な人がオススメしている「Kubernetes CKS 2022 Complete Course」がYouTubeで無料で見られます。
    * 元々はUdemy講座だったのですが、今はYouTubeで公開されています。
    * 後述のKillercodaと連動しているらしく、座学と練習問題が連携して学習できるようです。
    * 存在を知ったのが上記Udemyコースを終えた後だったので今回は使いませんでしたが、次回は使ってみたいなと思います。
* [Killercoda](https://killercoda.com/killer-shell-cks)
    * CKSに関するコマンドラインオペレーションを実際に操作して学べます。問題は40種あります。
Kubernetes系試験は知識もそうですが、手を動かしてオペレーションに慣れないと話にならないので、是非やるべきです。
* [killer.sh](https://killer.sh/)
    * 試験を申し込むと使える、公式のシミュレーター&問題集です。36時間x2回使えます。
    * 本試験より難易度は高めに調整されている、と明言されています。
    * 前述のコピー&ペーストの操作感を掴むためにも、絶対やりましょう。

### 技術的な知見まとめ

* AppArmor
    * 各プログラム（ファイルパス）にセキュリティプロファイルを結びつけ、できることに制限をかける。rootでも制限を受ける。
* Admission Control
    * kube-apiserverに設定するKubernetes組み込みの機能。APIリクエストに対して認証、認可を行ったあとのフェーズで、別途そのリクエストを受け入れるか制御を行う。
* Security Context
    * Pod、コンテナ単位でのセキュリティ設定。実行ユーザの指定、特権有無など色々設定できる。
* falco
    * OSS。Linuxシステムコールを捉え、それをトリガーに通知などができる。想定外のシステムコールの検知等を使い、コンテナワークロード保護に用いる。
    * 試験ではfalcoは導入済のところから始まる。falcoが検知したログからセキュリティ問題の検知や、falcoルールの変更などが求められる。
* Open Policy Agent
    * OSS。マニフェストに対してポリシーを設定し、各マニフェストにそのポリシーに沿うことを強制できる。
* Pod Security Admission
    * Kubernetes公式が定めるPodセキュリティ標準にレベル感 特権(Privileged), ベースライン(Baseline), 制限(Restricted)の定義がある。各定義はSecurityContextなどの設定の集合のイメージ。
    * この定義をネームスペースに適用すると、そのネームスペースのPodは上記の定義に従う形になります。定義に違反していると、Podデプロイがエラーになったりします。
* gVisor(RuntTmeClass)
    * アプリケーションとホストカーネルの間に入り、システムコールの制御などを行う。試験だとランタイムクラスを設定することで、dmesgの情報を最小限にする問題が出ることが多い。
* trivy
    * コンテナイメージに含まれるパッケージ（例：httpd）の脆弱性を検査するサードパーティツール。脆弱性を持つイメージの識別問題が出る。
* kube-bench
    * CIS Benchmarkなどの公開されているセキュリティ基準にkubernetesクラスタが適合しているかを確認できる。ツールを使った問題の検知と、その修正を行う問題が出る。
* kubesec
    * マニフェストにセキュリティ問題が含まれていないかを検査する静的検査ツール。試験には出ない？