Kubernetes コンテナー内の各 Pod およびコンテナーに提供される特権の程度を管理するのは難しい場合があります。コンテナーのセキュリティを強化するために、Kubernetes SecurityContext 機能を利用して、ポッドおよびコンテナーから Linux 機能を追加または削除する場合があります。この記事では、securityContext を使用して機能を追加および削除する簡単な例を実装することに焦点を当てています。すべての機能を削除し、コンテナーに機能を 1 つだけ追加する yaml ファイルの構成は、サンプル例で提供されています。この記事では、proc および capsh コマンドを使用してコンテナーの機能を表示します。
ステップ 1: Minikube サーバーを起動する
まず、minikube サーバーを起動して、アプリケーションを実行し、kubectl の手順を使用できるようにします。 Kubernetes 環境で minikube サーバーを使用して、ノード、ポッド、さらにはクラスターをデプロイできます。 minikube をアクティブ モードに維持するには、次のコマンドを使用する必要があります。
> ミニキューブを始める
これで minikube サーバーがオンになり、Kubernetes 環境が使用できるようになります。
ステップ2: Kubernetes YAML ファイルを作成する
2 番目のステップでは、ポッドをデプロイするための YAML ファイルを作成します。
次の手順に従って、nano を使用して yaml ファイルを作成します。
- ファイルを作成するディレクトリ パスに移動するか、既存のファイルを変更します。
- nano コマンドに続けてファイル名を入力します。
次の nano コマンドを実行します。 「nano podsample.yaml」という名前の YAML 構成ファイルを作成します。
> ナノ podsample.yamlpodsample.yaml ファイルの設定方法を理解するのに役立つ次のステップに進みましょう。
ステップ 3: YAML ファイルの構成
前のステップで capsh ツールを追加して、コンテナーの機能を確認できるようにします。
これらのパラメーターはいずれも、このコンテナーの securityContext セクションに対して構成されていないことに注意してください。したがって、それらはすべてシステムのデフォルトに設定されています。このコンテナーは、Kubernetes でユーザーが定義されていない場合、構築元の Dockerfile で提供されるデフォルト ユーザーとして動作するという事実を考慮してください。多くのコンテナーでは、このデフォルト ユーザーは root です。
ステップ 4: ポッドを作成する
このステップでは、次の添付コマンドで podsample.yaml を作成しましょう。
> kubectl 適用 -f podsample.yaml
ステップ 5: 機能の確認
前のステップで、ポッドが作成され、実行されています。
内部にシェルができたので、capsh を使用して、次のコマンドを使用してその機能を確認できます。
> $ kubectl エグゼクティブ - -標準入力 - -tty キャップ - - 灰capsh コマンドを使用すると、次のようにリストされているコンテナーのデフォルトの容量を確認できます。
与えられた出力から、コンテナーには、実行時にコンテナーに与えられる多くのデフォルト機能があることがわかります。
ステップ 6: 落とす 独身 能力 よ Kubernetes SecurityContext で
このステップでは、コンテナーの単一の機能を削除します。
次のコマンドを使用して yaml ファイルを構成しましょう。
> ナノ dropod.yamlその後、次のコマンドを使用して droppod.yaml ファイルの構成に移動します。
> kubectl 適用 -f droppod.yaml
ステップ 7 : YAML ファイルに単一の機能を追加するように構成する
この手順では、手順 6 で作成した yaml ファイル (dropped.yaml) を開きます。次に、CAP_MKNOD 機能にアクセスできないようにコンテナーを設定します。これにより、新しいファイル システム ノードを作成する機能が削除されます。
構成されたファイルは次のとおりです。
ステップ 8 : 機能の確認
yaml ファイルは、CAP_MKNOD 機能を削除するように構成されています。
このステップでは、dropcaps.yaml ファイルを実行して実行し、次のコマンドを使用してコンテナーの機能を確認します。
> $ kubectl エグゼクティブ - -標準入力 - -tty ドロップキャップ - - 灰容量は、dropcaps ファイルを実行して確認できます。
> # capsh - -print
このポッドは、最初のポッドと比較して CAP_MKNOD 機能を削除したことがわかります。
ステップ 9 : Kubernetes SecurityContext のすべての機能を削除する
Kubernetes は単一の機能をドロップできるため、securityContext を介してすべての機能をドロップすることもできます。このステップでは、指定されたコマンドを暗示して、コンテナーのすべての機能を削除します。
> ナノ samplenocap.yamlその後、次のコマンドを使用して samplenocap.yaml ファイルを構成します。
> kubectl 作成 -f samplenocap.yaml
それでは、次のステップに移り、securityContext 設定のすべての容量を削除しましょう。
ステップ 10: YAML ファイルですべての機能を構成する
このステップでは、ステップ 9 で作成した yaml ファイルを開きます。次に、container.securityContext 内で構成し、コンテナのすべての機能を削除します。
構成されたファイルは次のとおりです。
ステップ 十一 : 機能の確認
機能に関する情報を表示するには、capsh で nocaps を実行します。このステップでは、次のコマンドを使用して、コンテナーのすべての機能を表示します。
> kubectl エグゼクティブ - -標準入力 - -tty nocaps - - 灰capsh で samplenocaps yaml ファイルを実行することにより、次の図で容量を確認できます。
> # capsh - -print
前の出力は、current='' と境界 set='' が現在空であることを示しています。機能は正常に削除されました。
ステップ1 2 : バッシュをインストールする
このステップでは、機能がまったくない場合、一部のシステム機能が機能しないため、apk を使用して Bash をインストールします。コンテナーはルートとして動作していますが、Bash パッケージのインストールは失敗します。
> # apk add bash
ステップ1 3 : 機能情報を確認する
capsh コマンドや proc コマンドを使用するなど、コンテナーの機能を表示する方法はいくつかあります。このステップでは、proc コマンドを使用してコンテナーの容量を表示し、proc は容量をビットマップとして表示します。 capsh の結果ほど読みやすいわけではありませんが、ここで定義されている各ビットは特定の機能を表しています。
> # cd /proc/1/
ここで、この特定のコンテナーには有効な機能がないことがわかります。これらの値はすべてゼロです。
ステップ1 4 : Kubernetes SecurityContext に単一の機能を追加する
前の手順では、CAP_MKNOD という 1 つの機能を削除し、すべての機能を削除しました。ただし、このステップでは、機能を元に戻すことができます。
次のコマンドを実行して、yAML ファイルを作成します。
> ナノ sampleadd.yamlその後、sampleadd.yaml ファイルを構成します。
> kubectl 作成 -f sampleadd.yaml
それでは、sampleadd.yaml ファイルを試して、securityContext 設定に単一の容量を追加してみましょう。
ステップ1 5 : YAML ファイルで単一の機能を構成する
それでは、spec.container.securityContext の機能を capabilities.add ['MKNOD'] に追加して、ファイルを構成しましょう。
機能は YAML ファイルに表示されます。
ステップ 16 : 機能の確認
この手順では、次のコマンドを使用して addcaps を実行し、機能を確認します。
> kubectl エグゼクティブ - -標準入力 - -tty addcaps - - なので追加された容量は、次の出力で確認できます。
現在 = cap_mknod+ep
境界セット = cap_mknod
> # capsh - -print
結論
最初に、実行時に割り当てられ、capsh コマンドで表示されるコンテナーのデフォルトの機能について、実装された例から学びました。次に、CAP_MKNOD という名前のコンテナーに 1 つの機能をドロップする方法を学習しました。次に、//drop: –all 構成を使用してコンテナーのすべての機能をドロップする方法も学びました。次に、capsh コマンドと proc コマンドを使用して、コンテナーの機能を表示する 2 つの方法を使用しました。