特定のユーザーにすべてのDockerコンテナを表示しない

特定のユーザーにすべてのDockerコンテナを表示しない

1 台のサーバーを使用して複数の docker コンテナーをホストしたいと考えています。別のユーザーに新しい docker コンテナーを管理する権限を与えたいのですが、機密データが含まれている可能性があるため、私が開始した他のすべてのコンテナーへのアクセスをそのユーザーに与えたくありません。

仮想マシンを作成する必要のない安全な構成を作成する方法はありますか?

答え1

元の質問: ユーザーが独自の新しいコンテナーをスピンし、他のコンテナーにアクセスできないようにするにはどうすればよいでしょうか?

これは元々私の答えでしたが、おそらく私は質問を誤解したか、質問が明確ではなかったため、元の解決策をここに残しました。

Docker 自体はこの機能を提供していませんが、これを実行する方法は複数あります。

考え方としては、docker コマンドを実行するにはユーザーが sudo または docker グループに属している必要があるため、ユーザーに新しいコンテナーを起動させるだけであれば、すべての docker コマンドへのフル アクセスを提供する sudo または docker グループにユーザーを追加するのではなく、そのユーザーに対していくつかの docker コマンドのみをホワイトリストに登録することができます。

たとえば、ユーザー tom に次のコンテナの実行を許可する場合:

sudo docker container run --it --name ubuntu-tom ubuntu:latest bash

次のコマンドを実行して、sudoersファイルに次の行を追加することができます。sudo visudo:

tom ALL=NOPASSWD: /usr/bin/docker container run --it --name ubuntu-tom ubuntu:latest bash

これにより、ユーザー tom はパスワードを要求されずに、この特定の docker コマンドを root として実行できるようになります。その他の docker コマンドは、ユーザー tom が引き続き使用することはできません。

別の方法としては、制限されたシェルを設定することですが、ここでは詳細には説明しません。

更新された質問: 新しいコンテナを管理するユーザーを制限するにはどうすればよいですか?

Docker のみを使用した解決策はわかりません。

Kubernetes や ECS などのオーケストレーターが必要なようです。

この方法では、オーケストレーターがDockerデーモンを所有し、オーケストレーターが提供する権限レイヤーを利用できます。記事名前空間へのユーザー アクセスを制限する優れた例を示します。

答え2

dockerdユーザーごとに実行し、ファイル権限を利用してユーザー アクセスを分離するのは非常に簡単です。

systemd テンプレートを使用してこの設定を行うチュートリアルを見つけました: https://www.jujens.eu/posts/en/2018/Feb/25/multiple-docker/

答え3

portainerを実装してみませんか?ユーザーコントロール、GUIメニューなど多くの機能があり、サーバー上にユーザーを作成する必要もありません。

ポーター

答え4

docker API には内部的にこの機能がありません。この機能への直接アクセスは、ユーザーにサーバーへのルート アクセスを与えるため、システム管理者レベルの機能として扱います。したがって、これを実装するには、API への独自の間接アクセスを提供するか、docker 上でこの機能を提供する別のツールを使用する必要があります。

  1. sudo でアクセスでき、コマンドを実行する前にすべてのセキュリティ チェックを実行するスクリプトを提供できます。これを実装する最も簡単な方法は、作成されたすべてのオブジェクト (コンテナー、ボリューム、ネットワークなど) にラベルを追加し、クエリでそのフィルターに一致するオブジェクトのみを返し、実行されるコマンドをそれらのラベルを持つオブジェクトのみに制限することです。これは簡単に記述できるものではないため、後者のオプションを選択する人しか見たことがありません。ただし、実行されるコマンドとコンテナーが非常に限られている場合は、これが十分なソリューションになる場合があります。

  2. Kubernetes 名前空間はこの機能を提供し、Docker 上で実行されます。これは実装が大変なため、Kubernetes が提供する機能をさらに多く必要とする場合にのみ、ほとんどの人がこの方向に進みます。

  3. ユーザー アクセスを処理するさまざまなサードパーティ ツール (一部は商用) が存在します。Portainer と Rancher は 2 つの人気ツールですが、私はこれらを個人的に使用したことはありません。

  4. Docker は、UCP と呼ばれる、これを含むエンタープライズ サービスを提供します。基盤となる Docker エンジンにリクエストが送信される前に、RBAC チェックのために UCP を通過する docker api/cli アクセスをユーザーに付与できます。

関連情報