Tanzu Mission Controlで学ぶOpen Policy Agent Part-1
この記事はTanzu Mission Controlで学ぶ Open Policy Agentシリーズです。
シリーズ
第一回 : 概要 < いまここ
第二回 : TMCのOpen Policy Agentを遊んでみる
第三回 : TMCのOpen Policy Agentを解剖する
第四回 : TMCからOPAポリシーを自作する
Tanzu Mission Controlって何?
Tanzu Mission ControlとはVMwareがリリースしたマルチKuberenetesを管理するための仕組みです。 省略では「TMC」と呼びます。
Tanzu Mission Controlを使うといろんなKubernetesを一元的に管理できます。 EKS,AKS,GKEが管理できるのも面白いです。 その中で面白い機能なのが、Open Policy Agentの機能が実装された点です。
Open Policy Agentってなに?
まずは以下をみてくれたまえ
Open Policy Agentを説明する前に、以下のGifをみてみてください。
これは、あるpodに対してkubectlを使いログインして色々操作している点です。
さて、気づきますでしょうか?3行目以降のroot [ / ]#
。。。
なんとホストOSへ昇格してrootシェルを奪っています。
なぜホストOSのRootシェルが奪えたか
さて、知っている人は知っているし、大したことではないのですが、これには2つの仕掛けがPodになされています。
- Podに対して、Privileged権限を付与している。これによってHost OSへの全ての操作がゆるされる。
HostPID: True
を指定し、ホストOSのプロセステーブルをみれるようにしてしまう。
Yamlとしては、以下の内容です。
1
2apiVersion: v1
3kind: Pod
4metadata:
5 name: verybad
6spec:
7 hostPID: true # !!注目
8 containers:
9 - name: verybad
10 image: alpine
11 command: [ "sleep", "3600" ]
12 securityContext:
13 privileged: true # !!注目
これに加えて以下のnsenterコマンドで以下のフラグを指定することによってホストのプロセスID 1へBASH
プロンプトをくっつけてしまいます。
1/usr/bin/nsenter -t 1 -m -u -n -i -- bash
え?でもそれってPSPで守れるよね?
そのとおり、Pod Security Policyで守れます。ちゃんと権限設定をすれば、以下のようにOS権限昇格しようとしても怒られます。
1mhoshino@mhoshino ~ % kubectl exec -it verybad sh
2/ # /usr/bin/nsenter -t 1 -m -u -n -i -- bash
3nsenter: can't open '/proc/1/ns/ipc': Permission denied
4/ #
しかし、まだあまり知られていないですが、PSPは近いうちにDeprecatedになる予定です。
Big news @kubernetesio pod security policy is likely to be deprecated in 2020 with the entire project likely moving to @OpenPolicyAgent Gatekeeper #KubeCon SIG Auth pic.twitter.com/vmkJp52A9z
— Sean Kerner (@TechJournalist) November 21, 2019
このツイートに補足する形でもGithub上でもKubernetes v1.22でPSPがなくなる予定が宣言されました。
https://github.com/kubernetes/enhancements/issues/5#issuecomment-656120326
The deprecation schedule for the current beta version in 1.22 is independent of whether or not an in-tree implementation of the standard pod security profiles will be provided. That has not yet been determined.
Open Policy Agent PSPの代替として登場
PSPがなくなるという衝撃的なニュースとともに、静かに騒がれているのが、PSPの代替です。 そこでOpen Policy Agentです。
Open Policy AgentとはCNCFのプロジェクトの一つであり、より簡易およびポリシーを定義することができるツールです。 さらにKubernetesはAdmission Controllerを組み合わせることによって、なにかのリソースが作られる前にインターセプトして、拒否するなどができるようになります。
絵で表すと以下のような感じです。
このシリーズはなんぞや?
Open Policy Agentとは、でてからまだ日が浅いですが、なんとTanzu Mission Controlではプロダクトとしてつかえるようになりました。そしてこれはPSPの代替として、つかわれるようになります。
このシリーズではTMCのOpen Policy Agentがどのように実装されているか解剖していくシリーズです。 次回は、「TMCのOpen Policy Agentを遊んでみる 」です。