アドミッションコントローラー

By 清水 孝郎 - OCTOBER 7, 2021

SHARE:

本文の内容は、2021年10月7日現在における、docs.sysdig.com上のAdmission Controllerを元に日本語に翻訳・再構成した内容となっております。

備考
この機能はSysdig Labsから提供されており、独自のコンポーネントとしてインストールされます。「アドミッションコントローラー:インストール」を参照してください。

アドミッションコントローラーについて

Kubernetesのアドミッションコントローラーは、クラスターで許可されるリクエストを定義し、カスタマイズするのに役立ちます。アドミッションコントローラーは、Kubernetes APIへのリクエストを傍受し、オブジェクトの永続化の前に処理しますが、リクエストが認証され、認可された後に処理します。

イメージスキャン機能:Sysdigのアドミッションコントローラ(UIベース)は、Kubernetesをベースに、イメージスキャナーの機能を強化し、CVE(Common Vulnerabilities and Exposures)、設定ミス、古いイメージなどをチェックし、スキャンポリシーを検知から実際の防止にまでを可能にします。設定されたアドミッションポリシーを満たさないコンテナイメージは、ノードに割り当てられて実行が許可される前に、クラスターから拒否されます。

Kubernetesの監査ログ機能(SaaSのみ):アドミッションコントローラーでKubernetes監査ログ機能を使用するには、features.k8sAuditDetections=trueオプションを有効にします。(参照: Kubernetes Audit Logging.)



ACによるイメージスキャンの使用手順

アドミッションコントローラーは、クラスターごとにインストールします。ワークフローは単純明快です。

インストール:
  • Sysdig Labsで機能を有効にして、Sysdig Secureのバックエンドでイメージスキャンのための機能を有効にします。
  • 対象となるクラスターにアドミッションコントローラーをインストールし、Sysdig UIに “Connected “と表示されることを確認します。

使用方法:
  • 使用例に応じたアドミッションコントローラーのポリシーを定義します。
  • 接続されたクラスターにポリシーを割り当てます。
  • クラスターのアドミッション・コントローラーを有効にします。

アドミッションコントローラーポリシーの作成

アドミッションコントローラーのポリシーは、アドミッション時に指定されたコンテナイメージを受け入れるか拒否するかの基準を定義します。ポリシーを適用するには、クラスターに割り当てなければならないことを覚えておいてください。

  1. Sysdig Secureに管理者としてログインし、Image Scanning> Admission Controller|Policiesを選択します。
    • Admission Controller Policiesページには、以前に定義されたポリシーのリストが表示されます。
  2. +Policyをクリックして、意味のある名前と説明を入力します。
  3. ポリシーのルールを定義します。
    • Evaluation Failure:スキャンポリシーの評価に失敗しているイメージを拒否するかどうか。
    • Evaluation Age:評価がX日よりも古い場合にイメージを拒否するかどうか。例えば、新しい脆弱性チェックを強制するためにこの条件を設定することがあります。
    • Unscanned Image:アドミッション時に既存の評価がないイメージを拒否するかどうか。3つのオプションから選択します。
      • Ignore:この条件を無視する
      • Reject: リクエストを拒否する
      • Reject and Scan:リクエストの拒否とイメージのスキャンを並行して行います。
      • 通常、Kubernetesは保留中のイメージの作成を再試行するため、最終的にはイメージが有効な評価を受け、その後、他の条件が適用されます。アドミッション時にスキャンを行うと、デプロイメントプロセスが遅くなる可能性があるため、ほとんどのイメージがミッション前に評価を持っているという確信がある場合を除き、このオプションはお勧めしません(CI/CDパイプラインのインストルメント化など)。
  4. Saveをクリックします。

ポリシー条件の適用方法

ポリシー条件は、AND演算子を使用して適用されます。

例えば、Evaluation FailをRejectに設定し、Evaluation Ageを15日以上でRejectに設定した場合、既存の評価が合格しているイメージを受信し、その評価が20日前のものであれば、そのリクエストは拒否されます。

アドミッションコントローラのポリシーの割り当て

  1. Sysdig Secureに管理者としてログインし、Image Scanning> Admission Controller|Policy Assignmentを選択します。
    • アドミッションコントローラーポリシーの割り当てページでは、アドミッションコントローラーを持つKubernetesクラスターのリストと、その現在のステータスが表示されます。
    • Connected/disconnected clusters: アドミッションコントローラーが一度もインストールされていないクラスターは全く表示されません。それ以外の場合は:
      • Connected: 接続された健全なアドミッションコントローラーを持つクラスターは、「Connected」ラベルの下に表示されます。
      • Disconnected: アドミッションコントローラーがインストールされているが、アドミッションコントローラーコンポーネントがSysdigのバックエンドに報告されていないKubernetesクラスターは、「Disconnected」ラベルの下に表示されます。
    • アドミッションコントローラーの有効化/無効化:右上のスイッチを使って、各クラスターのアドミッションコントローラを有効/無効にします。
      • Enabled: クラスター名の横にある緑のドットは、アドミッションコントローラが有効(エンフォースメント)であることを示します。
      • Disabled:灰色のドットは、アドミッションコントローラーが無効であることを示します。
  2. +Add Assignmentをクリックして、基本的な割り当ての詳細を入力します。
    • 1つのクラスターには、粒度の異なるレベルで複数の割り当てを設定することができ、ポリシーは上から下に向かって評価されます。
    • Namespace: 空白にして任意のネームスペースに一致させるか、関連するエントリを追加します。
    • Prefix: 空白にして任意のイメージ名と一致させるか、特定のプレフィックスを入力して制限します。例えば、redis のプレフィックスは、コンテナ作成リクエストで redis:latest または redis:v2 と宣言されたイメージにマッチします。
    • Policy: ドロップダウンリストからポリシーを選択します。
  3. 他にマッチする割り当てがない場合は、Default policyを選択します。デフォルトで許可する、またはデフォルトで拒否するを選択します。
    • 警告:Reject by default オプションには十分注意してください。システムで重要なワークロードを明示的に許可するようにしてください。
  4.  Save.をクリックします。
  5. オプション:別の割り当ての前に適用する必要がある場合は、新しい割り当てを評価リストの別の位置にドラッグします。

評価順序について

割り当ては上から下に向かって評価されます。最初にマッチしたものが、どのポリシーを適用するかを決定します。一致する割り当てがない場合は、デフォルトのクラスターアクションが適用されます。

例えば、以下のようになります:

割り当て 1: ネームスペース kube-system; すべてのイメージパスは Policy1 を使用します。

割り当て2:すべてのネームスペース、quay.io/myimageで始まるイメージパスはPolicy2を使用します。

デフォルトのポリシー:他の割り当てがマッチしない場合は、拒否。

そして:
  • kube-system ネームスペースでパスが docker.io/myimage のコンテナの作成をリクエストすると、Policy1 が適用されます。
  • kube-system のネームスペースでパス quay.io/myimage を持つコンテナの作成を要求すると、Policy1 が適用されます。
  • mynamespace ネームスペースでパス quay.io/myimage を持つコンテナの作成を要求すると、Policy2 が適用されます。
  • mynamespace ネームスペースにパスdocker.io/myimageを持つコンテナの作成をリクエストすると、Rejectされます。

ACによるKubernetes Audit Loggingの使用手順

  • アドミッションコントローラーのインストール時に、features.k8sAuditDetections  trueに設定します。
  • Kubernetes Audit Policyタイプのポリシーを作成します。
  • イベントUIでエントリーを確認します。

アドミッションコントローラーの有効化/無効化

アドミッションコントローラーを無効化にした状態でポリシーや割り当ての作成をお勧めします。本番環境で有効にする前に、ステージングクラスターで有効にしてテストします。

定義された動作に満足したら、次の手順を実行します。
  1. Sysdig Secureに管理者としてログインし、Image Scanning> Admission Controller|Policy Assignmentを選択します。
  2. 左側のメニューから該当するクラスターを選択します。
  3. アドミッションコントローラーをEnabledにスライドさせます。
  4. 結果として発生するイベントを通常通り監視します。
備考
無効化の機能は、クラスターの機能に悪影響を及ぼす予期せぬ動作が検出された場合に、アドミッションコントローラーを迅速に停止するためにも使用できます。