第4章 セキュリティーリスクの評価
Red Hat Advanced Cluster Security for Kubernetes は環境全体にわたるリスクを評価し、セキュリティーリスクに合わせて実行中のデプロイメントをランク付けします。また、緊急の対応が必要な脆弱性、設定、およびランタイムアクティビティーに関する詳細も提供します。
4.1. リスクのあるデプロイメントの確認 リンクのコピーリンクがクリップボードにコピーされました!
リスク ビューには、すべてのクラスターからのすべてのデプロイメントがリスト表示され、ポリシー違反、イメージコンテンツ、デプロイメント設定、およびその他の同様の要素に基づく多要素リスクメトリクスで並べ替えられます。リストの上部にデプロイメントでは、最もリスクが高くなります。
Risk ビューには、各行に以下の属性を持つデプロイメントのリストが表示されます。
- Name: デプロイメントの名前。
- Created: デプロイメントの作成時間。
- Cluster: デプロイメントが実行されているクラスターの名前。
- namespace: デプロイメントが存在する namespace。
- Priority: 重大度およびリスクメトリクスに基づく優先度のランク付け。
Risk ビューでは、以下の操作を実行できます。
- 列見出しを選択して、違反を昇順または降順で並べ替えます。
-
フィルターバーを使用して違反をフィルタリングします。たとえば、フィルターバーで
Process Name:<name>というクエリーを使用すると、指定したプロセスを持つデプロイメントを検索できます。 - フィルターされた条件に基づいて新しいポリシーを作成します。
デプロイメントのリスクに関する詳細を表示するには、Risk ビューでデプロイメントを選択します。
4.1.1. デプロイメントに関するリスク情報の表示 リンクのコピーリンクがクリップボードにコピーされました!
Risk ビューでデプロイメントを選択すると、Deployment risk ページに、そのデプロイメントのリスク要因に関する情報が表示されます。以下のタブから選択できます。
- Risk indicators
- Deployment details
- Process discovery
4.1.2. Risk indicators タブ リンクのコピーリンクがクリップボードにコピーされました!
Risk indicators タブでは、検出されたリスクが説明されています。
Risk indicators タブには、以下のセクションが含まれています。
- Policy Violations: 選択したデプロイメントで違反しているポリシーの名前。
- Suspicious Process Executions: プロセスが実行されたさまざまなプロセス、引数、およびコンテナー名。
- Image Vulnerabilities: CVSS スコアをはじめとした合計 CVE を含むイメージ。
- Service Configurations: 読み取り/書き込み (RW) 機能、機能が廃止されているかどうか、特権付きコンテナーがあるかなど、多くの場合に問題が発生する可能性のある各種設定。
- Service Reachability: クラスター内外に公開されるコンテナーポート。
- Components Useful for Attackers: 攻撃者がよく使用すると検出されたソフトウェアツール。
- Number of Components in Image: 各イメージにあるパッケージの数。
-
Image Freshness: イメージ名と使用期間 (例:
285 days old) - RBAC Configuration: Kubernetes のロールベースアクセス制御 (RBAC) でのデプロイメントに付与されるパーミッションのレベル。
Risk indicators タブにすべてのセクションが表示されるわけではありません。Red Hat Advanced Cluster Security for Kubernetes は、選択したデプロイメントに影響のある関連セクションのみを表示します。
4.1.3. Deployment details タブ リンクのコピーリンクがクリップボードにコピーされました!
Deployment risk ページの Deployment details タブにある各セクションでは、検出されたリスクへの対処方法について適切な判断を下せるよう、より詳細な情報を提供しています。
矢印をクリックすると、ページ内の各セクションを展開して、より詳しい情報を表示できます。
4.1.3.1. 概要セクション リンクのコピーリンクがクリップボードにコピーされました!
Deployment details タブの Overview セクションには、以下の項目に関する詳細が表示されます。
- Deployment ID: デプロイメントの英数字 ID。
- Deployment Name: デプロイメントの名前。
-
Deployment Type: デプロイメントのタイプ (例:
DeploymentまたはDaemonSet)。 - namespace: デプロイメントが存在する Kubernetes または OpenShift Container Platform namespace。
- Replicas: このデプロイメントにデプロイされた Pod の数。
- Labels: Kubernetes または OpenShift Container Platform アプリケーションに割り当てられるキー/値のラベル。
- annotations: デプロイメントの Kubernetes アノテーション。
- Created: デプロイメントが作成された日時。
- Cluster: デプロイメントが実行されているクラスターの名前。
- Service Account: Pod で実行されるプロセスのアイデンティティーを表します。プロセスがサービスアカウントを使用して認証されると、このプロセスは Kubernetes API サーバーに接続し、クラスターリソースにアクセスできます。Pod にサービスアカウントが割り当てられていない場合は、default のサービスアカウントを取得します。
- Port configuration: デプロイメントで設定されているポートに関する情報。
4.1.3.2. コンテナー設定セクション リンクのコピーリンクがクリップボードにコピーされました!
Deployment details タブにあるコンテナー設定セクションには、以下の項目に関する詳細が表示されます。
- Image Name: デプロイされたイメージの名前。
リソース
- CPU Request (cores): コンテナーにより要求される CPU の数。
- CPU Limit (cores): コンテナーが使用できる CPU の最大数。
- Memory Request (MB): コンテナーによって要求されるメモリーサイズ。
- Memory Limit (MB): コンテナーが強制終了せずに使用できる最大メモリー量。
Mounts
- Name: マウントの名前。
- Source: マウントのデータを取得するパス。
- Destination: マウントのデータを送信する先のパス。
- type: マウントのタイプ。
- Secrets: デプロイメントで使用される Kubernetes シークレットの名前、および X.509 証明書であるシークレット値の基本情報。
4.1.3.3. セキュリティーコンテキストセクション リンクのコピーリンクがクリップボードにコピーされました!
Deployment details タブの Security Context セクションには、セキュリティーコンテキストに関する以下の詳細が表示されます。
-
Privileged: コンテナーに特権がある場合に
trueをリスト表示します。
4.1.4. Process discovery タブ リンクのコピーリンクがクリップボードにコピーされました!
Process Discovery タブには、選択したデプロイメントについて、環境内のコンテナーで実行されたすべてのバイナリーの包括的なリストが表示されます。
プロセスに関する情報を表示したり、ベースラインにプロセスを追加または削除したりできます。このページには、以下の情報とオプションがあります。
- Event Timeline: ポリシー違反、プロセスアクティビティー、再起動、終了の回数、およびその情報のグラフ表現へのリンクが表示されます。
History of Running Processes: 実行されたバイナリーの名前と、そのプロセスが実行されたデプロイメント内のコンテナーに基づいて、プロセスのリストを表示します。プロセスをクリックして展開すると、以下のフィールドなどの追加情報が表示されます。
- Arguments: バイナリーとともに渡された特定の引数。
- Time: 指定したコンテナーでバイナリーが実行された最新の日時。
- Pod ID: コンテナーを含む Pod の識別子。
- UID: プロセスが実行された Linux ユーザー ID。
- Spec Container Baselines: RHACS が新しいプロセスを検出した際に、そのプロセスを許可または拒否するために使用できるベースラインを作成するために使用します。
4.1.4.1. イベントタイムラインセクション リンクのコピーリンクがクリップボードにコピーされました!
Process Discovery タブの Event Timeline セクションでは、選択したデプロイメントのイベントの概要が表示されます。ポリシー違反、プロセスアクティビティー、およびコンテナーの終了または再起動イベントの数が表示されます。
Event Timeline を選択して、詳細情報を表示できます。
Event Timeline には、選択したデプロイメントのすべての Pod に関するイベントが表示されます。
Red Hat Advanced Cluster Security for Kubernetes では、タイムライン上のイベントは次の種類に分類されます。
- プロセスアクティビティー
- ポリシー違反
- コンテナーの再起動
- コンテナーの終了
イベントは、タイムラインにアイコンとして表示されます。イベントの詳細を表示するには、イベントアイコンにカーソルを合わせてください。詳細はツールチップに表示されます。
- Show Legend をクリックして、イベントのタイプに対応するアイコンを確認します。
-
Export
Download PDF または Export Download CSV を選択して、イベントタイムライン情報をダウンロードします。 - Show All を選択し、フィルターを選択して、タイムラインに表示するイベントの種類を制限します。
- 表示範囲を拡張すると、選択した Pod 内の各コンテナーのイベントを個別に表示できます。
タイムライン内のすべてのイベントは、下部のミニマップコントロールにも表示されます。ミニマップは、イベントのタイムラインに表示されるイベントの数を制御します。ミニマップで強調表示されている領域を変更して、タイムラインに表示されるイベントを変更できます。これには、ハイライトされた領域を左または右側 (または両方) から減らし、強調表示されている領域をドラッグします。
コンテナーが再起動すると、Red Hat Advanced Cluster Security for Kubernetes (RHACS) は次の処理を実行します。
-
Pod 内のコンテナーごとに、最大 10 個の非アクティブなコンテナーインスタンスのコンテナー終了および再起動イベントに関する情報を表示します。たとえば、
appとsidecarという 2 つのコンテナーを持つ Pod の場合、RHACS は最大 10 個のappインスタンスと最大 10 個のsidecarインスタンスのアクティビティーを保持します。 - コンテナーの以前のインスタンスに関連付けられているプロセスアクティビティーは追跡しません。
-
Pod 内のコンテナーごとに、最大 10 個の非アクティブなコンテナーインスタンスのコンテナー終了および再起動イベントに関する情報を表示します。たとえば、
- RHACS は、各 Pod について、プロセス名、プロセス引数、UID のタプルごとに、最新の実行のみを表示します。
- RHACS は、アクティブな Pod のイベントのみを表示します。
-
RHACS は、Kubernetes と Collector によって報告された時間に基づいて、報告されたタイムスタンプを調整します。Kubernetes のタイムスタンプは秒単位の精度を使用し、時間を最も近い秒に丸めます。しかし、Collector はより精度の高いタイムスタンプを使用します。たとえば、Kubernetes がコンテナーの起動時刻を
10:54:48と報告し、Collector がそのコンテナー内のプロセスが10:54:47.5349823に起動したと報告した場合、RHACS はコンテナーの起動時刻を10:54:47.5349823に調整します。
4.1.4.2. プロセスベースラインの使用 リンクのコピーリンクがクリップボードにコピーされました!
インフラストラクチャーセキュリティーにプロセスベースを使用して、リスクを最小限に抑えることができます。この方法では、Red Hat Advanced Cluster Security for Kubernetes (RHACS) はまず既存のプロセスを検出し、ベースラインを作成します。その後、デフォルトの deny-all モードで動作し、ベースラインにリスト表示されているプロセスのみを実行できます。
- プロセスベースライン
- RHACS をインストールしても、デフォルトのプロセスベースラインは設定されません。RHACS はデプロイメントを検出すると、デプロイメント内のすべてのコンテナータイプに対してプロセスベースラインを作成します。次に、検出されたすべてのプロセスを独自のプロセスベースラインに追加します。
- プロセスベースラインの状態
- プロセス検出フェーズでは、すべてのベースラインがロック解除された状態になります。
ロック解除 の状態:
- RHACS は新しいプロセスを検出すると、そのプロセスをプロセスベースラインに追加します。
- プロセスはリスクとして表示されず、違反は発生しません。
RHACS は、デプロイメント内のコンテナーから最初のプロセスインジケーターを受信してから 1 時間後に、プロセス検出フェーズを完了します。検出フェーズの期間を設定する方法については、「プロセスベースラインの観測期間の設定」を参照してください。
この時点で、以下が行われます。
- RHACS はプロセスベースラインへのプロセスの追加を停止します。
- プロセスベースラインにない新しいプロセスはリスクとして表示されますが、デフォルトでは違反をトリガーしません。
違反を生成するには、プロセスベースラインを手動でロックするか、プロセスベースラインの自動ロック機能を有効にする必要があります。
プロセスベースラインを手動でロックおよびロック解除する方法の詳細は、「プロセスベースラインのロックとロック解除」を参照してください。
プロセスベースラインを自動的にロックする方法の詳細は、「プロセスベースラインの自動ロックの設定」を参照してください。
ロック 状態:
- RHACS はプロセスベースラインへのプロセスの追加を停止します。
- プロセスベースラインにない新しいプロセスは違反をトリガーします。
ベースラインがロックされているかどうかに関係なく、ベースラインからいつでもプロセスを追加または削除できます。
デプロイメントにおいて、各 Pod 内に複数のコンテナーが含まれている場合、RHACS はコンテナーの種類ごとにプロセスベースラインを作成します。このようなデプロイメントでは、一部のベースラインがロックされていて、一部がロック解除されている場合、そのデプロイメントのベースラインのステータスは Mixed と表示されます。
4.1.4.3. プロセスベースラインの観測期間の設定 リンクのコピーリンクがクリップボードにコピーされました!
ROX_BASELINE_GENERATION_DURATION 環境変数を設定することで、プロセスベースラインの観測期間を設定できます。
手順
次のコマンドを実行して、
ROX_BASELINE_GENERATION_DURATION環境変数を設定します。$ oc -n stackrox set env deploy/central \ ROX_BASELINE_GENERATION_DURATION=<value>-
oc: Kubernetes を使用する場合は、kubectlと入力します。 <value>: 時間単位を使用します。たとえば、300ms、-1.5h、または2h45mなどです。有効な時間単位は次のとおりです。-
ns -
usまたはµs -
ms -
s -
m -
h
-
-
4.1.4.4. プロセスベースラインの表示 リンクのコピーリンクがクリップボードにコピーされました!
Risk ビューからプロセスベースラインを表示できます。
手順
- RHACS ポータルで、ナビゲーションメニューから Risk を選択します。
- デフォルトの Risk ビューのデプロイメントリストからデプロイメントを選択します。
- Deployment Risk ページで、Process discovery タブを選択します。
- プロセスベースラインは Spec Container Baselines セクションに表示されます。
4.1.4.5. ベースラインへのプロセスの追加 リンクのコピーリンクがクリップボードにコピーされました!
ベースラインにプロセスを手動で追加することもできます。たとえば、ベースライン作成時に実行されていなかった安全なプロセスを追加する場合、そのプロセスを手動で追加できます。
手順
- Red Hat Advanced Cluster Security for Kubernetes (RHACS) ポータルで、ナビゲーションメニューから Risk を選択します。
- デフォルトの Risk ビューのデプロイメントリストからデプロイメントを選択します。
Process discovery タブを選択します。
- History of Running Processes リストで、プラス記号をクリックしてプロセスをプロセスベースラインに追加します。追加できるプロセスは、ベースラインにまだ含まれていないものだけです。
4.1.4.6. ベースラインからのプロセスの削除 リンクのコピーリンクがクリップボードにコピーされました!
システムがベースラインを評価する際にそのプロセスが考慮されないように、ベースラインからプロセスを削除できます。
手順
- Red Hat Advanced Cluster Security for Kubernetes (RHACS) ポータルで、ナビゲーションメニューから Risk を選択します。
- デフォルトの Risk ビューのデプロイメントリストからデプロイメントを選択します。
- Process discovery タブを選択します。
- Spec Container baselines セクションで、プロセスベースラインから削除するプロセスの Remove アイコンをクリックします。
4.1.4.7. プロセスベースラインのロックとロック解除 リンクのコピーリンクがクリップボードにコピーされました!
ベースラインを ロック して、ベースラインに記載されていない全プロセスの違反をトリガーし、ベースラインのロックを 解除 して違反をトリガーしないようにできます。
手順
- Red Hat Advanced Cluster Security for Kubernetes (RHACS) ポータルで、ナビゲーションメニューから Risk を選択します。
- デフォルトの Risk ビューのデプロイメントリストからデプロイメントを選択します。
- Process Discovery タブを選択します。
Spec Container baselines セクションで、以下を実行します。
- ベースラインにないプロセスの違反をトリガーするには、Lock アイコンをクリックします。
- Unlock アイコンをクリックして、ベースラインにないプロセスの違反のトリガーを停止します。
4.1.4.8. プロセスベースラインの自動ロックの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Advanced Cluster Security for Kubernetes (RHACS) では、プロセスベースラインの観測期間が経過したときに、そのベースラインを自動的にロックするように設定できます。自動ロック機能は Central とセキュアクラスターの両方で有効にする必要があります。
自動ロックを使用する際は、以下のガイドラインに従ってください。
- この機能は、Central ではデフォルトで有効になっており、セキュアクラスターではデフォルトで無効になっています。したがって、この機能を有効にするために Central を再起動する必要はありません。ただし、Central の機能の状態を変更するには、Central を再起動する必要があります。
- この機能は、セキュアクラスターのプロセスベースラインでこの機能が有効になっている場合にのみ有効になります。
- 機能を有効にした後に無効にしても、その機能によってロックされたプロセスベースラインのロックは解除されません。
- この機能を有効にしても、この機能が有効になる前に観測期間が終了したプロセスベースラインはロックされません。
手順
- OpenShift Container Platform Web コンソールで、RHACS Operator ページに移動します。
- 上部のナビゲーションメニューで Secured Cluster を選択します。
- インスタンス名 (例: stackrox-secured-cluster-services) をクリックします。
設定を変更するには、次のいずれかの方法を使用します。
-
Form view の Process baselines settings
Auto Lock で、Enabled または Disabled を選択します。 -
YAML をクリックして YAML エディターを開き、
spec.processBaselines.autoLock属性を見つけます。EnabledまたはDisabledに変更します。
-
Form view の Process baselines settings
- Save をクリックします。
-
Central でこの機能を有効または無効にするには、
ROX_AUTO_LOCK_PROCESS_BASELINES環境変数を設定します。デフォルト値はtrueです。
4.1.4.9. 自動ロックプロセスベースラインの既知の制限 リンクのコピーリンクがクリップボードにコピーされました!
プロセスベースラインの自動ロックを有効にすると、Central、Central DB、および Sensor はより多くの CPU およびメモリーリソースを消費します。これにより、メモリー不足が原因で CPU スロットリングが発生し、Pod がクラッシュする可能性があります。
次の結果は、30 秒ごとに 5,000 のプロセス (1 秒あたり 166.67 プロセス) が生成された 1,000 のデプロイメントのテストから得られました。この機能を有効および無効にした状態でテストを実行しました。2 つのテスト間でリソース使用量を比較しました。テストでは、プロセスベースライン生成の期間は 3 分に設定され、ベースライン生成期間の終了後もプロセス作成率は変化しませんでした。
- Sensor はメモリーを 24 Mb 多く使用しました。
- Sensor のメモリー使用量の差は、時間の経過とともに増加していないようです。
- Sensor の CPU 使用率が 0.14 CPU 増加しました。
- Central はメモリーを 175 Mb 多く使用しました。
- 自動ロックを有効にすると、Central メモリー使用量の増加率は 1 秒あたり 65 Kb 増加しました。
- Central CPU 使用率が 0.12 CPU 増加しました。
- 自動ロックを有効にすると、Central DB はメモリーを 296 Mb 多く使用しました。
- Central DB メモリー使用量の差は、時間の経過とともに増加していないようです。
- Central DB の CPU 使用率は低く、0.03 CPU 増加しました。
4.1.4.10. 一括ロックおよびロック解除プロセスのベースライン リンクのコピーリンクがクリップボードにコピーされました!
API エンドポイントを使用して、クラスター内のすべてのプロセスベースラインをロックまたはロック解除できます。オプションの namespace セットを指定して、アクションをそれらの namespace だけに制限できます。
プロセスベースラインのロックとロック解除には、以下の API エンドポイントを使用してください。
-
/v1/processbaselines/bulk/lock -
/v1/processbaselines/bulk/unlock
次の例は、エンドポイントの入力を示しています。
{
"cluster_id": "aeaaaaaa-0000-0000-0000-000000000000",
"namespaces": [
"stackrox",
"gmp-system"
]
}
これらのエンドポイントは、成功メッセージまたはエラーを返します。