
私は VirtualBox ハイパーバイザーを搭載した MacOSX ホストで minikube を実行しています。ホストとフォルダー (/Users) を共有しています。これは何のためにあるのでしょうか。また、クラスターをオンラインで実行するのに十分安全なのでしょうか。
コンテナから脱出し、ポッドから脱出し、VM から脱出するのは難しいと思いますが、私は簡単にそこにアクセスできました。minikube ssh
共有フォルダーや、シェルでホストを探索できることに気づいていませんでした。
答え1
いいえ、安全ではありません。Dockerfile で USER デーモン ディレクティブを使用してビルドされたコンテナ イメージを使用してポッドがデプロイされ、コンテナがデーモン ユーザーで実行されることを想像してください。攻撃者がイメージ レジストリにアクセスし、同じタグで別のイメージをプッシュするとどうなるでしょうか。攻撃者のイメージは、ルート ユーザーとして実行するように構成されています。Kubernetes がポッドの新しいインスタンスをスケジュールすると、Kubelet は攻撃者のイメージをダウンロードし、そこに挿入されたコードを実行します。コンテナはホスト システムからほとんど分離されていますが、プロセスをルートとして実行することは依然として悪い習慣と見なされています。たとえば、ホスト ディレクトリがコンテナにマウントされている場合、コンテナで実行されているプロセスがルートとして実行されている場合、マウントされたディレクトリに完全にアクセスできますが、非ルートとして実行されている場合はアクセスできません。前述の攻撃シナリオを防ぐには、次のリストに示すように、ポッドのコンテナを非ルート ユーザーとして実行する必要があることを指定できます。
apiVersion: v1
kind: Pod
metadata:
name: pod-run-as-non-root
spec:
containers:
- name: main
image: alpine
command: ["/bin/sleep", "999999"]
securityContext:
runAsNonRoot: true