hitsumabushi845の日記

心理的安全性の保たれた空間に書く適当なメモ

KodeKloud『Kubernetes Certified Security Specialist (CKS)』記録 - Cluster Setup & Hardening

引き続き、KodeKloud『Kubernetes Certified Security Specialist(CKS)』を進めていく。
今回は Cluster Setup & Hardening のセクション。

Cluster Setup & Hardening

Udemy の CKA コースにおける Security のセクションと重複する内容が全体の半分程度を占めていたので、この記事では CKS のコースで新規に登場した項目のみ記載する。
実際には重複した内容も復習のためあらためて受講した。

What are CIS Benchmarks

www.cisecurity.org

セキュリティを担保するための取り組みは多岐にわたる。サーバのセキュリティであればユーザの権限管理やファイアウォールの設定、ロギングによる記録、OS patchの適用など... それらのベンチマークの一つが CIS benchmark。CIS は Center for Internet Security の略。 CIS は様々なプラットフォームに対するベンチマークを提供しており、Kubernetes 向けのベンチマークも含まれる。

CIS は CIS-CAT というツールも提供しており、CIS Benchmarks のアセスメントを行える。

Lab: Run CIS Benchmarks Assessment Tool on Ubuntu

CIS-CAT ツールを Ubuntu マシン上で実際に動かしてみるハンズオン。 レポートを見ながら Fail した項目を修正するところまで試せる。

CIS benchmark for Kubernetes

Kubernetes における CIS benchmark について。
benchmark には、さまざまなコンポーネントについてどのような設定をすべきか記載されており、具体的な手順まで記載がある。

CIS-CAT Lite では Kubernetes のサポートはなく、Pro の利用が必要。

Kube-bench

github.com

Kube-bench は、Aqua security が提供する OSS ツール。
CIS benchmark で要求されている内容を満たしているかチェックできるツールとなっており、Kubernetes 上で Pod (Job) として実行できる。
そのほか、Docker container やバイナリ形式での実行もサポートされている。

Lab: Kube-bench

Kube-bench のバイナリをダウンロード、実行し、結果を見ながら Fail した項目を修正するハンズオン。
Kube-bench の出力の見方がわかるようになる。

Article on Setting up Basic Authentication

パスワードファイル/トークンファイルでの認証を構成する具体的な方法について。

Kubelet Security

kubernetes.io

kubelet のセキュリティについて。
kubelet も API を提供しており、デフォルトだと特に認証を必要とせず API を叩けてしまう。そこで、認可されていないユーザからのリクエストを拒否したり、証明書による認証をかけたりする方法について学ぶ。

また、kubelet は readOnlyPort を提供しており、ここもまた認証を必要とせずノードの情報を得られてしまうので、readOnlyPort を無効化する方法についても学ぶ。

Lab: Kubelet Security

実際に認証なしに kubelet の API を叩けてしまうことなどを確認し、KubeletConfiguration を修正してこれらの API の実行を不可能にするハンズオン。
KubeletConfiguration ファイルの場所を探すところから始まるので、段階を追って kubelet の堅牢化について学ぶことができる。

Kubectl Proxy & Port Forward

kubectl proxykubectl port-forward について。後続の講座のための前振り。 kubectl proxy は kube-apiserver に対するプロキシをローカルに立てる。プロキシに対して curlAPI を叩くときは認証情報がいらなくなる(proxy が kubeconfig をよしなにやってくれるっぽい) kubectl port-forwardクラスタ内の Pod や Service のポートをローカルのポートにマッピングする。

Lab: Kubectl Proxy & Port Forward

kubectl proxykubectl port-forward を使ってみるハンズオン。クラスタ内のリソースやクラスタAPIに対して localhost でアクセスできることを確認する。

Kubernetes Dashboard

kubernetes.io

Kubernetes Dashboard について。 GUIクラスタのリソースを管理できるダッシュボード画面だが、本当になんでもできてしまうのでアクセス制御は慎重に行わなければならない。

デフォルトでは ClusterIP で公開されており、クラスタ外からアクセスするには kubectl proxy でプロキシすることが推奨される。これによりクラスタへの認証情報がない場合はダッシュボードにアクセスできない。 また、ダッシュボードへのログインを ServiceAccount の Bearer Token や kubeConfig ファイルで行う形にすることもできる。

Lab: Securing Kubernetes Dashboard

Kubernetes Dashboard のデプロイ、kubectl proxy によるアクセスの確認、ServiceAccount, Role, RoleBinding の作成による認可の制御を確認するハンズオン。

Verify platform binaries before deploying

Kubernetes クラスタコンポーネントのバイナリをダウンロードしたらチェックサムを確認しようねという話。 悪意の第三者がダウンロードされるファイル悪意のあるプログラムが実行されるバイナリにすり替えることがあるので。

チェックサムshasum とか sha512sum コマンドで確認できる。

Lab: Verify platform binaries

GitHub からバイナリをダウンロードしてきて、チェックサムを確認するハンズオン。 複数の(ダウンロード済みの)ファイルから正しいファイルはどれ?みたいな設問もあってわかりやすい。

Docker Service Configuration

Docker デーモンの設定について。

/var/run/docker.sock に Docker の UNIX ソケットがあり、Docker CLI はこことやり取りしている。 デフォルトではシステムの外部からソケットにアクセスすることはできないため、Docker ホストとクライアントは同じである必要がある。
Docker デーモン起動時に、--host=tcp://{IP Address}:{Port} を指定することで、指定のポートで受け付けることができる。(例: --host=tcp://192.168.1.10:2375
これにより、Docker ホスト外からのアクセスができるようになる。ホスト外から Docker CLI で指定のホストにアクセスするには、DOCKER_HOST 環境変数を指定する。(例: export DOCKER_HOST="tcp://192.168.1.10:2375"
しかし、もしホストがインターネットに公開されている場合は、誰もがアクセスできてしまうため、このオプションはデフォルトで無効化されている。公開する場合はネットワークのセキュリティを考慮する必要がある。

もし Docker ホストを公開する場合は、通信の TLS 暗号化を行う。通信の TLS 暗号化は、--tls, --tlscert, --tlskey オプションで設定する。
(例: --tls=true --tlscert=/var/docker/server.pem --tlskey=/var/docker/serverkey.pem

これらのオプションは設定ファイルに記述することもでき、/etc/docker/daemon.json ファイルに記述する。

{
  "debug": true,
  "hosts": ["tcp://192.168.1.10:2376"],
  "tls": true,
  "tlscert": "/var/docker/server.pem",
  "tlskey": "/var/docker/serverkey.pem"
}

Docker - Securing the Daemon

Docker デーモン、Docker ホストの保護について。

  1. サーバ自体のセキュア化
    • パスワード認証を無効化し SSH 鍵認証を有効化する、ユーザを切る、不要なポートは閉じるなど
  2. 通信の TLS 暗号化(上述)
  3. Docker デーモンに証明書による認証を入れる
    • daemon.json"tlsverify": true, "tlscacert": /path/to/cacert.pem を追加
    • クライアント側でも DOCKER_TLS_VERIFY=true 環境変数を設定しておき、~/.docker にクライアント証明書を配置しておく。

Cluster Setup & Hardening のセクションはここまで。 多層防御の考え方のもと、マシン、OS、Docker デーモン、Kubernetes コンポーネントなどなど様々な対象のセキュリティについて確認した。一通りさらったという印象なので、まだ整理がつかない部分もあるがひとまず先に進む。

実はこのセクションが一番ボリュームのあるセクションだったので、以降はもう少しスムーズに進められるといい。

CKS Exam Curriculum v1.23 と KodeKloud『Kubernetes Certified Security Specialist (CKS)』の対応

kodekloud.com

CKA のときと同様に、KodeKloud の講座と 2022年2月現在利用されているカリキュラム、v1.23 との対応表を作成する。
参照したカリキュラムは以下。

github.com

講座を受けていく中で追加/変更が必要になった場合は適宜修正する。

10% - Cluster Setup

15% - Cluster Hardening

15% - System Hardening

20% - Minimize Microservice Vulnerabilities

20% - Supply Chain Security

20% - Monitoring, Logging and Runtime Security

だいたいこんなところか。CKS 自体最近提供された試験であるため出題範囲に大幅な変更が行われていないこと、KodeKloud の講座も最近提供されたものであることから、講座がカリキュラムにわりと忠実に沿った内容であることが確認できた。進めていきましょう。

KodeKloud『Kubernetes Certified Security Specialist (CKS)』記録 - Introduction/Understanding the Kubernetes Attack Surface

Certified Kubernetes Security Specialist(CKS) の取得を目指して勉強していく。
CKA/CKAD の際にもお世話になった KodeKloud 上で CKS のコースが提供されているので、こちらをベースに勉強を進める。

kodekloud.com

ちなみに、KodeKloud はサブスクリプション型のサービスで、月額(または年額一括払い)で提供されている全てのコースを利用できる。
当然年額一括払いの方が月単価は下がるが、長くても数ヶ月で利用を終了しそうなので月額払いを選択した。

まずは Introduction ~ Understanding the Kubernetes Attack Surface を完了したので、記録。

Introduction

このコースと CKS 試験について、概要を説明するセクション。

Course Introduction

コース全体の説明。CKA/CKAD と同様にハンズオン形式のコースとなる。
コースはカリキュラムに従って以下の内容で提供される。

  • Understanding Kubernetes Attack Surface
  • Cluster Setup & Hardening
  • System Hardening
  • Minimizing Microservices Vulnerabilities
  • Supply Chain Security
  • Monitoring, Logging & Runtime Security
  • Mock Exams

ちなみに試験のカリキュラムは以下。

github.com

Exam Information

CKS試験の概要について。

Certification Details

試験関連のリンク集。

Understanding the Kubernetes Attack Surface

The Attack

投票アプリケーションへの不正な介入のデモを通して「セキュリティ対策をなにもしていない K8s クラスタがあったとき、どのようなことができてしまうか」について見ることができる。
当初攻撃者はアプリケーションとそのドメインしか情報がない状況であるが、そこからいかにして侵入していくか見ることができおもしろい。

The 4C's of Cloud Native security

kubernetes.io

クラウドネイティブセキュリティにおける多層防御の考え方について。
4C とは以下の4つを指す。

  • Cloud
    • インフラのセキュリティ。
    • クラウドプロバイダーのセキュリティやファイアウォールなど。etcd へのアクセスや暗号化もここに含まれる。
  • Cluster
  • Container
    • 実行されるコンテナのセキュリティ。
    • コンテナの脆弱性スキャンや特権ユーザを拒否するなど。
  • Code
    • 実行されるアプリケーションコードのセキュリティ。
    • 通信をTLSで暗号化することや、ライブラリの脆弱性など。
    • 基本的にこのコースでは扱う対象ではないが、Secret や mTLS による Pod 間通信の保護といったトピックは提供される。

感想

やはり CKA の取得を前提とする認定資格なだけあって、CKA/CKAD に比べてより実践的な内容と感じた。
今回取り組んだセクションはまだ概要といった内容ではあったが、"The Attack" の節で示された攻撃の例を見るとセキュリティの重要性について腑に落ちて理解できる。

次回以降、具体的な対応方法についてハンズオンを含めて扱うようなので、楽しみ。

2022年の目標

2022年、あけましておめでとうございます。新年一発目のブログは今年も2022年の目標を書いていきます。
昨年の目標とその結果については以下の通り。

hitsumabushi845.hatenablog.com

hitsumabushi845.hatenablog.com

では、スタート!

おしごと関連の目標

ここからはおしごと関連の目標を書いていく。

(継続)資格を取る

今年は以下の資格取得を目標とします。上から順に優先順位が高い。

  • Certified Kubernetes Security Specialist
    昨年 CKA/CKAD を取得し、受検資格を得たので。これは3月までには取っておきたい。
  • Google Cloud 認定 Associate Cloud Engineer
    昨年1年間、GCP を触っていたのでとりあえず Associate くらいは取ろうかなーと思っている。Udemy で問題集を購入済み(積んでいる)なので、さほどコストはかからないと思うが果たして。
  • AWS Certified Developer Associate
    昨年 SAA を取得したので、引き続き DVA が取れるといいなぁと思っている。
  • Certified OCI Architect Associate
    昨年 OCI を触っていたのと、3月末まで受検料無料キャンペーンをやっているので。正直これは気が向いたら取るくらいの感じ。

(継続)Go をちゃんとやる

昨年雰囲気程度に書けるようになった Go だが、雰囲気で進めすぎてよくわかっていないままなので、以下の本をベースに勉強していきたい。

www.oreilly.co.jp

趣味関連の目標

ここからはおしごとの関連しない個人的な目標を書いていく。

(新規)JGC 修行をする

昨年はかなり国内線の飛行機に乗った1年だった。おかげさまで JAL 関連の事柄に興味が出たので、JGC(JAL Global Club)入会資格を得るための修行をやろうとおもう。
2022年も引き続き海外には行けない気配があるので、国内を軽率に飛び回るのも最後のチャンスだと思っているし、20代限定の CLUB EST で JAL カードを作れるのもあとわずかなので。

というわけで昨年末に JAL カードを作り、準備万端。JMB ステータスはそこまで興味ないので、春夏あたりで HND-OKA 大量往復をやるつもりでいる。

(新規)英会話をちゃんとやる

英語の読み書きは学生時代の勉強や研究と会社での業務、リスニングは元々好きな洋楽や洋画を見聞きし続けていることである程度伸ばすことができている。一方でスピーキングについては機会がそこまでないので伸び悩んでいる。
先日英語で面談をする機会があり、なんとかコミュニケーションを取ることはできたものの、もう少しスムーズに口から英語を出せるようになっておきたい。

というわけで、今年中には何らかのオンライン英会話サービスに登録すると思います。Cambly とか。

おわりに

ほかにもスノーボードがもっと上手くなりたいとか、ギターがもっと上手くなりたいとか、具体的な到達点が思いつかないものもあるが、とりあえず今年はこの辺を目標に生きていこうと思います。

...その前に目の前のタスクとしてはじめての確定申告を控えているので、これを倒さないと先に進めないなあ。
今年も1年よろしくお願いします。

2021年の目標をふりかえる

2021年も1年お疲れ様でした。

hitsumabushi845.hatenablog.com

で掲げた目標について、結果を確認していきましょう。

資格をとる

今年受検したいと思っているものは以下の通り。
- CKA or CKAD
- TOEIC

今年は以下の認定資格を取得した。

今年はあまり英語を使う機会がなかったので、TOEIC の受検はとりやめた。 その代わり、業務で AWS を触る機会があったので、SAA を取得した。

おおむね目標通り。考えてみれば IT 系の資格は今年のこれらがはじめての取得。Credly にバッヂが増えていくのは気分がいいので、来年もコンスタントに資格を取っていきたい。

こまめにブログを書く

このブログでは特定の技術に関する話題以外の、技術以外の話やポエムなどを書いていきたいと思っている。
特定の技術要素については、せっかく Organization に属しているので Qiita に書くつもりでいる。 こまめにと言っても、せいぜい月2程度のペースでゆるくやっていきたい。

今年、Qiita には 16 件の記事を投稿した。 このブログには主に CKAD/CKA の学習ログを投稿しており、合算すると月2のペースはクリアできたと思う。

来年もこれくらいのペースで投稿できるとよい。

Terraform を勉強する

2021年から本業・副業ともに Terraform を扱うようなので、ゆるく勉強する。
仕事で使うのでまあ勉強できるだろうと高をくくっている。 特に到達目標はないが、仕事が回る程度に扱えればよいと思う。

中盤でのふりかえりでも述べたが、業務で扱う中でなんとなく雰囲気は掴めた気がする。
ちなみに Terraform を使った業務では GCP と OCI を主に扱っている。OCI は Resource Manager という IaC のサービスがあって、Terraform HCL をそのまま使えるので便利。

golang を勉強する

そろそろ新しい言語を勉強したい。
golang は、複数のプラットフォームに向けてコンパイルできるということで、かねてより興味は持っていたが、
Kubernetes に触れるようになったことでより勉強するモチベーションが上がっている。 とりあえず、Gopher 道場 を進めていこう。

最近は k8s のカスタムコントローラや Admission Webhook を実装しており、そのため Go に入門した感じがある。 しかし完全に雰囲気で進めてしまっているので、来年はもう少し体系的に勉強していきたい。

読みたいと思っている書籍はこれ。

www.oreilly.co.jp

おわりに & 来年へ向けて

今年掲げた目標はおおむね目標通りに推移したように思う。

今年初頭の自分をふりかえってみると、k8s マッタクワカランだったところから今は CKA/CKAD も取得して、CR や Admission Webhook もなんとなく実装できるようになった。
AWS/GCP/OCI についてもそれぞれ雰囲気程度には扱えるようになり、昨年までのオンプレおじさんから一転クラウドおじさんになった気がする。

というわけで、来年も引き続き勉強を続けていきたい。来年はもう少し本を読むようにしたいなぁ。 2022年の目標はまたお正月に書きましょう。

今年買ってよかったもの2021

今年も買ってよかったものをつらつら書いていきます。

おしごと関係

MacBook Pro 16 inch

www.apple.com

MacBook Pro をようやく買い換えました。
今まで使っていたやつは 5 年前に買った Late 2016 モデルで、あの悪名高い TouchBar が初めて搭載されたモデルです。今回ついに TouchBar が完全に廃止と相成りました。
TouchBar が廃止になったから買い換えたわけではなく、5年使ってもういい加減限界を迎えてきたので。Terraform が正常に動かないとか、カメラが急に死ぬとか、バッテリーが一瞬でなくなるとか、いろいろ問題を抱えてたわけです。

カスタマイズ内容としては RAM を 32 GB にして、ストレージを 1 TB にしました。それに Apple Care をつけるだけであっさり 40 万円になってしまうのはどういうことなんですかね。

前評判通り Apple Silicon はバッテリーの持ちが良く、ちょっと出かける程度であれば電源ケーブルを持ち歩かなくてよくなった。また発熱も少なく、バッテリー電源でゴリゴリ作業してても熱くならないのは良い。

めがね

今年はめがね沼につま先程度突っ込んだ年でした。
きっかけは春先にふらっと鯖江に行ったことで、そこの田中眼鏡 というお店でのめがね購入体験がよかった。

ここはいわゆるよくあるめがね屋さんと違って、店頭にはフレームがそこまで並んでいません。
ではどうやってめがねを選ぶのかというと、ハリーポッターのオリバンダーの店よろしく店主がフレームを見繕ってくれるのであった。お店の方に欲しいめがねの方向性を伝えると棚からどんどんフレームを出してくれます。

そこで買っためがねは下の2本。このときはせっかく鯖江に来たのでということで、珍しめのフレームが欲しいという条件で見繕ってもらった。

こうして、それまでコンタクトレンズ派だったぼくはこれをきっかけにめがね派になるのであった。

その後、その田中眼鏡さんで教えてもらった吉祥寺の opteria-Glassias でまためがねを購入した。 opteria-Glassias さんは検眼に力を入れているお店ということで、1時間以上かけて最適なレンズを決めてくれるとのことであった。 そのためここでは仕事用(PC 用)のめがねを買うこととした。

そうして買っためがねがこれ。

このめがねは 25% 緑色をいれたカラーレンズになっていて、傍から見るとほぼサングラスなのだが、これがディスプレイの光量を抑えてくれて目が楽。他にもプリズムが入っていたりと、とにかく作業していて目が疲れないようになっている。今となってはこのめがね無しで PC の画面をみるのはつらい。

PC 用めがねということで矯正視力が 0.8 程度と抑えめになっているが、屋内であればこのめがねで支障はないので自宅用めがねとして利用している。

各種 Udemy 講座

今年は資格を3つ取得できました。それぞれ CKAD, CKA, AWS SAA ですが、どれも Udemy の講座に大変お世話になりました。買ってよかった。

音楽関係

ギターのレッスン

買ったものではないけれども、お金を払ったものとして。
今年からギターを習い始めました。長らく独学で続けてきたけれど、体系的に教わりたいと思い調べたところ徒歩2分の距離にプライベートスタジオでレッスンをやっている講師の方を見つけたので。

独学では好きな曲だけを弾くといったやり方になりがちだけど、レッスンだと基礎練習をしっかりできるのでよい。また弾き方など「これで合ってるんだろうか?」となる部分をレッスンの際に訊くことが出来るのもよい。

主な教本はこれ。つらい。うまくなりたい!

www.rittor-music.co.jp

Audient iD22

allaccess.co.jp

ギターのレッスンを受けるようになり、改めておうちギター環境を整えようと購入。
周りの音楽やってる人がおすすめしてたので買った。

物理的なダイアルで音量を調整できるのもよいし、ボタンひとつでセンターの音をカットできるのもよい。
入力が2チャンネルあるので、ひとつはギター、もうひとつはマイクにしている。マイクは Web ミーティングで使用するため。

Transcribe! for Mac

www.seventhstring.com

ギターの耳コピに活躍するソフト。
指定した範囲のループや速度変化させて再生など、特定のフレーズを集中して練習や耳コピする際に重宝している。

上述した iD22 のセンターカットと組み合わせると耳コピがはかどる。

BIAS FX 2

昨年 Amplitube を買ったのだが、どうも周りを見ていると最近は BIAS を利用している人が多いらしいので。これは iD22 を買ったときに得たサウンドハウスのポイントで買ったのでほぼ無料。

プリセットがダウンロードできたり、Guitar Match で別のギターの音をエミュレートできたり、楽しい。 豊富な機能を全然使いこなせてないが、まあ人気のプリセットをダウンロードして弾くだけでも十分楽しめている。

スノーボード関連

これはまだ実際に使ってないので、別記事として後日(来年?)書く。

そのほか

Anker PowerCore Fusion 10000

Anker PowerCore Fusion 10000www.ankerjapan.com

出かけるときのモバイルバッテリー兼自宅用充電器。普段はベッドサイドの充電器として使用していて、出かけるときは引っこ抜いてそのままカバンに放り込むだけでいいのでとても楽。

普通のモバイルバッテリーだと充電を忘れたりするが、充電器兼用なので充電を忘れることがない。

『Kubernetes Certified Administrator (CKA) with Practice Tests』記録 - セクション13・14

9月は忙しくあまり進められていなかったが、引き続き『Kubernetes Certified Administrator (CKA) with Practice Tests』を進めていく。 今回は Section 13: Troubleshooting と Section 14: Other Topics。トラブルシューティングは試験としても 30 % のボリュームを占める部分なので丁寧に進めていきましょう。

また、これで講座としては終了で、残るは Mock Exam(模擬試験)のみ。

Section 13: Troubleshooting

  • Application Failure
  • Practice Test - Application Failure
    • Webapp Pod, Database Pod 構成における各種トラブルシューティング
    • Webapp 側の接続先設定を直すのか、Database 側を直すのか曖昧な部分がちらほらあって手間取った
  • Control Plane Failure
  • Practice Test - Control Plane Failure
  • Worker Node Failure
    • k get nodesstatusNotReady なノードがあった場合
    • k describe node node-name で確認
    • ノード側のリソース使用率の確認: top コマンドや df コマンドで
    • kubelet の確認: service kubelet statussudo journalctl -u kubelet
    • 証明書の確認: openssl x509 -in /var/lib/kubelet/xxx.crt -text で Issuer や有効期限を見る
  • Practice Test - Worker Node Failure
    • kubelet が停止しているケース、/var/lib/kubelet/config.yaml が誤っているケース、etc/kubernetes/kubelet.conf が誤っているケースについて
  • Network Troubleshooting
    • うーむ、CNI プラグインのインストールって問われるんだろうか

Section 14: Other Topics

これは試験に役立つ Additional なトピックについて。 jsonpath と kubectl のコマンド。

  • Pre-Requisites - JSON PATH
    • YAML, JSON PATH のトレーニングと、-ojson 時の出力を元にした所望のフィールドにアクセスする方法について。
  • Advanced Kubectl Commands
    • -o=jsonpath=~~-o=custom-columns=COLUMN:JSONPATH, --sort-by=JSONPATH などについて。

さあ、残すは模試のみ!