###記事リンク:
※ CKSの紹介はこちらです。
※ CKAD&CKA受験感想はこちらです。
#Certified Kubernetes Security Specialist
#1. はじめに
2020年末にリリースした新しいKubernetes認定資格 Certified Kubernetes Security Specialist を合格しましたので、感想と準備方法を共有したいと思います。
#2. CKSについて
2020年末から CKAD と CKA の2種を加えて、CKAを所持している人しか受けれない
新たな資格 CKS がリリースされました。※ CKS試験は英語のみです。ご注意ください。
###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試験詳細を説明する記事は投稿してあります。以下リンクよりご覧にいただけます。
→ Qiita : Certified Kubernetes Security Specialist (CKS) 新たな挑戦へ
#3. 出題シナリオ
CKS試験は2時間内15問から20問を解決する必要があります。
よって、試験は問題プールから合計100点になるように組み合わせで生成されています。
ちなみに私の場合は計15問で、15問中初見殺し問題は2問でした。
試験問題はいろんなパターンで出題されると思いますが、シナリオは大体同じです。
※ 以下はあくまでも本番試験問題と似ているものです。ご注意ください!
-
CISベンチマークを使用してmaster nodeとworker nodeの脆弱性を確認できる
脆弱性がある場合、項目を推奨設定に修正できる
※ 試験時kube-benchはインストール済み
kube-benchドキュメント:
→ CIS Benchmark For Kubernetes
→ Github : aquasecurity/kube-bench -
role、rolebinding、clusterrole、clusterrolebindingを使いこなせる
rolebinding、clusterrolebindingにserviceaccountを定義できる
role、rolebinding、clusterrole、clusterrolebindingのテンプレート:
→ Kubernetes.io : Using RBAC Authorization -
kube-apiserver.yamlを修正し、セキュリティを強化できる
kube-apiserver.yamlのオプション一覧:
→ Kubernetes.io : kube-apiserver #Options -
audit機能を有効し、設定ファイルに指定項目を追加してログを取れる
試験問題に応じてaudit-logの保存期間、保存数、最小最大容量を設定修正を行える
kube-apiserver.yamlのオプション一覧:
→ Kubernetes.io : kube-apiserver #Options
audit-policy.yamlのテンプレート:
→ Kubernetes.io : Auditing #audit-policy -
kubernetesのバイナリファイルのハッシュタグを確認し、異なるものを削除できる
kubernetes公式リリースノート:
→ Github : kubernetes/releases
sha512sumドキュメント:
→ Man page of SHA512SUM -
Falcoの起動(有効化)および出力フォーマットの修正を行える
Falcoの監視ログを確認し、セキュリティ問題があるコンテナを探せる
※ 試験時Falcoはインストール済み
Falco公式ドキュメント:
→ The Falco Project
falco-ruleの出力変数一覧:
→ Falco : Supported Fields for Conditions and Outputs -
Trivyを使用して、実行中のpodに使用しているimageの脆弱性をスキャンできる
またはTrivyを使用して、ローカルにあるimageを実行せずに脆弱性をスキャンできる
※ 試験時Trivyはインストール済み
Trivy公式ドキュメント:
→ Gitub : aquasecurity/trivy
imageをスキャンする方法:
→ Gitub : Trivy image scan -
AppArmorを有効化してAppArmorを使用したcontainerを起動できる
AppArmor公式ドキュメント:
→ GitLab : apparmor
AppArmorをcontainerに設定する方法:
→ Kubernetes.io : Restrict a Container's Access to Resources with AppArmor -
Admission controllersの状態を確認し、必要に応じてオプションの有効・無効を行える
Admission controllersオプション一覧:
→ Kubernetes.io : Using Admission Controllers -
gvisor用のRuntimeclassを作成し、gvisorを使用するコンテナを起動できる
その後、起動したコンテナのdmesgを出力できる
※ 試験時gvisorは設定済み
RuntimeClassのテンプレート:
※ テンプレートのapiVersionを要注意! apiVersion: node.k8s.io/v1beta1 が正しい
→ Kubernetes.io : Create the corresponding RuntimeClass resources
RuntimeClassを使用したpodのテンプレート:
→ Kubernetes.io : RuntimeClass Usage
dmesgについて:
→ 【dmesg】コマンド――カーネルが出力したメッセージを表示する -
tls用secretを作成し、Ingressに作成したsecretを使用してmtlsを設定できる
tls用ingressのテンプレート:
→ Kubernetes.io : ingress #tls
tls用secretのテンプレート:
→ Kubernetes.io : secret #tls-secrets
※ $ kubectl create secret tls --key --crt を使ったほうが楽 -
EncryptionConfigurationを有効化し、secretを暗号化できる
またはetcdctlを使用してsecretをhackingできる
EncryptionConfigurationのテンプレート:
→ Kubernetes.io : Understanding the encryption at rest configuration
etcdのsecret情報格納先に関する内容:
→ Kubernetes.io : Operating etcd clusters for Kubernetes -
Pod Security Policyを有効化し、Pod Security Policyを使用したpodを起動できる
Pod Security Policyのプラグ一覧:
→ Kubernetes.io : What is a Pod Security Policy?
Pod Security Policyのテンプレート:
→ Kubernetes.io : Create a policy and a pod
Pod Security Policyのvolumes設定:
→ Kubernetes.io : Volumes and file systems -
Secretの仕組みを理解し、podなどからsecretを取り出せる
Secretについて:
→ Kubernetes.io : Secrets
Secretをvolumeとして使用するバターン:
→ Kubernetes.io : Using Secrets as files from a Pod
Secretをenvとして使用するバターン:
→ Kubernetes.io : Using Secrets as environment variables -
OPAの仕組みを理解し、ConstraintTemplateを利用してImagePolicyWebhookを使える
ConstraintTemplateのテンプレート:
→ Kubernetes.io : OPA Gatekeeper #Policies and Constraints
Admission ControllersにImagePolicyWebhookを追加:
→ Kubernetes.io : Using Admission Controllers
上記シナリオを参考に、2時間以内を基準にやってみてください。
後述する対策用コンテンツについている模擬試験にも似ている問題が出ます。
#4. CKS試験までにやったこと
※ 準備期間 2020/12/2 から 2020/12/27 の約1か月
① 対策用コンテンツを用いて学習
② 参考書で不足知識を補完
③ 1個目の模擬試験を使ってチェック(得点70%)
④ 間違った問題を何回もやり直す
⑤ Kubernetes.ioとSysdig社のKubernetes Security Guide Best Practicesを読む
⑥ 試験前日に2個目の模擬試験を使って再度チェック(得点97%)
⑦ 充分な睡眠を取る ← 結構大事
対策用コンテンツ
まず、こちらの Udemy の対策用コンテンツです。
▶︎ Udemy : Kubernetes CKS 2021 Complete Course + Simulator
クーポンコード: CKS-KILLER-SHELL
← 無効になりました
クーポンコード: YES-YES-CKS
この対策用コンテンツには本番試験の雰囲気を味わうことができる模擬試験がついています。
同じく2時間で本番試験の問題数は15~20問、こちらの模擬試験は25問です。
また、本番試験より難易度が高いので、かなりチャレンジになるでしょう。
模擬試験の採点システムの精度は割と高かったです。
対策用コンテンツはCKA知識復習を含め、広範囲のセキュリティ対策も紹介してくれました。
また、模擬試験をちゃんと活用できて個人的には大満足でした。
※ 短期決戦でCKSを取りたい方にはおすすめです。
▲ Udemy : Kubernetes CKS 2021 Complete Course + Simulator
クーポンコード: CKS-KILLER-SHELL
← 無効になりました
クーポンコード: YES-YES-CKS
▶︎ 上記対策用コンテンツの作者である Kim Wuestkamp のブログはこちらです。
Kim Wuestkamp 氏は毎週CKS資格試験向けにチャレンジ問題を投稿しています。
余力がある方はぜひ挑戦してみてください。
▼ 以下は2021/1/11まで Kim Wuestkamp の投稿です。
・ CKS Exam Series #1 Create Cluster & Security Best Practices
・ CKS Exam Series #2 Pods, Secrets and ServiceAccounts
・ CKS Exam Series #3 Immutable Pods
・ CKS Exam Series #4 Crash that Apiserver
・ CKS Exam Series #5 ImagePolicyWebhook
2021/1/8 追記:
Linux Foundationは2021年1月8日に以下の学習コンテンツをリリースしました。
▶︎ Kubernetes Security Essentials(LFS260)
去年のCyber Mondayセールの時、CKSの受験料と上記コンテンツのセットは安かったので、
購入しました。
リリースする前にCKSをクリアしましたが、使わないともったいないと思って受けました。
コンテンツの内容が充実でかなりよかったですが、シミュレーターがついていないので、
これだけでCKSをクリアするのは難しいと思います。
要するに実戦的な練習(ハンズオン)をたくさん積みましょう!
▲ Kubernetes Security Essentials(LFS260)
参考書
① 「Docker/Kubernetes開発・運用のためのセキュリティ実践ガイド」
こちらの本はいろんな視点からみたDocker、Kubernetesのセキュリティ問題、
注目すべきなポイント、要点などを詳しくまとめたものです。
個人的にはさらっと読める書籍だと思いますが、基礎がないと意外と難しいかもしれません。
▲ Docker/Kubernetes開発・運用のためのセキュリティ実践ガイド [須田 瑛大]
② 「Kubernetes完全ガイド 第2版」
もともとKubernetes完全ガイド第1版は持っていましたが、
青山氏が第2版をリリースしたので新しいものを購入しました。
ゆっくりで読める時間は中々なかったので、ずーと本棚に飾っていました。
CKS準備するタイミングで第1版との差分をじっくり読みました。
図と文章に合わせた説明は相変わらず上手かったです。
▲ Kubernetes完全ガイド 第2版 [青山 真也]
###準備用環境
GCPのGKEかAWSのEKSなどのマネジメントサービスがついている環境はおすすめしません。
GCPのGCEかAWSのEC2などのインスタンスにkubeadmを使用して、
ゼロから準備用環境を用意したほうが受験に役たちます。(私はGCEを使いました)
準備用環境は結構ぶっ壊れやすいですので、各インスタンスのイメージを取りましょう。
▼ kubeadmでkubernetesクラスタを構築手順
・ Kubernetes.io : Installing kubeadm
・ Kubernetes.io : Creating a cluster with kubeadm
#5. 受験感想
CKADとCKA試験を受けた時と同じ、予約した試験開始時刻より15分前に待機していました。
10分前から試験開始ボタンが表示されるはずですが、今回は開始時刻になるまで、
ボタンが表示されなかったです。
試験はちゃんと予約しましたよね?、システムが落ちた?とか、試験前から焦りました。
試験の画面UIは2020年の夏から更新されました
が、
個人的には前の画面UIが使いやすかった気がします。
CKADとCKAの時、notepad に各問題の点数と解答具合をメモしましたが、
今回、画面UIが変わった関係で notepad はどこから起動すればよいかがわかりません。
なので、メモー帳なしの状態でなんとか頑張りました。
試験中3回ぐらいネットワークが切断され、絶好調の状態から一気に冷えました。
リストアは毎回3~5分ほどかかります。※ 試験時間は延長してくれます。
ネットワークが切断された時、頭を冷やせるサービスタイムはありがたいですね!(笑)
Trivy
、Sysdig
、Falco
、AppArmor
の公式ドキュメントが参照可能になりましたが、
今回の試験には使いませんでした。
また、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を挑戦してみます。