第6章 ValidatingAdmissionPolicyBinding [admissionregistration.k8s.io/v1]


説明

ValidatingAdmissionPolicyBinding は、ValidatingAdmissionPolicy をパラメーター化されたリソースにバインドします。ValidatingAdmissionPolicyBinding とパラメーター CRD の組み合わせにより、クラスター管理者がクラスターのポリシーを設定する方法が定義されます。

特定のアドミッションリクエストに対して、各バインディングによりポリシーが N 回評価されます。N は、パラメーターを使用しないポリシー/バインディングの場合は 1、それ以外の場合はバインディングによって選択されるパラメーターの数です。

ポリシーの CEL 式では、計算された CEL コストが CEL 最大予算を下回る必要があります。ポリシーの各評価には、独立した CEL コスト予算が与えられます。ポリシー、バインディング、またはパラメーターを追加/削除しても、特定の (ポリシー、バインディング、パラメーターの) 組み合わせがそれぞれの CEL 予算内に収まるかどうかには影響しません。

object

6.1. 仕様

プロパティー説明

apiVersion

string

APIVersion はオブジェクトのこの表現のバージョンスキーマを定義します。サーバーは認識されたスキーマを最新の内部値に変換し、認識されない値は拒否することがあります。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources を参照してください。

kind

string

kind はこのオブジェクトが表す REST リソースを表す文字列の値です。サーバーはクライアントが要求を送信するエンドポイントからこれを推測できる場合があります。これを更新することはできません。CamelCase を使用します。詳細は、https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds を参照してください。

metadata

ObjectMeta

標準のオブジェクトメタデータ。詳細は https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata を参照してください。

spec

object

ValidatingAdmissionPolicyBindingSpec は、ValidatingAdmissionPolicyBinding の仕様です。

6.1.1. .spec

説明
ValidatingAdmissionPolicyBindingSpec は、ValidatingAdmissionPolicyBinding の仕様です。
object
プロパティー説明

matchResources

object

MatchResources は、一致基準を満たしているかどうかに基づいて、オブジェクトに対してアドミッションコントロールポリシーを実行するかどうかを決定します。除外ルールは包含ルールよりも優先されます (リソースが両方に一致する場合は除外されます)。

paramRef

object

ParamRef は、ポリシーバインディングによって適用されるルールの式への入力として使用するパラメーターを検索する方法を表します。

policyName

string

PolicyName は、ValidatingAdmissionPolicyBinding のバインド先の ValidatingAdmissionPolicy 名を参照します。参照されるリソースが存在しない場合、このバインディングは無効とみなされ、無視されます。必須です。

validationActions

array (string)

validationActions は、参照される ValidatingAdmissionPolicy の検証を適用する方法を宣言します。検証が false と評価された場合、これらのアクションに従って、検証が常に適用されます。

ValidatingAdmissionPolicy の FailurePolicy によって定義された失敗は、FailurePolicy が Fail に設定されている場合にのみ、これらのアクションに従って適用されます。それ以外の場合、失敗は無視されます。これには、コンパイルエラー、ランタイムエラー、ポリシーの誤った設定が含まれます。

validationActions はアクション値のセットとして宣言されます。順序は関係ありません。validationActions に同じアクションを重複して含めることはできません。

サポートされているアクション値は次のとおりです。

"Deny" を指定すると、検証が失敗した場合にリクエストが拒否されます。

"Warn" を指定すると、警告コード 299 とともに、HTTP 警告ヘッダーで検証の失敗がリクエストクライアントに報告されます。許可されたアドミッションレスポンスと拒否されたアドミッションレスポンスの両方に対して警告を送信できます。

"Audit" を指定すると、リクエストに対して公開される監査イベントに検証の失敗が含まれます。監査イベントには、validation.policy.admission.k8s.io/validation_failure 監査アノテーションが、検証失敗の詳細を含む値とともに含まれます。この値は、オブジェクトの JSON リストとしてフォーマットされます。各オブジェクトには次のフィールドが含まれます。- message: 検証失敗メッセージ文字列 - policy: ValidatingAdmissionPolicy のリソース名 - binding: ValidatingAdmissionPolicyBinding のリソース名 - expressionIndex: ValidatingAdmissionPolicy 内の失敗した検証のインデックス - validationActions: 検証の失敗に対して実施された適用アクション。監査アノテーションの例: "validation.policy.admission.k8s.io/validation_failure": "[{"message": "Invalid value", {"policy": "policy.example.com", {"binding": "policybinding.example.com", {"expressionIndex": "1", {"validationActions": ["Audit"]}]"

クライアントは、認識されない値を無視して追加の値を処理することを想定する必要があります。

"Deny" と "Warn" を一緒に使用することはできません。API レスポンスボディーと HTTP 警告ヘッダーで検証の失敗が余計に重複するためです。

必須。

6.1.2. .spec.matchResources

説明
MatchResources は、一致基準を満たしているかどうかに基づいて、オブジェクトに対してアドミッションコントロールポリシーを実行するかどうかを決定します。除外ルールは包含ルールよりも優先されます (リソースが両方に一致する場合は除外されます)。
object
プロパティー説明

excludeResourceRules

array

ExcludeResourceRules は、ValidatingAdmissionPolicy で考慮しないリソース/サブリソースに対する操作を表します。除外ルールは包含ルールよりも優先されます (リソースが両方に一致する場合は除外されます)。

excludeResourceRules[]

object

NamedRuleWithOperations は、ResourceNames を持つ操作とリソースのタプルです。

matchPolicy

string

matchPolicy は、"MatchResources" リストを使用して受信リクエストを照合する方法を定義します。許可される値は "Exact" または "Equivalent" です。

- Exact: 指定されたルールにリクエストが完全に一致する場合にのみ、リクエストを一致させます。たとえば、apps/v1、apps/v1beta1、extensions/v1beta1 を介してデプロイメントを変更できても、"rules" に含まれているのが apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"] だけである場合、apps/v1beta1 または extensions/v1beta1 へのリクエストは ValidatingAdmissionPolicy に送信されません。

- Equivalent: 別の API グループまたはバージョンを介してでも、ルールにリストされているリソースを変更する場合に、リクエストを一致させます。たとえば、apps/v1、apps/v1beta1、extensions/v1beta1 を介してデプロイメントを変更でき、"rules" に含まれているのが apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"] だけである場合、apps/v1beta1 または extensions/v1beta1 へのリクエストは、apps/v1 に変換され、ValidatingAdmissionPolicy に送信されます。

デフォルトは "Equivalent" です。

使用可能な列挙値: - "Equivalent" は、ルールにリストされているリソースを別の API グループまたはバージョン経由で変更する場合、リクエストが Webhook に送信される必要があることを意味します。- "Exact" は、リクエストが特定のルールに正確に一致する場合にのみ Webhook に送信されることを意味します。

namespaceSelector

LabelSelector

NamespaceSelector は、オブジェクトの namespace がセレクターと一致するかどうかに基づいて、オブジェクトに対してアドミッションコントロールポリシーを実行するかどうかを決定します。オブジェクト自体が namespace である場合、object.metadata.labels に対して照合が実行されます。オブジェクトがクラスタースコープの別のリソースである場合、ポリシーはスキップされません。

たとえば、"0" または "1" の "runlevel" に関連付けられていない namespace のオブジェクトに対して Webhook を実行するには、"namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] } のようにセレクターを設定します。

代わりに、"prod" または "staging" の "environment" に関連付けられている namespace のオブジェクトに対してのみポリシーを実行する場合は、"namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] } のようにセレクターを設定します。

ラベルセレクターのその他の例は、https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ を参照してください。

デフォルトは空の LabelSelector で、すべてに一致します。

objectSelector

LabelSelector

ObjectSelector は、オブジェクトに一致するラベルがあるかどうかに基づいて検証を実行するかどうかを決定します。objectSelector は、cel 検証に送信される oldObject と newObject の両方に対して評価され、いずれかのオブジェクトがセレクターに一致する場合、一致すると見なされます。null オブジェクト (create の場合は oldObject、delete の場合は newObject) またはラベルを持つことができないオブジェクト (DeploymentRollback または PodProxyOptions オブジェクトなど) は一致するとは見なされません。エンドユーザーはラベルを設定することでアドミッション Webhook をスキップできるため、Webhook がオプトインの場合にのみオブジェクトセレクターを使用してください。デフォルトは空の LabelSelector で、すべてに一致します。

resourceRules

array

ResourceRules は、ValidatingAdmissionPolicy で照合する、リソース/サブリソースに対する操作を表します。ポリシーは、操作が いずれか のルールに一致する場合、その操作を考慮します。

resourceRules[]

object

NamedRuleWithOperations は、ResourceNames を持つ操作とリソースのタプルです。

6.1.3. .spec.matchResources.excludeResourceRules

説明
ExcludeResourceRules は、ValidatingAdmissionPolicy で考慮しないリソース/サブリソースに対する操作を表します。除外ルールは包含ルールよりも優先されます (リソースが両方に一致する場合は除外されます)。
array

6.1.4. .spec.matchResources.excludeResourceRules[]

説明
NamedRuleWithOperations は、ResourceNames を持つ操作とリソースのタプルです。
object
プロパティー説明

apiGroups

array (string)

APIGroups は、リソースが属する API グループです。'' はすべてのグループです。もしも '' が存在する場合、スライスの長さは 1 でなければなりません。必須。

apiVersions

array (string)

APIVersions は、リソースが属する API バージョンです。'' はすべてのバージョンです。もしも '' が存在する場合、スライスの長さは 1 でなければなりません。必須。

operations

array (string)

操作は、アドミッションフックが気にする操作です - これらすべての操作および追加される将来のアドミッション操作に対して、CREATE、UPDATE、DELETE、CONNECT、または*。'*' が存在する場合、スライスの長さは 1 でなければなりません。必須。

resourceNames

array (string)

ResourceNames は、ルールが適用される名前のオプションのホワイトリストです。空のセットは、すべてが許可されていることを意味します。

resources

array (string)

リソースは、このルールが適用されるリソースのリストです。

例: 'Pod' は Pod を意味します。'pods/log' は、Pod のログサブリソースを意味します。'' はすべてのリソースを意味しますが、サブリソースは意味しません。'pods/' は、Pod のすべてのサブリソースを意味します。'/scale' は、すべてのスケールサブリソースを意味します。'/*' は、すべてのリソースとそのサブリソースを意味します。

ワイルドカードが存在する場合、検証ルールはリソースが互いに重複しないことを保証します。

囲んでいるオブジェクトによっては、サブリソースが許可されない場合があります。必須。

scope

string

scope は、このルールのスコープを指定します。有効な値は、"Cluster"、"Namespaced"、および "" "クラスター" とは、クラスタースコープのリソースのみがこのルールに一致することを意味します。名前空間 API オブジェクトはクラスタースコープです。"Namespaced" は、名前空間付きのリソースのみがこのルールに一致することを意味します。"" は、スコープの制限がないことを意味します。サブリソースは、親リソースのスコープと一致します。デフォルトは "*" です。

6.1.5. .spec.matchResources.resourceRules

説明
ResourceRules は、ValidatingAdmissionPolicy で照合する、リソース/サブリソースに対する操作を表します。ポリシーは、操作が いずれか のルールに一致する場合、その操作を考慮します。
array

6.1.6. .spec.matchResources.resourceRules[]

説明
NamedRuleWithOperations は、ResourceNames を持つ操作とリソースのタプルです。
object
プロパティー説明

apiGroups

array (string)

APIGroups は、リソースが属する API グループです。'' はすべてのグループです。もしも '' が存在する場合、スライスの長さは 1 でなければなりません。必須。

apiVersions

array (string)

APIVersions は、リソースが属する API バージョンです。'' はすべてのバージョンです。もしも '' が存在する場合、スライスの長さは 1 でなければなりません。必須。

operations

array (string)

操作は、アドミッションフックが気にする操作です - これらすべての操作および追加される将来のアドミッション操作に対して、CREATE、UPDATE、DELETE、CONNECT、または*。'*' が存在する場合、スライスの長さは 1 でなければなりません。必須。

resourceNames

array (string)

ResourceNames は、ルールが適用される名前のオプションのホワイトリストです。空のセットは、すべてが許可されていることを意味します。

resources

array (string)

リソースは、このルールが適用されるリソースのリストです。

例: 'Pod' は Pod を意味します。'pods/log' は、Pod のログサブリソースを意味します。'' はすべてのリソースを意味しますが、サブリソースは意味しません。'pods/' は、Pod のすべてのサブリソースを意味します。'/scale' は、すべてのスケールサブリソースを意味します。'/*' は、すべてのリソースとそのサブリソースを意味します。

ワイルドカードが存在する場合、検証ルールはリソースが互いに重複しないことを保証します。

囲んでいるオブジェクトによっては、サブリソースが許可されない場合があります。必須。

scope

string

scope は、このルールのスコープを指定します。有効な値は、"Cluster"、"Namespaced"、および "" "クラスター" とは、クラスタースコープのリソースのみがこのルールに一致することを意味します。名前空間 API オブジェクトはクラスタースコープです。"Namespaced" は、名前空間付きのリソースのみがこのルールに一致することを意味します。"" は、スコープの制限がないことを意味します。サブリソースは、親リソースのスコープと一致します。デフォルトは "*" です。

6.1.7. .spec.paramRef

説明
ParamRef は、ポリシーバインディングによって適用されるルールの式への入力として使用するパラメーターを検索する方法を表します。
object
プロパティー説明

name

string

name は、参照されるリソースの名前です。

name または selector のいずれかを設定する必要があります。ただし、nameselector は相互に排他的なプロパティーです。一方が設定されている場合、もう一方を設定解除する必要があります。

name フィールドを設定し、selector を空白のままにして、paramKind が namespace スコープの場合は namespace を設定することで、すべてのアドミッションリクエストに使用される単一のパラメーターを設定できます。

namespace

string

namespace は、参照されるリソースの namespace です。パラメーターの検索を特定の namespace に制限できます。name フィールドと selector フィールドの両方に適用されます。

ポリシーで namespace スコープの paramKind を指定し、このフィールドを空のままにしておくと、namespace ごとのパラメーターを使用できます。

- paramKind がクラスタースコープの場合、このフィールドを設定解除する必要があります。このフィールドを設定すると、設定エラーが発生します。

- paramKind が namespace スコープの場合、このフィールドが設定されていないと、アドミッションのために評価されるオブジェクトの namespace が使用されます。これを空のままにすると、バインディングがクラスタースコープのリソースと一致しなくなり、エラーが発生するので注意してください。

parameterNotFoundAction

string

parameterNotFoundAction は、リソースが存在し、name または selector が有効であるが、バインディングに一致するパラメーターがない場合のバインディングの動作を制御します。値を Allow に設定すると、一致するパラメーターがない場合、バインディングによって検証が成功したものとして扱われます。Deny に設定すると、一致したパラメーターがポリシーの failurePolicy の対象になりません。

許可される値は Allow または Deny です。

必須

selector

LabelSelector

selector を使用すると、ラベルに基づいて複数のパラメーターオブジェクトを一致させることができます。ParamKind のすべてのリソースに一致させるには、selector: {} を指定します。

複数のパラメーターが見つかった場合、それらはすべてポリシー式で評価され、結果が AND 演算されます。

name または selector のいずれかを設定する必要があります。ただし、nameselector は相互に排他的なプロパティーです。一方が設定されている場合、もう一方を設定解除する必要があります。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.