Kubernetes セキュリティスペシャリスト（CKS）合格までの道のり

2021年3月に「Certified Kubernetes Security Specialist（CKS）」を受験し、無事合格することができたので、CKS の概要や学習方法、受験した後の感想などをまとめてみました。
これから CKS を受験してみようと考えている方の参考になれば幸いです。

## 目次
<!-- タイトルとアンカー名を編集 -->
1. [CKS とは](#cks-とは)
1. [学習方法](#学習方法)
1. [試験当日](#試験当日)
1. [Tips](#tips)
1. [受験後の感想](#受験後の感想)
1. [おわりに](#おわりに)

<a id="#Chapter1"></a>
## CKS とは

[Certified Kubernetes Security Specialist（CKS）](https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/) は、コンテナアプリケーションや Kubernetes プラットフォームに関するセキュリティスペシャリスト認定試験です。

Linux Foundation が提供している認定試験で、2020年11月にリリースされました。他にも Linux Foundation が提供する Kubernetes 関連試験としては [CKAD](https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/) と [CKA](https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/) がありますが、試験の形式は全く同じで、ラインナップの一つとして `セキュリティ特化の CKS` が追加されたような形です。
![1_lineup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240692/e8b9fc4f-7372-c8d8-7717-071b24f61fc4.png)
なお、CKA に合格していることが受験の前提条件になりますので、未取得の場合は CKA → CKS の順に取得する必要があります。試験の範囲は一部重複しているので、CKA を取得したらそのまますぐに CKS の学習を始めると効率的です。

#### 試験概要

試験概要について文章だけで記載しても分かりづらいと思いますので、箇条書きで要点を整理してみました。CKAD・CKA と同様、実際に Kubernetes 環境を用いてハンズオン形式で試験が進むため、実践的なスキルが要求されます。

- 試験範囲： コンテナアプリケーションのビルド・デプロイ・実行、Kubernetes プラットフォーム保護（詳細は後述）
- 試験時間： 2時間
- 問題数　： 15-20問（筆者が受験した際は15問）
- 合格基準： 67%以上
- 受験料　： $300（KubeCon + CNC EU 2021 に参加すると50%オフクーポンがもらえるそうです）
- 受験条件： CKA に合格していること
- 受験形式： オンライン受験・ハンズオン形式
- 有効期間： 2年間
- 対応言語： 英語のみ（2021年3月時点）

#### 試験範囲

続いて試験範囲についてですが、今回受験した v1.20 の時点では、以下のような配分・内容になっていました。Third Party のツールも出題対象に含まれているため、試験範囲はとても広い印象を受けます。これでも一部省略しておりますので、全文については [公式カリキュラム](https://github.com/cncf/curriculum) をご参照ください。

- `10% ― Cluster Setup`
    - Network Policy によるアクセス制限
    - CIS ベンチマークに基いたセキュアな Kubernetes 設定
    - SSL によるセキュアな Ingress 利用 など
- `15% ― Cluster Hardening`
    - Kubernetes API のアクセス制限・RBAC 設定
    - Kubernetes クラスタアップデート など
- `15% ― System Hardening`
    - カーネルのセキュリティ機能利用（AppArmor・seccomp）
    - ホスト OS における攻撃対象の縮小 など
- `20% ― Minimize Microservice Vulerabilities`
    - コンテナへの適切な権限付与（Pod Security Policy・Open Policy Agent・Security Context）
    - サンドボックス化されたコンテナランタイム（gVisor・Kata Containers）
    - mTLS による Pod 間通信の暗号化 など
- `20% ― Supply Chain Security`
    - ベースイメージのフットプリント最小化（Multi-Stage Builds）
    - イメージ脆弱性スキャン（Trivy）など
- `20% ― Monitoring, Logging and Runtime Security`
    - Syscall やファイルアクセスに基づく振る舞い検知（Falco）
    - コンテナランタイムの不変性保証
    - Audit ログの設定・確認方法 など


<a id="#Chapter2"></a>
## 学習方法

#### コンテナセキュリティ基礎

CKS の受験に向けて実際にどのような準備をしたかを紹介したいと思います。筆者は1年ほど Kubernetes を使った業務に携わってはいるものの、これまでコンテナセキュリティ周りに関しては全く触れる機会がなかったため、まずはコンテナセキュリティの基礎から学習し始めました。

コンテナセキュリティについてネットで検索すると至る所で目にする有名な書籍ですが、「[Docker/Kubernetes 開発・運用のためのセキュリティ実践ガイド](https://www.amazon.co.jp/Docker-Kubernetes%E9%96%8B%E7%99%BA%E3%83%BB%E9%81%8B%E7%94%A8%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-Compass-Books%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%A0%88%E7%94%B0/dp/4839970505)」を参考書として学習を進めました。

コンテナセキュリティ基礎から始まり、Kubernetes クラスタのセキュリティやアプリケーション間通信のセキュリティなどの CKS の範囲にも及んでいる上、説明・図ともに分かりやすくてとても参考になります。
![book.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240692/62a7c5b2-c65d-bda2-79fe-33216fe59056.jpeg)

#### CKS 試験対策

こちらは、コンテナセキュリティの基礎を学んだ後、CKS にフォーカスした試験対策として着手したコンテンツです。正直なところ「とにかくすぐに CKS を取得したい！」という方にとってはこちらだけでも十分試験範囲をカバーできます。

ただし、先ほど紹介した書籍などでコンテナセキュリティの基礎から順に学んだ方が、理解度も高まって個人的にはおすすめです。また、以下で紹介しているコンテンツは `全編英語` の内容になるので、事前知識があれば聞き取れない部分をある程度カバーできるという点でもおすすめです。

CKAD・CKA 向けに Udemy のコースがあるのをご存知の方も多いかと思いますが、同じように CKS 向けのコースがいくつか存在しています。筆者は最もレビュー評価の高い「[Kubernetes CKS 2021 Complete Course + Simulator](https://www.udemy.com/course/certified-kubernetes-security-specialist/)」を利用しました。

- コース： Kubernetes CKS 2021 Complete Course + Simulator
- 作者　： Kim Wüstkamp さん
- 時間　： 合計11時間（ハンズオンを実施していると実際はもっと時間がかかります）
- 言語　： 英語のみ
- 金額　： ¥ 4,800（クーポンコード `KILLER-SHELL-CKS-3` で25%オフになります）
    - 最新のクーポンコードは、[CKS Exam Series](https://wuestkamp.medium.com/) の最新の投稿に記載されています
- その他： CKS Simulator あり

![kim.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1240692/1b7a0a04-3373-3f2e-fee7-c308e7badc30.jpeg)

基本的には、章ごとに説明 → ハンズオンの流れで進んでいきます。各章は [公式カリキュラム](https://github.com/cncf/curriculum) に沿った形になっているので、試験範囲がほとんどカバーされています。また、ハンズオンは Google Compute Engine（GCE）上にインスタンスを2つ起動して Master Node 1台 + Worker Node 1台を構築して実施していきますが、環境に制約はないので EC2 インスタンスや自宅サーバ上でも実施可能です。

また、先ほどその他の項目に「CKS Simulator あり」と書きましたが、これは2時間・合計22問の模擬試験のようなもので、実際の試験と同様「指定されたクラスタに、指定された設定やリソース作成を行う」という構成になっています。1回 Simulator を起動すると36時間環境を利用し続けることができますが、2回までしか起動することができません（本番の試験と同様、ちゃんと準備してから使用してほしいという作者の想いによるもの）。万が一本番の試験で不合格になってしまった場合のみ、再利用できるそうです。

前述した2つのコンテンツを実施すること約1.5ヶ月間、一通り学習を終えて [Linux Foundation の公式ページ](https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/) から購入・予約を行いました。受験日はその日から2, 3日後の枠から選択できましたが、申し込む時期にもよると思うので、早めに申し込んでおいたほうが安心です。

<a id="#Chapter3"></a>
## 試験当日

午前中に部屋を簡単に片付けて、午後14〜16時の間に試験に望みましたが、CKAD・CKA 試験で慣れた流れというのもあってか特にトラブルもなく無事に受験することができました。一部 CKAD・CKA から変わっているところがありますので、以下に要点を整理しました。

- 受験環境　： 自宅、机の上にカメラ付き PC と充電器を設置
- 受験時間　： 14〜16時
- 問題数　　： 15-20問（筆者が受験した際は15問）
- 合格基準　： 67%以上
- 必要なもの： [公式 FAQ](https://docs.linuxfoundation.org/tc-docs/certification/faq-cka-ckad-cks) に記載されている身分証明書（パスポートなど）
- 参照可能なドキュメント： [公式ドキュメント](https://docs.linuxfoundation.org/tc-docs/certification/certification-resources-allowed#certified-kubernetes-security-specialist-cks) に記載されているように、タブを一つ開いて以下を参照できます（CKAD・CKA よりも増えています）
    - https://kubernetes.io/docs/
    - https://github.com/kubernetes/
    - https://kubernetes.io/blog/
    - https://github.com/aquasecurity/trivy
    - https://docs.sysdig.com/
    - https://falco.org/docs/
    - https://gitlab.com/apparmor/apparmor/-/wikis/Documentation
- その他：
    - ラベルなしの透明なペットボトルに入った水は持ち込み可
    - 試験官に伝えてお手洗いなど一時退出可
    - kubectl コマンドの補完設定はされている

CKAD・CKA のときとは異なり、参照可能なドキュメントに Trivy・Sysdig・Falco・AppArmor の公式ドキュメントが追加されています。使うタイミングは1度くらいしかありませんでしたが、問題にもよると思うのですぐにアクセスできるようにブックマーク登録しておくことをおすすめします。なお、試験環境で Third Party ツールはすでに準備されているので、インストール手順等は覚えておく必要はありません。

また、試験全体の流れとしては、CKAD・CKA と同様以下のような流れになります。

1. 　試験開始10分前くらいに、開始するためのボタンが表示されるのでクリックする
1. 　試験官からのチャットの案内に従って、試験開始の準備を進める（カメラを通した身分証提示や部屋・机周辺の確認など）
1. 　試験実施
1. 　試験後のアンケート回答
1. 　36時間以内に結果を受領（試験終了から34時間20分後の深夜2:20にメールが来て、スコアは84%で合格でした）

今回は15問出題されて、1問あたり8分はかけられるはずなので焦らずゆっくりと考えていましたが、自信があった問題で上手くリソースが作成されず「なんでだ・・もうちょっとだけ調べたい・・」と時間をかけてしまったり、2問ほどすぐにはわからない問題があったので、結局2時間フルで使い果たしました。見直しをする時間はなかったので、試験結果のメールがくるまでは不安でいっぱいでした。

<a id="#Chapter4"></a>
## Tips

これまでの内容と一部重複する部分もありますが、改めて CKS 受験にあたっての Tips をまとめました。

- `準備期間`
    - とにかく実環境上で手を動かしながら準備
        - 試験時間は2時間と限られているので、スムーズに回答できるよう準備しておく必要があります
        - その際、参照したドキュメントについて「なんとなくこのワードで検索したな」というのを覚えておくとよいです
    - 参照可能なドキュメントは全てブックマーク
    - 今回紹介した Udemy コース以外にも同様のものがあるかもしれませんが、CKS Simulator は実施しておくと安心
        - どのような問題が出題されるか感覚を掴むことができます
- `試験当日`
    - デフォルトで設定されている kubectl コマンドの補完設定を最大限活用
        - 試験時間は2時間と限られているので、スムーズに回答できるよう工夫する必要があります
    - 分からない問題はスキップして、分かる問題を回答し終わったあとに対処
        - 途中で躓いた場合もスキップするのがよいですが、なかなか諦めがつかないので第二の時間制限をつけるとよさそうです
    - コピー&ペーストは「Command + C」と「Command + V」で可能
- `CKS 特有の Tips`
    - 問題が少し複雑（人によって意見は異なるかも）
        - CKS では「Master Node 上の API サーバのある設定が正しくないため、適切に修正してからリソース A とリソース B を作成して、リソース C がある状態になることを確認しなさい」のような問題が出るので、CKAD・CKA と比べると複雑な問題が多いです
        - まずは問題にざっと目を通して、上から順に着実に設定・リソース作成を行っていきましょう
    - 頻繁に Master Node や Worker Node にログインするので、次の問題に行くときにログアウトすることを忘れないように要注意

<a id="#Chapter5"></a>
## 受験後の感想

Kubernetes だけでなく Third Party ツールも試験範囲に含むという点で CKAD・CKA と比べて勉強することが多く苦労はしましたが、コンテナセキュリティの基礎から Kubernetes コンテナセキュリティについて学ぶとてもいい機会になりました。実際に手を動かして勉強するおかげで記憶への定着率も高く、自信にも繋がります。

とはいえ、個人的には実案件で Kubernetes セキュリティスペシャリストとして活躍するには「広く浅く」な試験だと感じました。資格を取得したことだけに満足せず、これからも知識の深堀りを続けていこうと思います。

<a id="#Chapter6"></a>
## おわりに

以上、CKS 概要や勉強方法、試験における Tips の紹介でした。これを機に、今後も Kubernetes セキュリティやその他勉強中のトピックについて情報を共有していきたいと思います。

本投稿に関して、ご指摘やアドバイス・質問等がありましたらぜひコメント欄に記入いただけたらと思います。