Certified Kubernetes Security Specialist (CKS) 受験感想＆準備方法

###記事リンク：
※ CKSの紹介は<a href="https://qiita.com/T0P1X/items/feacea942137660f796c">こちら</a>です。
※ CKAD＆CKA受験感想は<a href="https://qiita.com/T0P1X/items/5dad2a7ff9307ed663f1">こちら</a>です。                                                                                                                                                                                                                     

---
#Certified Kubernetes Security Specialist
#1. はじめに
2020年末にリリースした新しいKubernetes認定資格<a href="https://www.cncf.io/certification/cks/"> Certified Kubernetes Security Specialist </a>を合格しましたので、感想と準備方法を共有したいと思います。

![CNCF_Certificate_CKS_YUANCHENXUAN.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/8bc4a1d5-f27b-7999-68b9-ff359baa2baa.jpeg)

#2. CKSについて
2020年末から <a href="https://www.cncf.io/certification/ckad/">CKAD</a> と <a href="https://www.cncf.io/certification/cka/">CKA</a> の2種を加えて、``CKAを所持している人しか受けれない``
新たな資格 <a href="https://www.cncf.io/certification/cks/">CKS</a> がリリースされました。``※ CKS試験は英語のみです。ご注意ください。``

![CKA_CKAD_CKS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/57f60af3-880e-a62a-8ee5-9d2016a67191.jpeg)

###CKS のカリキュラムは以下の通り：
1　``Cluster Setup``
　（クラスターをセットアップする）
2　``Cluster Hardening``
　（クラスターを要塞化する）
3　``System Hardening``
　（カーネル・システムのセキュリティを向上する）
4　``Minimize Microservice Vulnerabilities``
　（マイクロサービスの脆弱性を最小限に抑える）
5　``Supply Chain Security``
　（サプライチェーンのセキュリティを向上する）
6　``Monitoring, Logging, and Runtime Security``
　（監視、ロギング、およびランタイムセキュリティを向上する）

※　CKS試験詳細を説明する記事は投稿してあります。以下リンクよりご覧にいただけます。
→ <a href="https://qiita.com/T0P1X/items/feacea942137660f796c">``Qiita : Certified Kubernetes Security Specialist (CKS) 新たな挑戦へ``</a>

#3. 出題シナリオ
CKS試験は2時間内15問から20問を解決する必要があります。
よって、試験は問題プールから合計100点になるように組み合わせで生成されています。
ちなみに私の場合は計15問で、15問中初見殺し問題は2問でした。

試験問題はいろんなパターンで出題されると思いますが、シナリオは大体同じです。
``※ 以下はあくまでも本番試験問題と似ているものです。ご注意ください！``

01. ``CISベンチマークを使用してmaster nodeとworker nodeの脆弱性を確認できる``
``脆弱性がある場合、項目を推奨設定に修正できる``
※ 試験時kube-benchはインストール済み
kube-benchドキュメント：
→　<a href="https://www.cisecurity.org/benchmark/kubernetes/
">CIS Benchmark For Kubernetes</a>
→　<a href="https://github.com/aquasecurity/kube-bench
">Github : aquasecurity/kube-bench</a>

02. ``role、rolebinding、clusterrole、clusterrolebindingを使いこなせる``
``rolebinding、clusterrolebindingにserviceaccountを定義できる``
role、rolebinding、clusterrole、clusterrolebindingのテンプレート：
→　<a href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/
">Kubernetes.io : Using RBAC Authorization</a>

03. ``kube-apiserver.yamlを修正し、セキュリティを強化できる``
kube-apiserver.yamlのオプション一覧：
→　<a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/#options
">Kubernetes.io : kube-apiserver #Options</a>

04. ``audit機能を有効し、設定ファイルに指定項目を追加してログを取れる``
``試験問題に応じてaudit-logの保存期間、保存数、最小最大容量を設定修正を行える``
kube-apiserver.yamlのオプション一覧：
→　<a href="https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/#options
">Kubernetes.io : kube-apiserver #Options</a>
audit-policy.yamlのテンプレート：
→　<a href="https://https://kubernetes.io/docs/tasks/debug-application-cluster/audit/#audit-policy
">Kubernetes.io : Auditing #audit-policy</a>

05. ``kubernetesのバイナリファイルのハッシュタグを確認し、異なるものを削除できる``
kubernetes公式リリースノート：
→　<a href="https://github.com/kubernetes/kubernetes/releases
">Github : kubernetes/releases</a>
sha512sumドキュメント：
→　<a href="https://linuxjm.osdn.jp/html/GNU_coreutils/man1/sha512sum.1.html
">Man page of SHA512SUM</a>

06. ``Falcoの起動（有効化）および出力フォーマットの修正を行える``
``Falcoの監視ログを確認し、セキュリティ問題があるコンテナを探せる``
※ 試験時Falcoはインストール済み
Falco公式ドキュメント：
→　<a href="https://falco.org/
">The Falco Project</a>
falco-ruleの出力変数一覧：
→　<a href="https://falco.org/docs/rules/supported-fields/
">Falco : Supported Fields for Conditions and Outputs</a>

07. ``Trivyを使用して、実行中のpodに使用しているimageの脆弱性をスキャンできる``
``またはTrivyを使用して、ローカルにあるimageを実行せずに脆弱性をスキャンできる``
※ 試験時Trivyはインストール済み
Trivy公式ドキュメント：
→　<a href="https://github.com/aquasecurity/trivy
">Gitub : aquasecurity/trivy </a>
imageをスキャンする方法：
→　<a href="https://github.com/aquasecurity/trivy#image
">Gitub : Trivy image scan</a>

08. ``AppArmorを有効化してAppArmorを使用したcontainerを起動できる``
AppArmor公式ドキュメント：
→　<a href="https://gitlab.com/apparmor/apparmor
">GitLab : apparmor </a>
AppArmorをcontainerに設定する方法：
→　<a href="https://kubernetes.io/docs/tutorials/clusters/apparmor/
">Kubernetes.io : Restrict a Container's Access to Resources with AppArmor</a>

09. ``Admission controllersの状態を確認し、必要に応じてオプションの有効・無効を行える``
Admission controllersオプション一覧：
→　<a href="https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
">Kubernetes.io : Using Admission Controllers</a>

10. ``gvisor用のRuntimeclassを作成し、gvisorを使用するコンテナを起動できる``
``その後、起動したコンテナのdmesgを出力できる``
※ 試験時gvisorは設定済み
RuntimeClassのテンプレート：
※ テンプレートのapiVersionを要注意！ apiVersion: node.k8s.io/v1beta1 が正しい
→　<a href="https://kubernetes.io/docs/concepts/containers/runtime-class/#2-create-the-corresponding-runtimeclass-resources
">Kubernetes.io : Create the corresponding RuntimeClass resources</a>
RuntimeClassを使用したpodのテンプレート：
→　<a href="https://kubernetes.io/docs/concepts/containers/runtime-class/#usage
">Kubernetes.io : RuntimeClass Usage</a>
dmesgについて：
→　<a href="https://www.atmarkit.co.jp/ait/articles/1612/20/news023.html
">【dmesg】コマンド――カーネルが出力したメッセージを表示する</a>

11. ``tls用secretを作成し、Ingressに作成したsecretを使用してmtlsを設定できる``
tls用ingressのテンプレート：
→　<a href="https://kubernetes.io/docs/concepts/services-networking/ingress/#tls
">Kubernetes.io : ingress #tls</a>
tls用secretのテンプレート：
→　<a href="https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets
">Kubernetes.io : secret #tls-secrets</a>
※　$ kubectl create secret tls --key --crt を使ったほうが楽

12. ``EncryptionConfigurationを有効化し、secretを暗号化できる``
``またはetcdctlを使用してsecretをhackingできる``
EncryptionConfigurationのテンプレート：
→　<a href="https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration
">Kubernetes.io : Understanding the encryption at rest configuration</a>
etcdのsecret情報格納先に関する内容：
→　<a href="https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/">Kubernetes.io : Operating etcd clusters for Kubernetes</a>


13. ``Pod Security Policyを有効化し、Pod Security Policyを使用したpodを起動できる``
Pod Security Policyのプラグ一覧：
→　<a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/#what-is-a-pod-security-policy">Kubernetes.io : What is a Pod Security Policy?</a>
Pod Security Policyのテンプレート：
→　<a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/#create-a-policy-and-a-pod">Kubernetes.io : Create a policy and a pod</a>
Pod Security Policyのvolumes設定：
→　<a href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/#volumes-and-file-systems">Kubernetes.io : Volumes and file systems</a>

14. ``Secretの仕組みを理解し、podなどからsecretを取り出せる``
Secretについて：
→　<a　href="https://kubernetes.io/docs/concepts/configuration/secret/">Kubernetes.io : Secrets</a>
Secretをvolumeとして使用するバターン：
→　<a　href="https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod">Kubernetes.io : Using Secrets as files from a Pod</a>
Secretをenvとして使用するバターン：
→　<a　href="https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables">Kubernetes.io : Using Secrets as environment variables</a>

15. ``OPAの仕組みを理解し、ConstraintTemplateを利用してImagePolicyWebhookを使える``
ConstraintTemplateのテンプレート：
→　<a href="https://kubernetes.io/blog/2019/08/06/opa-gatekeeper-policy-and-governance-for-kubernetes/#policies-and-constraints">Kubernetes.io : OPA Gatekeeper #Policies and Constraints</a>
Admission ControllersにImagePolicyWebhookを追加：
→　<a href="https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/">Kubernetes.io : Using Admission Controllers</a>

上記シナリオを参考に、2時間以内を基準にやってみてください。
後述する対策用コンテンツについている模擬試験にも似ている問題が出ます。

#4. CKS試験までにやったこと
``※ 準備期間 2020/12/2 から 2020/12/27 の約1か月``
① 対策用コンテンツを用いて学習
② 参考書で不足知識を補完
③ １個目の模擬試験を使ってチェック（得点70%）
④ 間違った問題を何回もやり直す
⑤ Kubernetes.ioとSysdig社のKubernetes Security Guide Best Practicesを読む
⑥ 試験前日に２個目の模擬試験を使って再度チェック（得点97%）
⑦ 充分な睡眠を取る　← 結構大事

### 対策用コンテンツ
まず、こちらの Udemy の対策用コンテンツです。
![Kubernetes-CKS-2021-Complete-Course-Simulator.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/debab0a9-bb8e-f9aa-c2b1-304b7ff88adc.jpeg)
▶︎　<a  href="https://px.a8.net/svt/ejp?a8mat=3BBMET+1FSQEQ+3L4M+BW0YB&a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fcertified-kubernetes-security-specialist%2F"> Udemy : Kubernetes CKS 2021 Complete Course + Simulator</a>
クーポンコード： ``CKS-KILLER-SHELL``　← 無効になりました
クーポンコード： ``YES-YES-CKS``

この対策用コンテンツには本番試験の雰囲気を味わうことができる模擬試験がついています。
同じく2時間で本番試験の問題数は15~20問、こちらの模擬試験は25問です。
また、本番試験より難易度が高いので、かなりチャレンジになるでしょう。
模擬試験の採点システムの精度は割と高かったです。

対策用コンテンツはCKA知識復習を含め、広範囲のセキュリティ対策も紹介してくれました。
また、模擬試験をちゃんと活用できて個人的には大満足でした。
``※ 短期決戦でCKSを取りたい方にはおすすめです。``

![Udemy_Certificate_CKS_YUANCHENXUAN.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/f5116bf3-cd85-b791-61c4-8d65ca65bc0c.jpeg)
　　　　　　　▲　<a  href="https://px.a8.net/svt/ejp?a8mat=3BBMET+1FSQEQ+3L4M+BW0YB&a8ejpredirect=https%3A%2F%2Fwww.udemy.com%2Fcourse%2Fcertified-kubernetes-security-specialist%2F"> Udemy : Kubernetes CKS 2021 Complete Course + Simulator</a>

クーポンコード： ``CKS-KILLER-SHELL``　← 無効になりました
クーポンコード： ``YES-YES-CKS``

---
▶︎　上記対策用コンテンツの作者である Kim Wuestkamp のブログは<a  href="https://medium.com/faun/cks-certified-kubernetes-security-specialist-418d55c86465">こちら</a>です。

Kim Wuestkamp 氏は毎週CKS資格試験向けにチャレンジ問題を投稿しています。
余力がある方はぜひ挑戦してみてください。

▼　以下は2021/1/11まで Kim Wuestkamp の投稿です。
・ <a  href="https://itnext.io/cks-exam-series-1-create-cluster-security-best-practices-50e35aaa67ae"> CKS Exam Series #1 Create Cluster & Security Best Practices</a>
・ <a  href="https://itnext.io/cks-exam-series-2-pods-and-secrets-3d92a6fba331"> CKS Exam Series #2 Pods, Secrets and ServiceAccounts</a>
・ <a  href="https://itnext.io/cks-exam-series-3-immutable-pods-3812cf76cff4"> CKS Exam Series #3 Immutable Pods</a>
・ <a  href="https://itnext.io/cks-exam-series-4-crash-that-apiserver-5f4d3d503028"> CKS Exam Series #4 Crash that Apiserver</a>
・ <a  href="https://itnext.io/cks-exam-series-5-imagepolicywebhook-8d09f1ceee70"> CKS Exam Series #5 ImagePolicyWebhook</a>

---
``2021/1/8 追記：``

Linux Foundationは2021年1月8日に以下の学習コンテンツをリリースしました。
▶︎　 <a  href="https://training.linuxfoundation.org/training/kubernetes-security-essentials-lfs260/">Kubernetes Security Essentials(LFS260)</a> 
去年のCyber Mondayセールの時、CKSの受験料と上記コンテンツのセットは安かったので、
購入しました。
リリースする前にCKSをクリアしましたが、使わないともったいないと思って受けました。
コンテンツの内容が充実でかなりよかったですが、シミュレーターがついていないので、
これだけでCKSをクリアするのは難しいと思います。
要するに実戦的な練習（ハンズオン）をたくさん積みましょう！

![Kubernetes Security Essentials_LFD260_YUANCHENXUAN.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/a2f1d05c-a90d-0284-9ea9-dea916ab8c53.jpeg)
　　　　　　　　　　　　▲　<a  href="https://training.linuxfoundation.org/training/kubernetes-security-essentials-lfs260/">Kubernetes Security Essentials(LFS260)</a> 

---
### 参考書

① 「Docker/Kubernetes開発・運用のためのセキュリティ実践ガイド」

こちらの本はいろんな視点からみたDocker、Kubernetesのセキュリティ問題、
注目すべきなポイント、要点などを詳しくまとめたものです。
個人的にはさらっと読める書籍だと思いますが、基礎がないと意外と難しいかもしれません。
![Docker/Kubernetes開発・運用のためのセキュリティ実践ガイド [須田 瑛大].jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/cd53f442-c99a-664a-8139-2b32827911c9.jpeg)
▲　<a  href="https://rpx.a8.net/svt/ejp?a8mat=3BBMEM+1VA04Y+2HOM+BWGDT&rakuten=y&a8ejpredirect=https%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20041693609_3BBMEM_1VA04Y_2HOM_BWGDT%3Fpc%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F16191747%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F19903143%252F">Docker/Kubernetes開発・運用のためのセキュリティ実践ガイド　[須田 瑛大]</a>

② 「Kubernetes完全ガイド 第2版」

もともとKubernetes完全ガイド第1版は持っていましたが、
青山氏が第2版をリリースしたので新しいものを購入しました。
ゆっくりで読める時間は中々なかったので、ずーと本棚に飾っていました。
CKS準備するタイミングで第1版との差分をじっくり読みました。
図と文章に合わせた説明は相変わらず上手かったです。
![Kuberentes完全ガイド.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/488023/db6ea639-dbb2-474c-ce8f-83860b8eaf64.jpeg)
▲　<a  href="https://rpx.a8.net/svt/ejp?a8mat=3BBMEM+1VA04Y+2HOM+BWGDT&rakuten=y&a8ejpredirect=https%3A%2F%2Fhb.afl.rakuten.co.jp%2Fhgc%2Fg00q0724.2bo11c45.g00q0724.2bo12179%2Fa20041693609_3BBMEM_1VA04Y_2HOM_BWGDT%3Fpc%3Dhttps%253A%252F%252Fitem.rakuten.co.jp%252Fbook%252F16394303%252F%26m%3Dhttp%253A%252F%252Fm.rakuten.co.jp%252Fbook%252Fi%252F20074557%252F">Kubernetes完全ガイド 第2版　[青山 真也]</a>

###準備用環境
GCPのGKEかAWSのEKSなどのマネジメントサービスがついている環境はおすすめしません。
GCPのGCEかAWSのEC2などのインスタンスにkubeadmを使用して、
ゼロから準備用環境を用意したほうが受験に役たちます。（私はGCEを使いました）
準備用環境は結構ぶっ壊れやすいですので、各インスタンスのイメージを取りましょう。

▼ kubeadmでkubernetesクラスタを構築手順
・ <a  href="https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/">Kubernetes.io : Installing kubeadm</a>
・ <a  href="https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/">Kubernetes.io : Creating a cluster with kubeadm</a>

#5. 受験感想
CKADとCKA試験を受けた時と同じ、予約した試験開始時刻より15分前に待機していました。
10分前から試験開始ボタンが表示されるはずですが、今回は開始時刻になるまで、
ボタンが表示されなかったです。
試験はちゃんと予約しましたよね？、システムが落ちた？とか、試験前から焦りました。

``試験の画面UIは2020年の夏から更新されました``が、
個人的には前の画面UIが使いやすかった気がします。
CKADとCKAの時、notepad に各問題の点数と解答具合をメモしましたが、
今回、画面UIが変わった関係で notepad はどこから起動すればよいかがわかりません。
なので、メモー帳なしの状態でなんとか頑張りました。

試験中3回ぐらいネットワークが切断され、絶好調の状態から一気に冷えました。
リストアは毎回3~5分ほどかかります。``※ 試験時間は延長してくれます。``
ネットワークが切断された時、頭を冷やせるサービスタイムはありがたいですね！（笑）

<a  href="https://github.com/aquasecurity/trivy#image">``Trivy``</a>、<a  href="https://sysdig.jp/">``Sysdig``</a>、<a  href="https://falco.org/docs/rules/supported-fields/">``Falco``</a>、<a  href="https://gitlab.com/apparmor/apparmor">``AppArmor``</a>の公式ドキュメントが参照可能になりましたが、
今回の試験には使いませんでした。

また、``kubectlコマンドの入力補完は既に試験環境に設定されています。``
具体的には以下のものがあらかじめ設定されています。
・ ``$ alias k=kubectl``
・ ``$ source <(kubectl completion bash)``
入力補完設定用の1分間を節約できて助かります。

試験結果は、計15問中14問を解いて、82%の得点でクリアしました。
色々ありましたが、かなり実践的な問題を解決できて楽しかったです。

#6. さいごに
これからCertified Kubernetes Security Specialist（CKS）資格を挑戦する予定がある方、
もしくはKubernetesにdeep diveしたい方にお役に立てれば幸いです。
長い文章になりましたが、最後まで読んでいただきありがとうございました。

NEXT - ``AWS Certified Security - Specialtyを挑戦してみます。``