CKS (Kubernetesセキュリティスペシャリスト): 前提条件と6週間の学習計画
CKSはCKAよりも難易度が高く、範囲が狭く、受験登録にはアクティブなCKAが必要です。ここでは、燃え尽きずに学習するための方法を紹介します。
CKS — Certified Kubernetes Security Specialist — は、私の意見では、3つのプロフェッショナル向けKubernetes試験の中で最も難しく、CKAよりも範囲が狭く、時間的プレッシャーの下ではより厳しいものです。試験時間は2時間、実技形式、費用は445ドルで、無料の再受験が付属しています。PSI Bridgeによるオンラインのみで、テストセンターはありません。合格点は67%です。CNCFは公式の合格率を発表していませんが、コミュニティで調査された初回受験の合格率は40〜50%前後で、CKAよりも低く、同僚が受験するのを見てきた私の経験とも一致します。
ほとんどの人が見落としていること:すぐに申し込めるわけではありません。CNCFは、登録時にあなたのアカウントにアクティブなCKAがあることを要求します。単に「過去にCKAを受験したことがある」ではダメです。アクティブである必要があります。CKAが失効している場合(2024年4月1日のポリシー変更により、3年から2年に短縮されました)、CKSに登録する前にCKAを更新する必要があります。これは推奨事項ではなく厳格な要件であり、四半期ごとに人々を驚かせています。
真の前提条件
公式の前提条件:アクティブなCKA。これだけです。
非公式の前提条件:
kubectlの扱いに慣れており、構文について考える必要がないこと。「kubectl create deployment」をまだGoogleで検索しているようでは、準備不足です。- Linuxの基本 — ノードにSSHで接続し、systemdジャーナルを読み、kubeletフラグを編集し、seccomp / AppArmorプロファイルの失敗をデバッグすることになります。
journalctl -u kubeletに見覚えがない場合は、まずそれを修正してください。 vimの熟練度。Vimの達人である必要はありません。しかし、2時間の試験時間内で「え、どうやって保存するんだっけ」に30秒も費やすことなく、vimでYAMLを編集できることは必須です。- NetworkPolicyの動作モデルを理解していること。これは試験で最も大きな障害となります。これについては後述します。
- Falco、Trivy、AppArmor、seccomp、サービスメッシュを介したmTLS、Pod Security Standardsに事前に触れていること。これらすべての専門家である必要はありません。それらを認識できる必要があります。
上記の項目のうち2つ以上が不足している場合は、CKSに取り組む前に、CKAスタイルの運用演習にもう1ヶ月費やしてください。Kubernetesの運用とセキュリティを同時に、時間的プレッシャーの下で学ぼうとすると、無料の再受験を無駄にする道を進むことになります。
実際にテストされる内容
CNCFのカリキュラムでは、以下のように分類されています(各カリキュラム改訂ごとに割合は変動します。2026年初頭時点のものです):
- クラスターのセットアップと強化 (~15%): CISベンチマーク、kube-bench、外部アクセスの制限、匿名認証の無効化、kubeletの強化フラグ。
- システム強化 (~15%): カーネル強化 (seccomp, AppArmor)、攻撃対象領域の削減、クラウド側でのIAM最小化。
- マイクロサービスの脆弱性の最小化 (~20%): Pod Security Standards (1.25でPSPsに代わるもの)、ServiceAccountトークン、OPA / GatekeeperまたはKyverno、mTLS。
- サプライチェーンセキュリティ (~20%): Trivyによるイメージのスキャン、cosignによる署名、未署名イメージをブロックするアドミッションコントローラー、SBOMの基礎、ベースイメージの最小化。
- 監視、ロギング、ランタイムセキュリティ (~20%): Falcoルール、行動分析、不変性、APIサーバーレベルでの監査ロギング。
- ネットワークポリシー (~10%): default-deny、名前空間分離、エグレスルール。割合は小さいですが、実際には他のすべてのカテゴリもNetworkPolicyに触れています。
試験では、Falcoが内部でどのように動作するかはテストされません。コンテナ内でシェルが起動したときに発動するFalcoルールを作成できるかどうかがテストされます。試験ではcosignの暗号化はテストされません。署名されていないイメージを拒否するアドミッションコントローラーを構成できるかどうかがテストされます。これは学術的な作業ではなく、運用的な作業です。
6週間の学習計画
この計画は、すでにアクティブなCKAを保持しており、週に約10時間学習できることを前提としています。時間が多い、または少ない場合は調整してください。
Week 1: 血を流すまでNetworkPolicy
ローカルにCalicoまたはCiliumを使用してkindクラスターをセットアップします(デフォルトのkindnetはNetworkPolicyを適用しないため、これが人々を混乱させます)。名前空間のdefault-denyポリシーを作成します。名前空間からの許可ポリシーを作成します。DNSのみを許可するエグレスポリシーを作成します。特定のPodラベルからのトラフィックを名前空間をまたいで許可するポリシーを作成します。これらのすべてを記憶から何度も再現し、kubernetes.ioを参照せずにvimで書けるようになるまで繰り返します。NetworkPolicyのYAMLは、試験で最も出題量が多く、ほとんどの人が失敗する分野です。必要だと思う以上の時間をここに費やしてください。
Week 2: Pod Security Standards、ServiceAccount、RBACの強化
名前空間にrestricted、baseline、privilegedプロファイルを適用します。ServiceAccountをautomountServiceAccountToken: falseで構成します。自身の名前空間のConfigMapを読み取る必要があり、それ以外のことは必要としないデプロイメントに対して、最小権限の原則に従うRBACを構築します。「このPodはRBACのためにXを実行できない」という問題を診断する練習を、kubectl auth can-iの流れが自動的にできるようになるまで行います。
Week 3: サプライチェーン — Trivy、cosign、アドミッションコントロール
Trivyでイメージをスキャンし、CVEの出力を解釈します。cosignでイメージに署名します。あなたのキーで署名されていないイメージを拒否するImagePolicyWebhookまたはKyvernoポリシーを構成します。完全に練習したい場合は、ローカルでOCIレジストリをセットアップします。試験ではTrivyがインストールされている可能性が高いので、主要なフラグ(--severity HIGH,CRITICAL、--ignore-unfixed)を記憶しておくべきです。
Week 4: ランタイム — Falco、AppArmor、seccomp
kindクラスターにFalcoをインストールします。デフォルトルールを読みます。カスタムルールを作成します。PodにAppArmorプロファイルを適用します(試験では通常、ノードにすでにプロファイルが用意されており、アノテーションを介してそれを設定するように求められます。これは、container.apparmor.security.beta.kubernetes.io/<container>: localhost/<profile>という構文を知っていることを意味します)。securityContext.seccompProfileを介してseccompプロファイルを適用します。これらはいずれもアノテーションベースのレガシー構文とフィールドベースの現在の構文がありますが、試験では現在の構文がテストされる傾向にありますが、両方を認識しておくべきです。
Week 5: クラスターとホストの強化
kube-benchを実行し、失敗を解釈し、簡単なもの(匿名認証、監査ロギング、kubeletフラグ)を修正します。APIサーバーで監査ポリシーを構成します。etcdへのアクセスを制限します。不要なkubeletポートを無効にします。これは主にノードレベルのLinux作業であり、強力なシステム管理者経験がないエンジニアはここで時間がかかります。
Week 6: Killer Shell、フルシミュレーション、そして休息
この週に、付属のKiller Shellセッションを両方とも使用してください。これらは意図的に実際の試験よりも難しく作られています。期待するよりも低いスコアになることを想定してください。残りの時間で学習します。週の終わりの2~3日で実際の試験を受験し、筋肉の記憶が新鮮なうちに臨んでください。それ以上延期しないでください。毎週遅れるごとに、反射神経が鈍ります。
前夜はしっかり睡眠を取りましょう。徹夜で勉強するのはやめましょう。試験当日にkubectlエイリアスを変更しないでください。
人々を苦しめる落とし穴
時間的プレッシャー下でのNetworkPolicy。 すでに述べましたが、二度言う価値があります。YAMLの構造は容赦なく、間違ったインデントはポリシーをサイレントに停止させ、Podは依然としてルーティングを行います。vimで、default-deny + 選択的許可を筋肉の記憶から書けるようになるまで練習してください。
NetworkPolicyにはそれを強制するCNIが必要であることを忘れる。 kindnetは強制しません。flannel(一部のセットアップでデフォルト)も強制しません。Calico、Cilium、Weaveは強制します。練習用クラスターが強制するCNIを実行していることを確認しないと、間違った教訓を学ぶことになります。
PSPとPod Security Standardsを混同する。 PSPは1.25で削除されました(もう何年も前のことですが、古いトレーニング資料にはまだ参照されています)。現在のメカニズムは、名前空間ラベルを介して適用されるrestricted、baseline、privilegedプロファイルを使用するPod Security Admissionです。PSPsを勉強しないでください。
etcdの保存時の暗号化設定。 よくテストされます。具体的には、EncryptionConfigurationの編集、適切なフラグを使用してAPIサーバーの再起動、そしてetcdctl getで値が暗号化されていることの確認です。これを練習してください。
ブラウザタブの罠。 kubernetes.io、falco.org、app-armor.net、その他いくつかのサイトが許可されています。時間的プレッシャーの下でそれらを検索することに頼ることはできません。構造を記憶してください。タブは特定のコードスニペットをコピー&ペーストするために使い、構文を学ぶために使うのではありません。
受験すべきか?
あなたの仕事がプラットフォームセキュリティ、Kubernetesショップでのセキュリティエンジニアリング、または規制産業でのコンプライアンス業務であるか、そうなる予定がある場合は、CKSを受験してください。もしあなたがゼネラリストのプラットフォームエンジニアであれば、スキップしてください。CKAはほとんどのゼネラリストの役割に必要なものをカバーしており、CKSは2年で期限切れになる過剰な資格です。
受験を目指すなら、CertLabProのCKS問題集を閲覧するか、制限時間付き試験を開始してください。問題集の概念的なカバー範囲は、実際のクラスターで行う運用演習を補完します。両方が必要であり、どちらか一方だけでは不十分です。