この記事は GMO ペパボエンジニア Advent Calendar 2020 の12日目の記事です。
昨日は @takutaka さんの 「Kubernetes Custom Controller を手抜きで作る技術」でした。
CRD や Custom Controller を作る際に役立つ情報が載っていて良い記事ですね。

さて、最近私は Open Policy Agent を触ることが多いので、それについて書こうと思っていたのですが、せっかく会社の Advent Calendar なので少し業務でやったことを書こうと思います。
私は GMO ペパボのセキュリティ対策室という部署で、サービスを横断してセキュリティ対策の基盤作りをしています。
セキュリティ対策と一口に言っても、その内容は多岐にわたりますが、エンジニアのセキュリティレベルの向上支援も業務のひとつです。
例えば年に一度はセキュアコーディング研修を行い、安全なアプリケーションの開発方法を学ぶハンズオンの開催や最新の攻撃手法の共有をしています。

どの分野にもセキュリティはつきものであるため、新しい技術スタックを導入した場合は、そのセキュリティについても啓蒙していくべきだと私は考えています。
例えば Kubernetes もそのうちの一つで、ペパボでも利用が進んでいます。社内のクラスタはセキュリティポリシーを有効にした状態で作成できますが、それが何のためにあるのか、攻撃された場合にどのようなことが生じるのかを知ってほしいと思い、CTF(Capture The Flag) 形式で学べるコンテンツを用意しました。

CTF 形式にした理由

CTF には色々な開催形式がありますが、よくあるのが Jeopardy と呼ばれるもので、与えられた問題を解いて特定のフォーマットの文字列(flag)を探し出すゲームです。
問題は必ず解けるように穴が用意されています。参加者はその穴を探し出して悪用するという攻撃の一連の流れを学ぶことができるため、セキュリティの学習用途として利用されることがあります。
CTF で効率的に学べるかはさておき、面倒だと思われがちなセキュリティを楽しく学ぶには、ゲーミフィケーションを取り入れたほうがより意欲的に取り組めるだろうと思い、CTF 形式のコンテンツにしました。

ちなみに、Kubernetes セキュリティを手を動かしながら学ぶ既存のコンテンツには、次のようなものがあり、いずれも素晴らしいコンテンツです。

kubectf

今回作ったものを mrtc0/kubectf に公開しました。

GitHub - mrtc0/kubectf: Kubernetes CTF
Kubernetes CTF. Contribute to mrtc0/kubectf development by creating an account o...

minikube を使ってローカルに演習環境を構築します。インストーラーが雑なシェルスクリプトなのは許して…

問題は Red Challenge (攻撃) と Blue Challenge (防御) の2種類用意しています。
namespace ごとに問題を用意していて、Red Challenge では victim という名前のついた Pod に侵入したと仮定し、権限昇格していく問題になります。
一方、Blue Challenge では、その攻撃を Gatekeeper や falco などで検知する問題になっています。
その他の細かなレギュレーション等は README を見てください。

問題は今の所5問しかないのですが、他にもいくつか案はあるので気が向いたときに追加します。問題のアイデアがある人は PR ください。
Writeup は社内で一通り解き終わるであろう年末あたりに公開します。

ちなみに、あくまで教育コンテンツとして CTF の形式を利用しているだけであり、ガチの CTF 問題を用意しているわけではないので、日頃から真面目に CTF に取り組んでいる人からすると、その期待とは異なるコンテンツだと思います。

ペパボでの利用

ペパボでは有志が集まって、毎週1時間ほど時間を取り、1~2問取り組んでいます。
kubectf を通して、最小権限の原則をより意識するようになったり、Kubernetes 自体の仕組みの理解が進んでいるようでした。
Slack のチャンネルでは Kubernetes のセキュリティ関係のツールや書籍などを話題にしており、セキュリティへの興味を持ってもらうという点は達成できているかな、と思います。

まとめ

kubectf を通して少しでも Kubernetes のセキュリティに興味を持ってもらえたら嬉しいです。
明日の Advent Calendar は kumesec こと @takumakume さんです。