パブリック クラウド Kubernetes サービスで root ユーザーがデフォルトで許可されるのはなぜですか?

パブリック クラウド Kubernetes サービスで root ユーザーがデフォルトで許可されるのはなぜですか?

Kubernetes 環境では、コンテナ内からホスト OS にアクセスされた場合のリスクを軽減するために、デフォルトでは root ユーザーを許可しない設定にすべきだと思います。この設定は PodSecurityPolicy に記述することで行います。

これを考慮すると、EKS、AKE、GKE などのパブリック クラウド Kubernetes サービスでコンテナを実行するためにルート ユーザーを使用できるのはなぜでしょうか。コンテナが攻撃者に侵害されるのを防ぐために、別のセキュリティ対策レイヤーがあるのでしょうか。

答え1

たとえ、コンテナ化されたプロセスが未修正の脆弱性によりホストOSにアクセスし、ルートとして実行することでシステムを完全に制御できる可能性があるとしても、多くの有名なソフトウェアパッケージが独自のセキュリティ対策を講じているため、パブリッククラウドはこれをデフォルトで強制しないことを選択していると私は考えています。メインプロセスはルートとして実行される- たとえば、nginx サービスは として実行されるメイン デーモン プロセスに依存しておりroot、セキュリティを強化するために として実行されるワーカー プロセスが生成されますwww-data

答え2

ルート ユーザーは、Docker コンテナの実行を含む Linux システム上のあらゆるアクションを実行できます。ルート ユーザーに Docker コンテナの実行を許可しない方法はありません。代わりに、ルート ユーザーへのアクセスを制限し、sudo を使用してルート以外のユーザーがシステム上で特定のアクションを実行できるようにします。

ただし、次の理由により、Dockerそれほど問題にはなりません。

dockerグループはrootユーザーと同等の権限を付与します。これがシステムのセキュリティにどのような影響を与えるかの詳細については、以下を参照してください。Dockerデーモンの攻撃対象領域

非ルートユーザーとして Docker を管理する

したがって、docker コマンドを実行する権限を持つ Linux ユーザーであれば誰でも、システム上でルート権限を取得できます。

Docker は OS レベルの仮想化テクノロジーであるため、コンテナ内のルート権限は問題になりません。コンテナ内のルート ユーザーに、Docker デーモンを実行している基盤となる OS へのアクセス権はありません。

関連情報