6.4. カスタムポリシーの作成
デフォルトのポリシーを使用することに加えて、Red Hat Advanced Cluster Security for Kubernetes でカスタムポリシーを作成することもできます。
新しいポリシーを構築するには、既存のポリシーのクローンを作成するか、ゼロから新規ポリシーを作成します。
- RHACS ポータルの Risk ビューのフィルター条件をもとにポリシーを作成することもできます。
-
また、ポリシー基準に論理演算子ではなく
AND
、OR
およびNOT
を使用して高度なポリシーを作成することもできます。
6.4.1. システムポリシービューからのセキュリティーポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
システムポリシービューから新しいセキュリティーポリシーを作成できます。
手順
-
RHACS ポータルで、Platform Configuration
Policies に移動します。 - Create policy をクリックします。
Policy details セクションに、ポリシーに関する以下の情報を入力します。
- ポリシーの Name を入力します。
オプション: Attach notifiers セクションの下にある利用可能な Notifier から選択して、通知機能 をポリシーに割り当てることもできます。
注記アラートを転送する前に、Red Hat Advanced Cluster Security for Kubernetes を通知プロバイダー (Webhook、Jira、PagerDuty、Splunk など) と統合する必要があります。
-
このポリシーの 重大度 レベルを選択します (
Critical
、High
、Medium
、またはLow
のいずれか)。 - このポリシーに適用するポリシーの Categories を選択します。
- Description ボックスに、ポリシーの詳細を入力します。
- Rationale ボックスにポリシーが存在する理由についての説明を入力します。
- Guidance ボックスでこのポリシーの違反を解決するための手順を入力します。
オプション: MITRE ATT&CK セクションで、ポリシーに指定する tactics and the techniques を選択します。
- Add tactic をクリックし、ドロップダウンリストから調整を選択します。
- Add technique をクリックして、選択した戦略の手法を追加します。戦略には、複数の手法を指定できます。
- Next をクリックします。
Policy behavior セクションで、ポリシーの Lifecycle stages および Event sources(Runtime lifecycle only) を選択します。
Build、Deploy、または Runtimeポリシーを適用する Lifecycle Stages を選択します。複数のステージを選択できます。
- ビルド時ポリシーは、CVE や Dockerfile 手順などのイメージフィールドに適用されます。
- デプロイ時のポリシーにはすべてのビルドタイムポリシー条件を含めることができますが、特権モードで実行したり、Docker ソケットをマウントするなど、クラスター設定からのデータを含めることもできます。
- ランタイムポリシーには、すべてのビルド時およびデプロイ時のポリシー条件を含めることができますが、ランタイム時のプロセス実行に関するデータを含めることもできます。
Response method には、以下のいずれかを選択します。
- Inform (違反の一覧に違反を追加する)。
または Inform and enforce (アクションを適用する) を選択します。
ポリシーの適用動作を選択します。Lifecycle Stages の設定時に選択したステージでのみ使用できます。ON (有効化) を選択してポリシーを適用して違反を報告し、OFF (disable) を選択して違反を報告します。適用の振る舞いは、ライフサイクルの各ステージで異なります。
- Build: Red Hat Advanced Cluster Security for Kubernetes は、イメージがポリシーの条件に一致すると、継続的インテグレーション (CI) ビルドに失敗します。
- Deploy: Red Hat Advanced Cluster Security for Kubernetes は、ポリシーの条件に一致するデプロイの作成をブロックします。アドミッションコントローラーが適用されているクラスターでは、Kubernetes または OpenShift Container Platform サーバーがすべての非準拠のデプロイメントをブロックします。他のクラスターでは、Red Hat Advanced Cluster Security for Kubernetes が非準拠のデプロイメントを編集して、Pod がスケジュールされないようにします。
runtime: Red Hat Advanced Cluster Security for Kubernetes は、ポリシーの条件に一致するすべての Pod を強制終了するか、または Pod で実行されたアクションをブロックします。
警告ポリシーの適用は、実行中のアプリケーションまたは開発プロセスに影響を与える可能性があります。適用オプションを有効にする前に、すべての利害関係者に通知し、自動適用アクションに対応する方法を計画してください。
- Next をクリックします。
- Policy criteria セクションで、ポリシーをトリガーする属性を設定します。
- Next をクリックします。
Policy scope セクションで、以下を設定します。
- Add inclusion scope をクリックして、Restrict to Scope を使用し、特定のクラスター、namespace、またはラベルだけに、このポリシーを有効にします。複数のスコープを追加したり、namespaces とラベルの RE2 Syntax で正規表現を使用したりすることもできます。
- Add exclusion scope をクリックして Exclude by Scope を使用して、指定するデプロイメント、クラスター、namespace、およびラベルを除外するために、選択したエンティティーに対象のポリシーが適用されないことを意味します。複数のスコープを追加したり、namespaces とラベルの RE2 Syntax で正規表現を使用したりすることもできます。ただし、デプロイメントの選択に正規表現を使用することはできません。
Excluded Images (Build Lifecycle only) の場合は、違反をトリガーしないすべてのイメージを選択します。
注記Excluded Images 設定は、build ライフサイクルステージで継続的インテグレーションシステムでイメージを確認する場合にのみ適用されます。このポリシーを使用して、実行中のデプロイメント (Deploy ライフサイクルステージ) またはランタイムアクティビティー (Runtime ライフサイクルステージ) をチェックする場合、効果はありません。
- Next をクリックします。
- Review policy セクションで、ポリシー違反をプレビューします。
- Save をクリックします。
6.4.2. リスクビューからのセキュリティーポリシーの作成 リンクのコピーリンクがクリップボードにコピーされました!
リスク ビューで展開のリスクを評価しているときに、ローカルページフィルターリングを適用すると、使用しているフィルターリング基準をもとに新しいセキュリティーポリシーを作成できます。
手順
- RHACS ポータルに移動し、ナビゲーションメニューから Risk を選択します。
- ポリシーを作成するローカルページのフィルタリング条件を適用します。
- New Policy を選択し、必須フィールドに入力して新規ポリシーを作成します。
6.4.3. ポリシー基準 リンクのコピーリンクがクリップボードにコピーされました!
Policy criteria セクションで、ポリシーをトリガーするデータを設定できます。
以下の表に記載されている属性に基づいてポリシーを設定できます。
この表では、以下のようになります。
正規表現、AND、OR、および NOT 列は、特定の属性とともに正規表現およびその他の論理演算子を使用できるかどうかを示します。
-
Regular expressions 列の
!
は、リストされているフィールドに正規表現のみを使用できることを示しています。 -
AND、OR 列の
!
は、属性に前述の論理演算子のみを使用できることを示しています。
-
Regular expressions 列の
- RHACS バージョン 列は、属性を使用する必要がある Red Hat Advanced Cluster Security for Kubernetes のバージョンを示します。
論理組み合わせ演算子の
AND
およびOR
は、以下の属性には使用できません。-
ブール値:
true
およびfalse
最小値セマンティクス。たとえば、以下のようになります。
- 最小 RBAC パーミッション
- イメージ作成からの日数
-
ブール値:
NOT
論理演算子は、以下の属性に使用できません。-
ブール値:
true
およびfalse
-
<
、>
、<=
、>=
演算子など、比較をすでに使用している数値。 複数の値を指定できる複合基準。たとえば、以下のようになります。
- Dockerfile 行。命令と引数の両方が含まれます。
- 環境変数。名前と値の両方で設定されます。
- Add Capabilities、Drop Capabilities、Days since image was created、Days since image was last scanned などの他の意味。
-
ブール値:
セキュリティーポリシーの作成に論理演算子 AND
、OR
、NOT
を使用するには、Red Hat Advanced Cluster Security for Kubernetes バージョン 3.0.45 以降が必要です。ただし、以前のバージョンでは、正規表現の列に記載されているフィールドに 正規表現 を使用できます。
属性 | 説明 | RHACS バージョン | 正規表現 | NOT | AND, OR | フェーズ |
---|---|---|---|---|---|---|
Namespace | namespace の名前。 | 3.0.51 以降 | ✓ | ✓ | ✓ | デプロイ |
Image Registry | イメージレジストリーの名前。 | すべて | ✓ | ✓ | ✓ | デプロイ |
Image Remote |
| すべて | ✓ | ✓ | ✓ | デプロイ |
Image Tag | イメージの識別子。 | すべて | ✓ | ✓ | ✓ | デプロイ |
Days since image was created | イメージ作成日からの日数。 | すべて | ✕ | ✕ | ✕ | ビルド |
Days since image was last scanned | 最後のイメージスキャンからの日数。 | すべて | ✕ | ✕ | ✕ | ビルド |
Dockerfile Line | 命令と引数の両方を含む、Dockerfile の特定の行。 | すべて | ! 値のみ | ✕ | ✓ | ビルド |
Image is NOT Scanned | イメージにはスキャンデータは利用できません。 | すべて | ✕ | ✕ | ✕ | ビルド |
CVSS |
Common Vulnerability Scoring System は、スコアが | すべて | ✕ | ✕ | ✓ | ビルド |
Fixed By | イメージのフラグ付きの脆弱性を修正するパッケージのバージョン文字列。 | すべて | ✓ | ✓ | ✓ | ビルド |
CVE | Common Vulnerabilities and Exposures。特定の CVE 番号で使用。 | すべて | ✓ | ✓ | ✓ | ビルド |
Image Component | イメージに存在する特定のソフトウェアコンポーネントの名前とバージョン番号。 | すべて | ✓ | ✕ | ✓ | ビルド |
Image OS | イメージのベースオペレーティングシステムの名前およびバージョン番号。 | 3.0.47 以降 | ✓ | ✓ | ✓ | ビルド |
Environment Variable | 名前または値で環境変数を確認します。 | すべて | ! キーと値のみ | ✕ | ✓ | デプロイ |
Disallowed Annotation | 指定された環境の Kubernetes リソースには存在できないアノテーション。 | すべて | ✓ | ✕ | ✓ | デプロイ |
Disallowed Image Label |
使用されていない Docker イメージラベルの有無を確認します。このポリシーは、デプロイメントのイメージに指定されたラベルがある場合にトリガーされます。 | 3.0.40 以降 | ✓ | ✕ | ✓ | デプロイ |
Required Image Label |
必要な Docker イメージラベルが存在することを確認します。このポリシーは、デプロイメントのイメージに指定されたラベルがない場合にトリガーされます。 | 3.0.40 以降 | ✓ | ✕ | ✓ | デプロイ |
Required Label | Kubernetes で必要なラベルが存在するかどうかを確認します。 | すべて | ✓ | ✕ | ✓ | デプロイ |
Required Annotation | Kubernetes に必要なアノテーションの有無を確認します。 | すべて | ✓ | ✕ | ✓ | デプロイ |
Volume Name | ストレージの名前。 | すべて | ✓ | ✓ | ✓ | デプロイ |
Volume Source |
ボリュームがプロビジョニングされるフォームを示します。たとえば、 | すべて | ✓ | ✓ | ✓ | デプロイ |
Volume Destination | ボリュームがマウントされるパス。 | すべて | ✓ | ✓ | ✓ | デプロイ |
Volume Type | ボリュームの種別を設定します。 | すべて | ✓ | ✓ | ✓ | デプロイ |
Writable Volume | 書き込み可能な状態でマウントされるボリューム。 | すべて | ✕ | ✕ | ✕ | デプロイ |
Protocol | 公開されるポートによって使用される TCP や UDP などのプロトコル。 | すべて | ✓ | ✓ | ✓ | デプロイ |
Port | デプロイメントによって公開されるポート番号。 | すべて | ✕ | ✓ | ✓ | デプロイ |
Privileged | 特権付きの実行デプロイメント。 | すべて | ✕ | ✕ | ✕ | デプロイ |
Read-Only Root Filesystem | root ファイルシステムで読み取り専用として設定したコンテナー。 | すべて | ✕ | ✕ | ✕ | デプロイ |
Drop Capabilities |
コンテナーからドロップする必要がある Linux 機能。たとえば、 | すべて | ✕ | ✕ | ✓ | デプロイ |
Add Capabilities | Raw パケットを送信したり、ファイルパーミッションをオーバーライドする機能など、コンテナーには追加できない Linux 機能。 | すべて | ✕ | ✕ | ✓ | デプロイ |
プロセス名 | デプロイメントで実行されるプロセスの名前。 | すべて | ✓ | ✓ | ✓ | ランタイム |
Process Ancestor | デプロイメントで実行されるプロセスの親プロセスの名前。 | すべて | ✓ | ✓ | ✓ | ランタイム |
Process Arguments | デプロイメントで実行されるプロセスのコマンド引数。 | すべて | ✓ | ✓ | ✓ | ランタイム |
Process UID | デプロイメントで実行されるプロセスの UNIX ユーザー ID。 | すべて | ✕ | ✓ | ✓ | ランタイム |
Port Exposure | ロードバランサーやノードポートなど、サービスの公開方法。 | すべて | ✕ | ✓ | ✓ | デプロイ |
Service Account | サービスアカウントの名前 | すべて | ✓ | ✓ | ✓ | デプロイ |
Writable Host Mount | リソースが、書き込みパーミッションのあるホストにパスをマウントしている。 | すべて | ✕ | ✕ | ✕ | デプロイ |
Unexpected Process Executed | デプロイメントにあるロックされたプロセスベースラインで、プロセス実行が一覧表示されていないデプロイメントを確認します。 | すべて | ✕ | ✕ | ✕ | ランタイム |
Minimum RBAC Permissions |
デプロイメントの Kubernetes サービスアカウントに、指定のレベル以上 ( | すべて | ✕ | ✓ | ✕ | デプロイ |
Container Name | コンテナーの名前。 | 3.0.52 以降 | ✓ | ✓ | ✓ | デプロイ |
Container CPU Request | 特定のリソース用に予約されているコア数を確認します。 | すべて | ✕ | ✕ | ✓ | デプロイ |
Container CPU Limit | リソースが使用できるコアの最大数を確認します。 | すべて | ✕ | ✕ | ✓ | デプロイ |
Container Memory Request | 特定のリソース用に予約されているメモリー量を確認します。 | すべて | ✕ | ✕ | ✓ | デプロイ |
Container Memory Limit | リソースが使用できるメモリーの最大量を確認します。 | すべて | ✕ | ✕ | ✓ | デプロイ |
Kubernetes Action |
| 3.0.55 以降 | ✕ | ✕ |
! | ランタイム |
Kubernetes Resource |
| 3.63 以降 | ✕ | ✕ |
! | ランタイム |
Kubernetes Resource Name | アクセスされた Kubernetes リソースの名前。 | 3.63 以降 | ✓ | ✓ |
! | ランタイム |
Kubernetes API Verb |
| 3.63 以降 | ✕ | ✕ |
! | ランタイム |
Kubernetes User Name | リソースにアクセスしたユーザーの名前。 | 3.63 以降 | ✓ | ✓ |
! | ランタイム |
Kubernetes User Group | リソースにアクセスしたユーザーが属するグループの名前。 | 3.63 以降 | ✓ | ✕ |
! | ランタイム |
User Agent |
ユーザーがリソースへのアクセスに使用したユーザーエージェント。例: | 3.63 以降 | ✓ | ✓ |
! | ランタイム |
Source IP Address | ユーザーがリソースにアクセスした IP アドレス。 | 3.63 以降 | ✓ | ✓ |
! | ランタイム |
Is Impersonated User | サービスアカウントまたは他のアカウントで権限を偽装ユーザーによって要求が行われたかどうかを確認します。 | 3.63 以降 | ✕ | ✕ | ✕ | ランタイム |
Runtime Class | デプロイメントの RuntimeClass。 | 3.67 以降 | ✓ | ✓ | ✓ | デプロイ |
Automount Service Account Token | デプロイメント設定がサービスアカウントトークンを自動的にマウントするかどうかを確認します。 | 3.68 以降 | ✕ | ✕ | ✕ | デプロイ |
Liveness Probe | コンテナーが liveness プローブを定義するかどうか。 | 3.69 以降 | ✕ | ✕ | ✕ | デプロイ |
Readiness Probe | コンテナーが readiness プローブを定義するかどうか。 | 3.69 以降 | ✕ | ✕ | ✕ | デプロイ |
Replicas | デプロイメントレプリカの数。 | 3.69 以降 | ✕ | ✓ | ✓ | デプロイ |
Privilege escalation | コンテナープロセスで親プロセスよりも多くの権限を取得できるように設定された場合に、アラートを出します。 | 3.70 以降 | ✕ | ✕ | ✕ | デプロイ |
Ingress Network Policy | Ingress Kubernetes ネットワークポリシーの有無を確認します。 | 3.70 以降 | ✕ | ✕ | ✓ | デプロイ |
Egress Network Policy | egress Kubernetes ネットワークポリシーの有無を確認します。 | 3.70 以降 | ✕ | ✕ | ✓ | デプロイ |
信頼できるイメージ署名によって検証されない | イメージの署名を検証するために使用できる署名統合のリスト。署名がないか、提供された署名統合の少なくとも 1 つによって署名が検証できないイメージに関するアラートを作成します。 | 3.70 以降 | ✕ | ✕ |
! | デプロイ |
Red Hat Advanced Cluster Security for Kubernetes バージョン 3.0.44 以前を使用している場合に、Policy criteria セクションで指定するポリシー基準は AND が指定されています。これは、指定されたすべてのポリシー基準が一致する場合にのみ違反が発生することを意味します。
6.4.3.1. ポリシー基準への論理条件の追加 リンクのコピーリンクがクリップボードにコピーされました!
ドラッグアンドドロップポリシーフィールドパネルを使用して、ポリシー基準に論理条件を指定できます。
前提条件
- Red Hat Advanced Cluster Security for Kubernetes バージョン 3.0.45 以降を使用している。
手順
Policy criteria セクションで、Add a new condition を選択して、新しいポリシーセクションを追加します。
- Edit アイコンをクリックして、ポリシーセクションの名前を変更できます。
- Drag out a policy field セクションには、複数のカテゴリーで利用可能なポリシー条件が一覧表示されます。これらのカテゴリーを展開したり折りたたんだりして、ポリシー基準属性を表示できます。
- policy セクションの Drop a policy field エリアに属性をドラッグします。
選択する属性のタイプに応じて、選択した属性の条件を設定するオプションが異なります。以下に例を示します。
-
ブール値が
Read-Only Root Filesystem
の属性を選択すると、READ-ONLY
オプションおよびWRITABLE
オプションが表示されます。 環境変数
が複合値の属性を選択すると、Key
、Value
、およびValue From
フィールドの値を入力するオプションと、利用可能なオプションの他の値を追加するアイコンが表示されます。- 属性に複数の値を組み合わせるには、Add アイコンをクリックします。
-
ポリシーセクションで一覧表示されている論理演算子
AND
またはOR
をクリックして、AND
演算子とOR
演算子を切り替えることもできます。演算子間の切り替えは、ポリシーセクション内でのみ機能し、2 つの異なるポリシーセクション間では機能しません。
-
ブール値が
-
これらの手順を繰り返して、複数の
AND
およびOR
条件を指定できます。追加した属性の条件を設定したら、Next をクリックしてポリシーの作成を続行します。