この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

これは未公開の文書です Admission Controller 1.34-dev.

コンテキスト認識ポリシー

開発者は、実行時にKubernetesクラスターから情報を取得するポリシーを作成できます。これらはコンテキスト認識ポリシーです。コンテキスト認識ポリシーは、クラスターにデプロイされたリソースからの情報を使用して、`AdmissionRequest`が受け入れ可能かどうかを判断できます。

コンテキスト認識ポリシーは、SUSE Security Admission Controllerのバージョンがv1.6.0以上でのみ利用可能です。

ポリシーがクラスター内のどのリソースにアクセスできるかは、ポリシーサーバーのhttps://kubernetes.io/docs/concepts/security/service-accounts/[サービスアカウント]によって制御されます。クラスター管理者は、KubernetesのRBACルールを介してポリシーがアクセスできる内容を制御します。コンテキスト認識ポリシーは、要求されたリソースに対して*read*アクセスのみを持っています。

セキュリティ上の理由から、`ClusterAdmissionPolicy`ポリシーのみがKubernetesクラスターから情報を取得できます。これは、特権のないユーザーが`AdmissionPolicy`リソースをデプロイできるためです。

特権のないユーザーが`AdmissionPolicy`としてコンテキスト認識ポリシーをデプロイした場合、システムは:

  • Kubernetesリソースへのすべてのアクセス試行をブロックします。

  • それらをクラスター管理者に報告します。

デフォルトでは、Admission Controllerはすべてのクラスターリソースをブロックします。SUSE Security Admission Controller管理者は、各コンテキスト認識ポリシーが読み取ることができるKubernetesリソースを定義します。これを行うために`contextAwareResources`を使用します。

以下の例は、`Deployment`および`Pod`リソースへのアクセスを必要とするポリシーをデプロイします:

apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: context-aware-policy
  namespace: default
spec:
  policyServer: default
  module: "registry://ghcr.io/kubewarden/policies/context-aware-policy:v1.0.0"
  settings: {}
  contextAwareResources:
    - apiVersion: "apps/v1"
      kind: "deployment"
    - apiVersion: "v1"
      kind: "pod"
  rules:
    - apiGroups: ["apps"]
      apiVersions: ["v1"]
      resources: ["deployment"]
      operations:
        - CREATE
        - UPDATE
  mutating: false

デプロイされると、このポリシーは`deployment`および`pod`リソースのデータを読み取ることができます。

ポリシーの著者は、コンテキスト認識ポリシーのためのKubernetesリソースのリストを提供します。ポリシーの著者は、ポリシーに注釈を付けることでこれを行います。SUSE Security Admission Controller管理者は、`kwctl inspect`コマンドを使用してポリシーのメタデータを表示します。彼らは、ポリシーがアクセスする必要のあるリソースのリストを取得できます。管理者は、このリストを使用して`ClusterAdmissionPolicy`定義を埋めます。

システムの悪用を防ぐために、SUSE Security Admission Controller管理者はポリシーがアクセスするリソースを確認する必要があります。

例えば、イングレスオブジェクトを評価するポリシーは、クラスター内で定義された`Ingress`リソースを読む必要があります。同じポリシーは、`Secret`リソースへのアクセスを正当化できません。

ポリシーは、正しく機能するために必要な最小限のアクセスを持つべきです。

Kubernetesリソースの識別には、`apiVersion`と`kind`が使用されます。

通常、apiVersion`は<api>/<version>`形式の文字列です。core APIグループ(Pod、Serviceなど)のリソースは、グループ名`<api>`を定義すべきではありません。<version>(例えば、v1)のみを定義すべきです。

コアリソースの場合、最初のものは機能せず、2番目のものは機能します。

- apiVersion: "core/v1"
  kind: "pod"
- apiVersion: "v1"
  kind: "pod"

他のすべてのKubernetesリソースは、完全な定義が必要です:<api>/<version>

参考文献

コンテキスト認識ポリシーに関する詳細情報は、リファレンスドキュメントのこのセクションで見つけることができます。