Certified Kubernetes Security Specialist (CKS) 新たな挑戦へ

###記事リンク：
※ CKAD&CKA受験感想は<a href="https://qiita.com/T0P1X/items/5dad2a7ff9307ed663f1">こちら</a>です。
<追記 2020年12/28日合格しましたので、下記感想文を更新しました>
※ CKS受験感想は<a href="https://qiita.com/T0P1X/items/660ac6859e6ca27b4a49">こちら</a>です。                                                                                                                                                                                                                      

---
#1. はじめに
これまで、Kubernetes認定資格は以下の2種類がありました。
・<a  href="https://www.cncf.io/certification/ckad/">Certified Kubernetes Application Developer (CKAD)</a> 
・<a  href="https://www.cncf.io/certification/cka/">Certified Kubernetes Administrator (CKA)</a>
今回、3つ目の資格 <a  href="https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/?utm_source=cncf&utm_medium=blog&utm_campaign=cks0720">Certified Kubernetes Security Specialist (CKS) </a>  が2020年11月から提供します。
※追記 11月17日から購入可能になりました。
それでは、受験可能まで何を準備すれば良いかを議論していきましょう。

私のCKAD & CKA受験記録は以下のリンクよりご覧になれます。
※ <a  href="https://qiita.com/yuan_chenxuan/items/5dad2a7ff9307ed663f1">Certified Kubernetes Application Developer (CKAD) & Certified Kubernetes Administrator (CKA) 受験記録</a>

#2. 試験詳細
<div align="center">
<img width="20%" alt="CKS" src="https://training.linuxfoundation.org/wp-content/uploads/2020/07/kubernetes-security-specialist-logo.png">
</div>

受験条件：<a  href="https://www.cncf.io/certification/cka/">Certified Kubernetes Administrator (CKA) </a>をクリアした方のみ
※ <a  href="https://www.cncf.io/certification/ckad/">Certified Kubernetes Application Developer (CKAD)</a> ではないので、要注意！！！※ 
試験時間：```2時間```
設問数：```15-20問（CKAD-19問/2時間、CKA-24問/3時間 ※2020年9月からCKA-19問/2時間）```
基準点：```67％（CKAD-66％、CKA-74％）```
受験料：```$300```
認定有効期間：```2年間```
対応バージョン：```Kubernetes v1.19以降```
出題範囲：
・```Cluster Setup (10%)```
・```Cluster Hardening  (15%)```
・```System Hardening (15%)```
・```Minimize Microservice Vulerabilities (20%)```
・```Supply Chain Security  (20%)```
・```Monitoring & Logging & Runtime Security  (20%)```

CNCF公式が公開されている資料はこちらです。
- <a  href="https://docs.linuxfoundation.org/tc-docs/certification/lf-candidate-handbook">Candidate Handbook</a>
- <a  href="https://github.com/cncf/curriculum">カリキュラムの概要</a>
- <a  href="https://docs.linuxfoundation.org/tc-docs/certification/tips-cka-and-ckad">Exam Tips</a>
- <a  href="https://docs.linuxfoundation.org/tc-docs/certification/faq-cka-ckad-cks">Frequently Asked Questions</a>
- <a  href="https://docs.linuxfoundation.org/tc-docs/certification/lf-cert-agreement/">Linux Foundation Global Certification and Confidentiality Agreement</a>
- <a  href="https://training.linuxfoundation.org/ja/certification/verify/">認定の確認</a>

---
### Cluster Setup (10%)
クラスターのセットアップに関する内容が出題されます。

1. ネットワークセキュリティポリシーを使用してクラスタレベルのアクセスを制限する
⇒ Network Policy(NP)とは：<a  href="https://kubernetes.io/docs/concepts/services-networking/network-policies/">Network Policy</a>
⇒ NPのテンプレート：<a  href="https://kubernetes.io/docs/concepts/services-networking/network-policies/#networkpolicy-resource">networkpolicy (Template)</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/">Manage TLS Certificates in a Cluster</a>

2. CISベンチマークを使用して、Kubernetesコンポーネントのセキュリティ構成を確認する
⇒ 対応ページ：<a  href="https://discuss.kubernetes.io/t/kubernetes-and-security-benchmarks/6635">Kubernetes and Security Benchmarks</a>
⇒ 対応ページ：<a  href="https://cloud.google.com/kubernetes-engine/docs/concepts/cis-benchmarks">CIS ベンチマーク</a>

3. セキュリティ制御によるIngressオブジェクトを適切に設定する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/services-networking/ingress/">Ingress Object</a>


4. ノードのメタデータとエンドポイントを保護する
⇒ 対応ページ：

5. GUI要素の使用とアクセスを最小化する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/">Web UI</a>
⇒ 対応ページ：<a  href="https://discuss.kubernetes.io/t/my-team-developed-an-open-source-gui-for-kubernetes-port-forwarding/7071">GUI for Kubernetes port forwarding</a>

6. デプロイ前にプラットフォームバイナリを確認する
⇒ 対応ページ：

---

### Cluster Hardening  (15%)
クラスターの堅牢化に関する内容が出題されます。

1. Kubernetes APIへのアクセスを制限する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/reference/access-authn-authz/controlling-access/">Controlling Access to the Kubernetes API</a> 

2. ロールベースアクセスコントロールを使用して、露出を最小限に抑える
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/reference/access-authn-authz/rbac/">Using RBAC Authorization</a>

3. サービスアカウントを使用する際の注意事項を実践する
追記：新しく作成したサービスアカウントについてのデフォルト禁止や権限の最小化など
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/">Configure Service Accounts for Pods</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/">Managing Service Accounts</a>

4. Kubernetesを頻繁に更新する
⇒ 対応ページ：

---

### System Hardening (15%)
システムの堅牢化に関する内容が出題されます。

1. ホストOSのフットプリントを最小化する（攻撃対象を減らす）
⇒ 対応ページ：

2. IAMロールを最小限に抑える
⇒ 対応ページ：<a  href="https://www.youtube.com/watch?v=OPpz_LUC-2k">AWS IAM Role on Kubernetes with kube2iam</a>

3. ネットワークへの外部アクセスを最小限に抑える
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/services-networking/network-policies/">Network Policies</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=HWv8ZKLCawM">Mitigating Kubernetes attacks</a>

4. AppArmor、seccompなどのカーネル強化ツールを適切に使用する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tutorials/clusters/apparmor/">Restrict a Container's Access to Resources with AppArmor</a>
⇒ 対応ページ：<a  href="Restrict a Container's Syscalls with Seccomp">Restrict a Container's Syscalls with Seccomp</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/">Pod Security Policies</a>
⇒ 対応ページ：<a  href="https://en.wikipedia.org/wiki/Seccomp">seccomp</a>

---

### Minimize Microservice Vulerabilities (20%)
マイクロサービスの脆弱性を最小限に抑えるに関する内容が出題されます。

1. PSP、OPA、セキュリティコンテキストなどを使用して、適切なOSレベルのセキュリティドメインをセットアップする
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/policy/pod-security-policy/">Pod Security Policies</a>
⇒ 対応ページ：<a  href="https://www.openpolicyagent.org/docs/latest/policy-language/">Rego Policy Language Reference</a>
⇒ 対応ページ：<a  href="https://play.openpolicyagent.org/">Rego Playground</a>
⇒ 対応ページ：<a  href="https://katacoda.com/austinheiman/scenarios/open-policy-agent-gatekeeper">Gatekeeper tutorial - Katacoda</a>
⇒ 対応ページ：<a  href="https://itnext.io/kubernetes-authorization-via-open-policy-agent-a9455d9d5ceb">Kubernetes Authorization via Open Policy Agent</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/configure-pod-container/security-context/">Configure a Security Context for a Pod or Containe</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=Lca5u_ODS5s">Intro to Open Policy Agent (Kubecon 2019) - Torin Sandall</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=Yup1FUc2Qn0">Intro to Gatekeeper (Kubecon 2019) - Rita Zhang & Max Smythe</a>

2. Kubernetesシークレットを管理する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/configuration/secret/">Secrets</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/inject-data-application/distribute-credentials-secure/">Distribute Credentials Securely Using Secrets</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/">Encrypting Secret Data at Rest</a>

3. マルチテナント環境（gvisor、katacontainersなど）でコンテナランタイムサンドボックスを使用する
⇒ 対応ページ：<a  href="https://kubernetes.io/blog/2016/05/hypernetes-security-and-multi-tenancy-in-kubernetes/">Hypernetes: Bringing Security and Multi-tenancy to Kubernetes</a>
⇒ 対応ページ：<a  href="https://github.com/google/gvisor">Github-google/gvisor</a>
⇒ 対応ページ：<a  href="https://katacontainers.io/"> katacontainers-The speed of containers, the security of VMs</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=kxUZ4lVFuVo">Sandboxing your containers with gVisor (Cloud Next '18)</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=1Ib-rfSzDuM">The Enemy Within: Running Untrusted Code with gVisor</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=WfEA--v5XpA">Kata and gVisor: A Quantitative Comparison</a>

4. mTLSを使用してPod間の暗号化を行う
⇒ 対応ページ：<a  href="https://www.istioworkshop.io/11-security/01-mtls/">Traffic Encryption using mTLS on Istio</a>
⇒ 対応ページ：<a  href="https://learn.hashicorp.com/tutorials/consul/kubernetes-mesh-gateways">Secure Service Mesh Communication Across Kubernetes Clusters</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/">11 Ways (Not) to Get Hacked</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/reference/command-line-tools-reference/kubelet-tls-bootstrapping/">TLS bootstrapping</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/">Manage TLS Certificates in a Cluster</a>

---

### Supply Chain Security  (20%)
サプライチェーンのセキュリティに関する内容が出題されます。

1. ベースイメージのフットプリントを最小化する
⇒ 対応ページ：<a  href="https://blog.logrocket.com/reduce-docker-image-sizes-using-multi-stage-builds/">How to reduce Docker Image sizes</a>

2. サプライチェーンを保護する：許可されたレジストリをホワイトリストに登録し、イメージに署名して検証する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/containers/images/">Images</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/">Using Admission Controllers</a>

3. ユーザーワークロード（Kubernetesリソース、Dockerファイルなど）の静的分析を使用する
⇒ 対応ページ：<a  href="https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/">11 Ways (Not) to Get Hacked</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/security/overview/">Overview of Cloud Native Security</a>
⇒ Tools：<a  href="https://github.com/appvia/krane?utm_sq=ggyni5orp7">Krane</a>

4. 既知の脆弱性に関するイメージをスキャンする
⇒ 対応ページ：<a  href="https://kubernetes.io/blog/2018/07/18/11-ways-not-to-get-hacked/">11 Ways (Not) to Get Hacked</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/security/overview/">Overview of Cloud Native Security</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=XnYxX9uueoQ">Trivy Open Source Scanner for Container Images</a>
⇒ Youtube：<a  href="https://www.youtube.com/watch?v=YDCa51BK2q0">Identifying Common Vulnerabilities and Exposures in Containers with Clair</a>

---

### Monitoring & Logging & Runtime Security  (20%)
モニタリング、ロギング、ランタイムのセキュリティに関する内容が出題されます。

1. ホストおよびコンテナレベルでsyscallプロセスやファイルのアクティビティについて行動分析し、悪意のあるアクティビティを検出する
⇒ 対応ページ：<a  href="https://discuss.kubernetes.io/t/kubernetes-and-security-benchmarks/6635">Using sysctls in a Kubernetes Cluster</a>
⇒ 対応ページ：<a  href="https://jaxlondon.com/wp-content/uploads/2019/11/Security_-_Filtering_System_Calls_in_Docker_and_Kubernetes.pdf">Filtering System Calls in Docker and Kubernetes</a>
⇒ 対応ページ：<a  href="https://speakerdeck.com/kentatada/debug-application-inside-kubernetes-using-linux-kernel-tools">Debug application inside Kubernetes using linux kernel tools</a>
⇒ 対応ページ：<a  href="https://sysdig.com/blog/fascinating-world-linux-system-calls/">The Fascinating World of Linux System Calls</a>

2. 物理インフラ、アプリ、ネットワーク、データ、ユーザー、およびワークロード内の脅威を検出する
⇒ 対応ページ：<a  href="https://sysdig.com/blog/fascinating-world-linux-system-calls/">The Fascinating World of Linux System Calls</a>

3. 発生場所や発生方法を問わず、あらゆるフェーズの攻撃を検出する
⇒ 対応ページ：<a  href="https://sysdig.com/blog/fascinating-world-linux-system-calls/">The Fascinating World of Linux System Calls</a>

4. 詳細な分析調査を行い、環境内に存在する悪役を特定する
⇒ 対応ページ：<a  href="https://sysdig.com/blog/fascinating-world-linux-system-calls/">The Fascinating World of Linux System Calls</a>

5. 実行時のコンテナの不変性を確保する
⇒ 対応ページ：<a  href="https://discuss.kubernetes.io/t/immutable-crd/10068/6">Immutable CRD?</a>


6. 監査ログを使用してアクセスを監視する
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/tasks/debug-application-cluster/audit/">Auditing</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/">kube-apiserver</a>
⇒ 対応ページ：<a  href="https://kubernetes.io/docs/concepts/cluster-administration/">Cluster Administration</a>


#3. 最後に
一緒に頑張りましょう。
意見、アドバイスがある方はぜひ下のコメント欄に記入していただければと思います。