ポッドのセキュリティ

このトピックでは、Tanzu Kubernetes Grid (TKG) によって展開されたワークロード クラスタを保護するようにポッド セキュリティ アドミッション (PSA) コントローラを構成する方法について説明します。

Kubernetes v1.23 以降を実行しているクラスタまたはクラスタ内の名前空間の場合、TKG はポッド セキュリティ アドミッション (PSA) コントローラを介して、privilegedbaselinerestricted タイプのポッド セキュリティ ポリシーの適用をサポートします。

バックグラウンド:PSA コントローラ

Kubernetes の PSA コントローラを使用すると、次の 2 つの軸に沿ってワークロード セキュリティ ポリシーを構成できます。

  • プロファイルは、ワークロード ポッドが実行できる権限レベルを指定します。レベルは、制限の小さい順に privilegedbaselinerestricted となります。
  • モードは、ポッドの作成がプロファイルに違反したときにトリガされるアクションを指定します。warn は警告を出力し、audit は監査ログ エントリを追加し、enforce はポッドの作成をブロックします。

PSA コントローラは、特定の名前空間またはクラスタ全体で動作するように構成できます。たとえば、クラスタを構成して、baseline ポッドがセキュリティ ポリシーに違反した場合は監査ログをトリガし、restricted ポッドがポリシーに違反している場合はそれをブロックすることができます。

詳細については、Kubernetes ドキュメントの「ポッドのセキュリティ標準」を参照してください。

ポッドのセキュリティ ポリシーからの移行

PSA システムは、Kubernetes v1.25 リリース ノートで説明されるように、Kubernetes v1.21 で廃止され、v1.25 で削除されたポッドのセキュリティ ポリシー (PSP) を置き換えます。

ノードの PSP は、Kubernetes において廃止されたことを踏まえて、TKG v2.1 では廃止になりました。ポッドを PSP から PSA コントローラに移行する方法については、「PodSecurityPolicy から組み込みのポッド セキュリティ アドミッション コントローラへの移行」を参照してください。

TKG の PSA 構成

TKG ワークロード クラスタのデフォルトの PSA 設定は、実行している Kubernetes バージョンによって異なります。

  • TKG v2.3 および v2.4 にネイティブな Kubernetes v1.26 および v1.27:
    • warn モードと audit モード:restricted
    • enforce モード:設定なし
  • TKG v2.2 および v2.1 にネイティブな Kubernetes v1.25 および v1.24:
    • warn モードと audit モード:baseline
    • enforce モード:設定なし

TKG 2.4、v2.3、v2.2、および v2.1 でネイティブの Kubernetes バージョンを実行しているクラスタのデフォルトの PSA 設定では、ポリシー違反に関する警告が生成されても、PSP から PSA への移行中もポッドが引き続き実行されるようにします。

TKG v2.2 以降では、すべての内部 TKG コンポーネントが PSA の restricted プロファイルに準拠します。

クラスタ全体の PSA の構成

クラスタ全体の PSA を使用して新しいクラスタを構成することも、既存のクラスタの PSA を変更することもできます。

新しいクラスタのクラスタ全体の PSA

新しいワークロード クラスタにクラスタ全体の PSA を構成するには、クラスタ構成ファイルの POD_SECURITY_STANDARD_DEACTIVATEDfalse に設定し、他の POD_SECURITY_STANDARD_* 変数を「構成ファイル変数リファレンス」の「ポッドのセキュリティ標準」の表に従って設定します。

  • POD_SECURITY_STANDARD_DEACTIVATED
  • POD_SECURITY_STANDARD_AUDIT
  • POD_SECURITY_STANDARD_WARN
  • POD_SECURITY_STANDARD_ENFORCE

また、「クラスベースのクラスタを作成する」で説明されている 2 段階のプロセスの手順 1 としてクラスタ マニフェストを生成し、次に以下の「既存のクラスベース クラスタの PSA の変更」に従って Cluster 仕様の podSecurityStandard 変数値を編集してから、手順 2 でクラスタを作成することもできます。

既存のクラスベース クラスタの PSA の変更

既存のクラスベースのクラスタの PSA 構成を変更するには、次の手順を実行します。

  1. エディタで Cluster オブジェクト仕様を開きます。

    kubectl edit -namespace NAMESPACE CLUSTER
    
  2. spec.topology.variables の下の podSecurityStandard ブロックの値を編集します。

    - name: podSecurityStandard
    
      value:
        deactivated: DEACTIVATED
        audit: AUDIT-PROFILE
        enforce: ENFORCE-PROFILE
        warn: WARN-PROFILE
        auditVersion: AUDIT-VERSION
        enforceVersion: ENFORCE-VERSION
        warnVersion: WARN-VERSION
        exemptions:
          namespaces: [EXEMPT-NS]
    

    ここで、

    • DEACTIVATED はクラスタ全体の PSA を適用する場合は false、それ以外の場合は true です。
    • AUDIT-PROFILEENFORCE-PROFILEWARN-PROFILE は各モードの PSA プロファイルで、"privileged""baseline"、または "restricted" のいずれかになります。デフォルトは "privileged" です。
    • VERSION 値は、3 つのモードの Kubernetes バージョンです("v1.26" など)。
    • EXEMPT-NS は、PSA コントロールから除外する名前空間のカンマ区切りのリストです。

    注:システム名前空間 kube-system および tkg-system は常に PSA コントロールから除外されます。

  3. Cluster オブジェクト仕様を適用すると、変更はクラスタの制御プレーン ノードにロールアウトされます。

既存のレガシー クラスタの PSA の変更

既存のレガシー クラスタの PSA 構成を変更するには、次の手順を実行します。

  1. 現在の AdmissionConfiguraton 仕様ファイルを KubeadmControlPlane オブジェクトから取得し、ローカルに保存します。例:

    kubectl get kcp my-cluster-control-plane --template='{{ range $v := .spec.kubeadmConfigSpec.files }}{{ if eq $v.path "/etc/kubernetes/admission-control-config.yaml" }}{{ $v.content }}{{ end }}{{ end }}' > admission-config.yaml
    
  2. admission-config.yaml ファイルを新しい構成に編集します。たとえば、次の例では、enforcebaseline に設定し、audit モードと warn モードを restricted のままにします。

    apiVersion: apiserver.config.k8s.io/v1
    kind: AdmissionConfiguration
    plugins:
    - name: PodSecurity
    configuration:
      apiVersion: pod-security.admission.config.k8s.io/v1beta1
      kind: PodSecurityConfiguration
      defaults:
        enforce: "baseline"
        enforce-version: "v1.24"
        audit: "restricted"
        audit-version: "v1.24"
        warn: "restricted"
        warn-version: "v1.24"
      exemptions:
        usernames: []
        runtimeClasses: []
        namespaces: ["kube-system", "tkg-system"]
    
  3. KubeadmControlPlane オブジェクト仕様を編集し、spec.kubeadmConfigSpec.files の配列エントリを新しい構成ファイルに置き換えます。

  4. KubeadmControlPlane オブジェクト仕様を適用すると、変更はクラスタの制御プレーン ノードにロールアウトされます。

PSA 構成を追加または変更する前のコンプライアンスの確認

PSA を追加または変更する前に、PSA のクラスタまたは名前空間内のすべての既存のワークロードが新しいポリシー設定に準拠していることを確認することで、予期しないダウンタイムを回避します。

既存の名前空間で実行されているポッドが特定のポリシーに準拠しているかどうかを評価するには、kubectl label --overwrite --dry-run=server を実行します。

kubectl label --overwrite --dry-run=server namespace <namespace> pod-security.kubernetes.io/enforce=<policy>

同じ情報は、ポッド セキュリティ アドミッションの audit モードを構成するときに監査ログに書き込まれます。または、リソースをクラスタに適用して warn モードを構成するときに提供されます。

ポッド セキュリティのさまざまなプロファイルに関する最新情報は、Kubernetes のドキュメントで確認できます。

check-circle-line exclamation-circle-line close-line
Scroll to top icon