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をみてみてください。

render1596759963723.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になる予定です。

このツイートに補足する形でも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を遊んでみる 」です。