要約

  • ValidatingAdmissionPolicyBinding はポリシー、想定する対象範囲、任意のパラメータ、宣言されたアクションを結ぶ。個別リクエストの処理結果を示す受領証ではない。
  • Kubernetes は、対象一致、パラメータ解決、式の評価、失敗処理、アクション、応答を別々の段階として文書化している。
  • 構成の観測とリクエストの結果を別記録に保つことで、宣言を実行済みの事実へ取り替えずに済む。

Binding の画面は、しばしば強い安心感を与える。ポリシー名、対象を絞る条件、Deny、Warn、Audit といったアクションが並んでいれば、「もう強制されている」と読みたくなる。しかし Binding が直接表すのは、ポリシーをどの範囲と設定へ接続するかという宣言である。そこには、誰がいつどの API リクエストを出したか、そのリクエストが一致したか、どの式が評価されたか、サーバーが何を返し保存したかは書かれていない。

Kubernetes の API リファレンスは、最初の境界を明確にする。ValidatingAdmissionPolicyBinding は ValidatingAdmissionPolicy をパラメータ化されたリソースと結び付ける。Binding の matchResources はポリシーの matchConstraints と交差し、リクエストはまずポリシー側に一致しなければ Binding による選択へ進めない。これは、どのリクエストが将来評価され得るかを説明する。特定の Deployment や他のオブジェクトが実際にその交差集合へ入ったことを証明するものではない。該当リクエストが来なかった可能性も、一致しなかった可能性も、後段の別コントローラーが結果を決めた可能性も残る。

パラメータ参照にも同じ慎重さがいる。Binding はポリシーのパラメータとして使うリソースを参照できるが、文書は参照先が存在する状態と存在しない状態を区別する。参照先がない場合、Binding は設定不備と扱われ、ポリシーの failure policy が関係することがある。これはポリシー、Binding、パラメータ、失敗設定という別々の構成事実についての話である。どれか一つを見て、あるリクエストが許可または拒否されたと結論付けることはできない。

failurePolicy を、検証式が false になる場合の処理と同一視しないことも重要だ。Kubernetes は前者を、解析、型検査、実行時、設定上の失敗に用いる。検証が false を返した場合の扱いは、Binding の validationActions による。Deny は検証失敗でリクエストを拒否する動作、Warn はクライアントへの警告、Audit は当該リクエストの監査イベントへの情報追加を表す。これらは「保護された」という一つの結果の別名ではない。評価結果、失敗設定、宣言されたアクション、個別応答という異なる面を持つ。

Admission の位置も推論の範囲を決める。Kubernetes は Admission Controller が認証と認可の後、永続化の前にリクエストを扱うと説明する。mutating と validating の段階は別であり、どちらかの拒否でリクエストは終了する。Binding だけからは、先行する認可、変異による変更、他の検証の判断、最終的な保存を知ることはできない。読み取りは Admission 層を通らない。したがって Binding 一覧は、クラスターが何を受け入れ、何を保持したかという履歴ではない。

より限定された監査証拠には、だからこそ意味がある。Kubernetes が示す検証失敗の監査注釈は、特定の API リクエストに結び付き、ポリシー、Binding、失敗した式、アクションを示す。それはそのリクエストについての根拠になり得る。ただし別の時刻、別のリソース、クラスター全体へ結論を広げる根拠にはならない。範囲の狭さが、証拠の強さを支えている。

実務では二つの記録を分けるとよい。構成記録にはポリシーと Binding の識別子・観測版・選択条件・パラメータ参照・failure policy・宣言アクションを残す。結果記録にはリクエストの識別子と時刻、一致または除外の条件、パラメータ状態、式の結果、選ばれたアクション、応答、保存または拒否の証拠を残す。この分離は Kubernetes が要求する帳票ではない。宣言が、証拠のない実行結果へ化けることを防ぐための方法である。

出典

  1. Kubernetes API reference — ValidatingAdmissionPolicyBinding
  2. Kubernetes API reference — ValidatingAdmissionPolicy
  3. Kubernetes tutorial — Admission Policies
  4. Kubernetes documentation — Admission controllers
  5. Kubernetes documentation — Audit annotations