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

この記事は、 Tenable One Cloud Exposure でのアドミッションコントローラーポリシーの構成に関するハウツーガイドです。

アドミッションコントローラーポリシーの完全なリストについては、[Admission Controller Policies] (アドミッションコントローラーポリシー) ページを参照してください。このページでは、ポリシーの詳細の確認や アドミッションコントローラーポリシーの設定を行うことができます。

The Admission Controller Policies page, listing policies with their effect, status, and last violation

ポリシーを管理するには

  1. クラウドサイバーエクスポージャー コンソールで、[ポリシー] > [アドミッションコントローラーポリシー] に移動します。
  2. [組織] ドロップダウンで アカウント階層とフォルダー を選択して、アカウントの特定のサブセットのポリシーを表示および管理します。デフォルトでは、組織全体 (すべてのアカウント) が選択されています。
  3. ポリシーをクリックすると、詳細情報を含むスライド式パネルが開きます。
  4. 設定するポリシーを見つけて、三点リーダーメニュー Three dots menu iconをクリックします。次のポリシー管理アクティビティを実行できます。
    • アドミッションコントローラーポリシーの設定 (以下が含まれます):
      • ポリシーを有効または無効にします。
      • 違反の影響の設定
      • ポリシーパラメーターの編集
    • イベント。これにより、Kubernetes アドミッションコントローラーイベントページが開き、そのポリシーの違反ログのみが表示されるようフィルタリングされます。

アドミッションコントローラーポリシーの設定

The General - Allowed repositories policy, with its status and effect options

デフォルトでは、新しいアドミッションコントローラーポリシーは無効になっています。ポリシーを有効にすると、アカウント階層とフォルダー内に存在する、アドミッションコントローラーのインストールクラスタにのみそのポリシーが適用されます。

また、違反が発生した場合の各ポリシーの違反の影響も設定することができます。

アドミッションコントローラーポリシーを有効にして設定する方法

  1. クラウドサイバーエクスポージャー コンソールで、[ポリシー] > [アドミッションコントローラーポリシー] をクリックします。
  2. 設定するポリシーを見つけて、三点リーダーメニュー Three dots menu icon [編集] をクリックします。
  3. [全般] タブで、[ステータス] を [有効] に設定します。
  4. [Violation Effect] (違反の影響) で、ポリシー違反があった場合の動作を選択します。
    1. コピー
      アクション**を拒否します**。 
    2. コピー
      アクションを許可するが、 **アラート**を受け取る。違反アラートは、[ [Admission Controller Events] (アドミッションコントローラーイベント) ページ](/v1/docs/ja/kubernetes-admission-controller-events)に表示されます。
  5. [パラメーター] タブで、ポリシーパラメーターを設定します。各ポリシーで、設定できるパラメーターは異なります。各ポリシーの詳細については、 アドミッションコントローラーポリシーリスト を参照してください。
  6. [保存] をクリックします。
    有効なポリシーは、 アドミッションコントローラーのインストールクラスタにのみ適用されます。

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

このセクションでは、Tenable がサポートするアドミッションコントローラーポリシーの概要と、それぞれで利用可能な設定可能なパラメーターについて説明します。アドミッションコントローラーポリシーを使用すると、Kubernetes リソースに対して固有のコントロールを調整し、デプロイメントをセキュリティとコンプライアンス要件に合わせることができます。

ポリシー名 検証タイプ 説明 パラメーター
脆弱なコンテナイメージ 全般 既知の脆弱性のあるコンテナイメージを使用する Kubernetes ワークロードについてアラートまたはブロックします。このポリシーは、アドミッション時に Tenable Cloud Workload Protection のスキャン結果に照らしてイメージを評価します。完全な設定の詳細については、「 脆弱なコンテナイメージを参照してください。 「 脆弱なコンテナイメージ Settings」を参照してください。
許可されたリポジトリ 一般 コンテナイメージは、許可されたリポジトリのパターンと一致する必要があります。 許可されたリポジトリ: 使用できるリポジトリのパターン。このリストのパターンに一致しないリポジトリが使用されている場合、ポリシー違反になります。
Pod のサービスアカウントトークンの自動マウント 全般 automountServiceAccountToken を false に設定しても、ポッドがサービスアカウントトークンを自動的にマウントしないようにします。 設定可能なパラメーターなし
ブロックエンドポイント編集デフォルトロール 全般 デフォルトのロールがエンドポイントリソースへの編集または書き込みアクセス権を付与しないようにする必要があります。 設定可能なパラメーターなし
NodePort のブロック 全般 クラスタ内のすべてのノードの静的ポートでワークロードを公開する NodePort タイプをサービスで使用しないようにする必要があります。 設定可能なパラメーターなし
サービスアカウントの更新をブロックする 全般 ポッドの作成後にポッドのサービスアカウントを変更できない必要があります。 設定可能なパラメーターなし
ワイルドカードイングレスのブロック 全般 ワイルドカード (*) サブドメインを使用しない、ホストを空白のままにする、または完全に省略するには、イングレスホスト定義が必要です。これらの設定により、サービスが意図しないトラフィックや不正なトラフィックに応答する可能性があります。 設定可能なパラメーターなし
コンテナイメージにはダイジェストが必要です 全般 コンテナイメージには、ダイジェストが必要です。 設定可能なパラメーターなし
匿名アクセスを許可しない 全般 ロール/クラスターロールをユーザーまたはsystem:unauthenticatedグループsystem:anonymous関連付けないようにする必要があります。 設定可能なパラメーターなし
対話的な TTY コンテナを許可しない 全般 tty と stdin の両方を true に設定して、コンテナで対話的な TTY セッションが有効にならないようにする必要があります。コンテナへのインタラクティブなシェルアクセスを防ぐために、これらのフィールドは false に設定するか、設定せずににしておく必要があります。 設定可能なパラメーターなし
許可されていないリポジトリ 一般 コンテナイメージは、許可されていないリポジトリのパターンと一致しない必要があります。 許可されていないリポジトリ: 使用できないリポジトリ。このリストのパターンに一致するリポジトリが使用されている場合、ポリシー違反になります。
外部 IP 全般 サービスに許可された外部 IP リストの外部 IP のみを含める必要があります。 許可された IP アドレスのコンマ区切りリスト
HTTPS のみ 全般 イングレスリソースは HTTPS 経由のみでサービスを公開する必要があります。これにより、トラフィックの暗号化が保証され、暗号化されていない HTTP 経由の偶発的なエクスポージャーを防止できます。 TLS が必要
必須ラベル 一般 リソースタイプリストのリソースには、指定されたラベルと、必要なラベルリストのキーと値が含まれている必要があります。
  • リソースタイプ: 強制されるリソースタイプ。
  • 必須ラベル: 特定のリソースタイプで使用する必要があるラベル。選択したリソースタイプに必須ラベルがない場合、ポリシー違反となります。
必須の要求と制限の範囲 全般 コンテナにはリソースリクエストと制限が定義されている必要があります。制限やリクエストに対して指定する必要があるリソースタイプ (CPU、 メモリ) を設定可能。オプションで、リソース制限とリクエストの最大値を適用します。

必要な制限:

  • CPU: CPU の最大制限
  • メモリ: メモリの最大制限

必要なリクエスト:

  • CPU: CPU の最大制限
  • メモリ: メモリの最大制限
許可されたユーザー ポッドセキュリティ標準 コンテナは、対応するパラメーターリストから該当する runAsUser、runAsGroup、supplementalGroups、または fsGroup を指定する必要があります。詳細は、ドキュメントKubernetesを参照してください。
  • 許可されたユーザー
  • 許可されたグループ
  • 許可された F5 グループ
  • 許可された補助グループ
AppArmor ポッドセキュリティ標準 使用が許可されている AppArmor プロファイルコンテナを制御します。AppArmor プロファイルがないと、コンテナはホスト上のファイル、ネットワークソケット、Linux 機能に無制限にアクセスでき、侵害されたコンテナが機密ファイルを読み取ったり、不正なネットワーク接続を確立したり、意図した範囲を超えて権限を昇格したりする可能性があります。
  • 許可されるプロファイル: 許可されるプロファイルタイプ: RuntimeDefault、Localhost、Unconfined。
  • 許可されるローカルホストプロファイル: ローカルホストが選択されたプロファイルである場合にのみ使用できます。任意のローカルホストプロファイルに対して * を使用します。
ホスト プロセス ID 名前空間を共有するコンテナー ポッドセキュリティ標準 コンテナの [ hostPID ] フィールドは、 true に設定してはなりません。詳細は、ドキュメントKubernetesを参照してください。 設定可能なパラメーターなし
ホスト IPC 名前空間の共有を希望するコンテナ ポッドセキュリティ標準 コンテナの [ hostPID ] フィールドは、 true に設定してはなりません。詳細は、ドキュメントKubernetesを参照してください。 設定可能なパラメーターなし
ホストネットワークの名前空間の共有を希望するコンテナ ポッドセキュリティ標準 コンテナの [ hostNetwork ] フィールドは、 true に設定してはなりません。詳細は、ドキュメントKubernetesを参照してください。 設定可能なパラメーターなし
allowPrivilegeEscalation のあるコンテナ ポッドセキュリティ標準 コンテナの [ allowPrivilegeEscalation ] フィールドを false に設定する必要があります。詳細は、ドキュメントKubernetesを参照してください。 設定可能なパラメーターなし
許可されていない機能を持つコンテナ ポッドセキュリティ標準 コンテナには許可された機能リストの機能のみを含め、削除する機能リストのすべての機能を削除する必要があります。詳細は、ドキュメントKubernetesを参照してください。
  • 許可されている機能: コンテナが持つことができる機能。
  • 削除する機能: コンテナーから削除する必要がある機能。
許可されていないタグ ポッドセキュリティ標準 コンテナイメージでは、許可されていないタグリストのタグを使用しないようにします。詳細は、ドキュメントKubernetesを参照してください。 タグのコンマ区切りリスト。
ホストファイルシステム ポッドセキュリティ標準 明示的に許可されたホストファイルシステムパスのみをマウントするようにポッドを制限します。無制限の hostPath ボリュームにより、コンテナは kubelet 認証情報、コンテナランタイムソケット、クラウドプロバイダートークンなどの機密性の高いノードファイルに直接アクセスできるため、侵害されたコンテナは分離を逃れ、基盤となるノードを危険にさらす可能性があります。 許可されたホストパス: ポッドがマウントできるホストパスのプレフィックス。すべての hostPath ボリュームは、これらのプレフィックスの 1 つで始める必要があります。一致では、プレフィックスとパスセグメントが考慮され、最も具体的な一致プレフィックスが優先されます。ポリシーが空のリストで有効になっている場合、すべての hostPath ボリュームがブロックされます。各プレフィックスは読み取り専用に設定でき、パスをマウントするすべてのコンテナーが読み取り専用としてマウントを宣言する必要があります。
読み取り専用ルートファイルシステム ポッドセキュリティ標準 readOnlyRootFilesystem を true に設定することにより、コンテナを読み取り専用のルートファイルシステムで実行する必要があります。 設定可能なパラメーターなし
特権コンテナ ポッドセキュリティ標準 コンテナの [privileged] フィールドは、true に設定してはなりません。詳細は、ドキュメントKubernetesを参照してください。 設定可能なパラメーターなし
ルートコンテナ ポッドセキュリティ標準 [ runAsNonRoot ] フィールドを true として定義するか、 runAsUser を 0 以外の任意の値として定義することで、コンテナを非ルートにしておく必要があります。詳細は、ドキュメントKubernetesを参照してください。 設定可能なパラメーターなし
Seccomp ポッドセキュリティ標準 使用が許可されている seccomp プロファイルコンテナを制御します。seccompプロファイルがないと、コンテナが無制限のLinuxカーネルsyscallを実行し、侵害されたコンテナがカーネルの脆弱性を悪用したり、ファイルシステムのマウントや他のプロセスのトレースといった危険な操作を実行したりする可能性があります。
  • 許可されたプロファイル: 許可されるプロファイルタイプ: RuntimeDefault、Localhost、Not configured、Unconfined。空のリストはすべてのワークロードをブロックします。
  • 許可されたローカルホストファイル: ローカルホストが選択されたプロファイルである場合にのみ使用できます。ファイル名の動的リスト。すべてのファイルを許可するには * を使用します。
ホストネットワーキングポート ポッドセキュリティ標準 ホストネットワークの使用時にコンテナをバインドさせる可能性のあるホストポートを制限します。無制限のホストポートバインディングにより、コンテナはノード上の特権ポートまたは予約済みポートを直接リッスンし、ポッドネットワークの分離をバイパスできます。 最小ポート 最大ポート
FlexVolume ポッドセキュリティ標準 Pod で使用できる FlexVolume ドライバーを制限します。FlexVolumeドライバーは、昇格した権限で実行されるノードに直接インストールされる実行可能ファイルです。承認されていないドライバーを許可すると、ポッドが任意のストレージバックエンドをマウントできるようになり、ノード上でデータが流出したり、悪意のあるコードが実行されたりする可能性があります。 許可された flex ボリュームドライバー: 各エントリは、 vendor/driver 形式の 1 つのドライバー文字列である必要があります。ワイルドカードは使用できません。リストが空の場合、FlexVolumeのすべての使用がブロックされます。
禁止されている sysctls ポッドセキュリティ標準 変更が許可されている Linux カーネルパラメーター (sysctls) ポッドを制御します。sysctl アクセスを無制限にすると、ポッドはネットワークスタックの挙動や IPC 制限など、ノード全体のカーネル設定を変更して、ノードを不安定にしたり、他のワークロードに影響を及ぼしたり、権限昇格を有効にしたりする可能性があります。 許可された sysctls: ポッドが設定できる sysctls。
ボリュームタイプ ポッドセキュリティ標準 Pod にマウントが許可されているボリュームのタイプを制限します。たとえば、 hostPath などのボリュームタイプはコンテナにノードファイルシステムへの直接アクセスを許可し、侵害されたコンテナが機密性の高いホストファイルを読み込んだり、コンテナの分離をエスケープしたりできるようにします。 ボリュームタイプ: ポッドが volumes.specで設定できるボリュームタイプ。

脆弱なコンテナイメージ

脆弱なコンテナイメージアドミッションコントローラーポリシーを使用すると、既知の脆弱性を持つコンテナイメージを使用する Kubernetes ワークロードをアラートしたりブロックしたりできます。Kubernetes アドミッションレイヤーで Tenable Cloud Workload Protection (CWP) のスキャンデータと統合することにより、脆弱なイメージがクラスターに到達する前に、ポリシーはデプロイ時に脆弱性ゲートを強制します。

注意: このポリシーは、デフォルトでは無効になっています。

前提条件

このポリシーを有効にする前に、以下を確認してください。

  • クラウドサイバーエクスポージャー アドミッションコントローラーがターゲットクラスタにデプロイされます。
  • Tenable Kubernetes Helm チャートバージョン 1.1.6 以降がインストールされており、アドミッションコントローラーにクラスタのシークレットに対する読み取りアクセス許可があります。
  • アドミッションコントローラーポッドは、シークレットアクセスを有効にしてデプロイされます (--set admissionController.readSecrets=true)。
  • アドミッションコントローラーポッドには、コンテナレジストリへのネットワーク接続があります。
  • KubernetesClusterConnectorRead アクセス許可があります。

また、コンテナ コンテナイメージ CI/CD パイプラインの接続 またはアウトポスト/センサーベースのスキャンを設定し、コンテナイメージをアクティブにスキャンすることも Tenable では推奨しています。ポリシーが機能するためにスキャンカバレッジを必要としませんが、スキャン結果のないイメージは未スキャンとして扱われます。ポリシーがそれらのイメージを処理する方法を制御するには、 [Trust Unscanned Container Images] 設定 を参照してください。

脆弱なコンテナイメージの仕組み

ワークロードがクラスタに送信 (Create または Update) されると、アドミッションコントローラーはリクエストをインターセプトし、各コンテナイメージを評価します。このポリシーは、cronjobs、daemonsets、deployments、jobs、replicasets、statefulsets、deploymentconfigs、podsのワークロードタイプに適用されます。

コンテナイメージごとに、アドミッションコントローラーは次の操作を実行します。

  1. レジストリからイメージダイジェストを解決します。
  2. そのダイジェストの最新のスキャン結果を Tenable CWP から取得します。
  3. スキャンが設定された最大経過時間内にあるかどうか、およびイメージに設定された深刻度しきい値以上の脆弱性が含まれているかどうかをチェックします。除外された CVE パターンに一致する脆弱性は無視します。
  4. 違反が検出された場合に、構成した効果を適用します。
    • [Deny]: デプロイはブロックされ、エラー メッセージを返します。
    • アラート: デプロイメントが続行され、アドミッション制御イベントが記録されます。

30 秒後に評価がタイムアウトすると、ポリシーはオープンに失敗します。デプロイメントは許可され、調査のためにタイムアウトイベントが記録されます。

注意: すでに本番環境で実行されているワークロードの場合、ポリシーは自動的に [拒否] から [アラート] にフォールバックします。

脆弱なコンテナイメージの有効化

ポリシーを有効にするには

  1. クラウドサイバーエクスポージャー コンソールで、[ポリシー] > [アドミッションコントローラーポリシー] に移動します。
  2. [一般 - 脆弱なコンテナイメージ] という名前のポリシーを見つけて、三点リーダーメニューをクリックして、[編集] をクリックします。
  3. [ステータス] で、[有効] を選択します。
  4. [詳細設定] を展開し、[効果] で次のいずれかを選択します。
    • アラート: アドミッションコントローラーはデプロイを許可し、警告イベントを記録します。
    • Deny: アドミッションコントローラーがデプロイメントをブロックします。
      Tenable では、 Alert から始めて、 拒否に切り替える前に少しだけ実行することを推奨しています。
  5. (オプション)[Parameters] (パラメーター) パネルで、[Container Image Validation] (コンテナイメージの検証 ) を展開して、「 Vulnerable Container Images Settings」で説明されている設定を構成します。
  6. (オプション)[除外] を展開して、コンテナイメージの URL または CVE パターンの除外を設定します。
  7. [保存] をクリックします。
注意: 選択した範囲内のすべてのクラスタに適用されてから、最大 5 分かかります。

脆弱性のあるコンテナイメージの設定

次の設定は、[コンテナイメージの検証] で利用できます。

設定 デフォルト Description (説明)
脆弱性の最小深刻度 高 違反の深刻度しきい値。このレベル以上の脆弱性を含むイメージが、設定された効果をトリガーします。オプション: 重大、高、中、低。
脆弱性スキャンの最大経過時間 (日数) 7 有効なスキャン結果の最大有効期間 (日数) このしきい値より古いスキャンは、未スキャンのイメージとして扱われます。有効範囲: 3 〜 14 日。
スキャンされていないコンテナイメージを信頼する オフ (未選択) ポリシーがスキャン結果のないイメージを処理する方法を制御します。オフを選択すると、スキャン結果のないイメージが違反として扱われます。選択すると、スキャン結果のない画像が通過します。

次の除外設定も利用できます。

設定 Description (説明)
除外されるコンテナイメージの URL パターン ポリシー評価から除外するイメージ URL の Glob または正規表現パターン。これらのパターンに一致するイメージは、脆弱性チェックをバイパスします。信頼できる内部イメージまたはインフラストラクチャコンポーネントには、この設定を使用します。
除外された CVE パターン ポリシー評価から除外する CVE 識別子の Glob または正規表現パターン。ポリシーがイメージを評価するときには、除外されたパターンに一致する脆弱性はカウントされません。設定された深刻度以上のすべての脆弱性が除外パターンに一致する場合、イメージはアドミッションをクラスターに渡します。この設定を使用して、評価して許可することを選択した特定の CVE を受け入れます。
注意: ポリシーが評価するイメージでは、除外された CVE はカウントされません。CVE は、環境内でのリスクを評価した後にのみ除外してください。

ポリシーの列データ

次の列は、[Admission Controller Policies] (アドミッションコントローラーポリシー) ページのテーブルに表示されます。ほとんどの列をテーブルのデータのフィルターにも使用できます。

フィルター 説明
名前 ポリシーの名前
コンプライアンス ポリシーのベンチマークにマッピングされるコンプライアンス標準とセキュリティのベストプラクティス。
効果

アドミッションコントローラーポリシーの設定が検出された場合の動作違反の影響には以下のものがあります。

  • 拒否: アドミッションコントローラーがアクションをブロックした。
  • [アラート]: アドミッションコントローラーはアクションを許可しますが、アラートをトリガーします。
ステータス ポリシーが アドミッションコントローラーポリシーの設定。ポリシーが有効である場合、違反アクションは違反の影響をトリガーします。
Last Violated 前回ポリシー違反があった日時。前回の違反の値をクリックすると、その特定のポリシーでフィルタリングされた [ アドミッションコントローラーイベント ] ページが開きます。これにより、ポリシーに違反したアクションをすべて表示できます。
Settings Three dots menu icon