第2章 CI システムとの統合
Red Hat Advanced Cluster Security for Kubernetes (RHACS) は、さまざまな継続的インテグレーション (CI) 製品と統合されます。イメージをデプロイする前に、RHACS を使用して、ビルド時およびデプロイ時のセキュリティールールをイメージに適用できます。
イメージが構築され、レジストリーにプッシュされた後、RHACS は CI パイプラインに統合されます。最初にイメージをプッシュすることで、開発者は、他の CI テストの失敗、リンター違反、またはその他の問題とともに、ポリシー違反に対処しながら、アーティファクトのテストを続行できます。
可能であれば、バージョン管理システムを設定して、RHACS チェックを含むビルドステージが失敗した場合にプルリクエストまたはマージリクエストがマージされないようにブロックします。
CI 製品との統合は、RHACS インストールに接続して、イメージが設定したビルド時ポリシーに準拠しているかどうかを確認することで機能します。ポリシー違反がある場合は、ポリシーの説明、論理的根拠、修正手順などの詳細なメッセージがコンソールログに表示されます。
各ポリシーにはオプションの適用設定が含まれています。ビルド時の適用のためにポリシーをマークした場合、そのポリシーに失敗すると、クライアントはゼロ以外のエラーコードで終了します。
Red Hat Advanced Cluster Security for Kubernetes を CI システムと統合するには、次の手順に従います。
- ビルドポリシーの設定
- レジストリー統合の設定
- RHACS インスタンスへの アクセスを設定 します。
- CI パイプラインとの統合
2.1. ビルドポリシーの設定
ビルド中に RHACS ポリシーを確認できます。
手順
- コンテナーライフサイクルのビルド時に適用されるポリシーを設定します。
- ビルド中にイメージがプッシュされるレジストリーと統合します。
関連情報
2.1.1. 既存のビルド時ポリシーの確認
RHACS ポータルを使用して、Red Hat Advanced Cluster Security for Kubernetes で設定した既存のビルド時ポリシーを確認します。
手順
-
RHACS ポータルで、Platform Configuration
Policy Management に移動します。 -
グローバル検索を使用して、
Lifecycle Stage:Build
を検索します。
2.1.2. 新しいシステムポリシーの作成
デフォルトのポリシーを使用することに加えて、Red Hat Advanced Cluster Security for Kubernetes でカスタムポリシーを作成することもできます。
手順
-
RHACS ポータルで、Platform Configuration
Policy Management に移動します。 - + New Policy をクリックします。
- ポリシーの Name を入力します。
- ポリシーの Severity レベルを選択します: クリティカル、高、中、または低。
Build、Deploy、または Runtime から、ポリシーが適用される Lifecycle Stages を選択します。複数のステージを選択できます。
注記CI システムと統合するための新しいポリシーを作成する場合は、ライフサイクルステージとして Build を選択します。
- ビルド時ポリシーは、CVE や Dockerfile 手順などのイメージフィールドに適用されます。
- デプロイ時のポリシーには、すべてのビルド時のポリシー基準を含めることができます。また、特権モードでの実行や Docker デーモンソケットのマウントなど、クラスター設定からのデータを取得することもできます。
- ランタイムポリシーには、すべてのビルド時とデプロイ時のポリシー基準、およびランタイム中のプロセス実行に関するデータを含めることができます。
- Description、Rationale、および Remediation フィールドにポリシーに関する情報を入力します。CI がビルドを検証すると、これらのフィールドのデータが表示されます。したがって、ポリシーを説明するすべての情報を含めてください。
- Categories ドロップダウンメニューからカテゴリーを選択します。
このポリシーの違反が発生したときにアラート通知を受信する通知ドロップダウンメニューから Notifications 機能を選択します。
注記アラート通知を受信するには、RHACS を Webhook、Jira、PagerDuty などの通知プロバイダーと統合する必要があります。通知プロバイダーを RHACS に統合している場合にのみ、通知が表示されます。
- 特定のクラスター、namespace、またはラベルに対してのみこのポリシーを有効にするには、Restrict to Scope を使用します。複数のスコープを追加したり、namespaces とラベルの RE2 構文で正規表現を使用したりすることもできます。
- Exclude by Scope を使用して、デプロイメント、クラスター、namespaces、およびラベルを除外します。このフィールドは、指定したエンティティーにポリシーが適用されないことを示します。複数のスコープを追加したり、namespaces とラベルの RE2 構文で正規表現を使用したりすることもできます。ただし、デプロイメントの選択に正規表現を使用することはできません。
除外されたイメージ (ビルドライフサイクルのみ) の場合、ポリシーの違反をトリガーしたくないすべてのイメージをリストから選択します。
注記除外されたイメージ (ビルドライフサイクルのみ) 設定は、継続的インテグレーションシステム (ビルドライフサイクルステージ) でイメージをチェックする場合にのみ適用されます。このポリシーを使用して、実行中のデプロイメント (デプロイライフサイクルステージ) またはランタイムアクティビティー (ランタイムライフサイクルステージ) をチェックする場合、効果はありません。
- Policy Criteria セクションで、ポリシーをトリガーする属性を設定します。
- パネルヘッダーで Next を選択します。
- 新しいポリシーパネルには、ポリシーを有効にした場合にトリガーされる違反のプレビューが表示されます。
- パネルヘッダーで Next を選択します。
ポリシーの適用動作を選択します。適用設定は、Lifecycle Stages オプションで選択したステージでのみ使用できます。ポリシーを適用して違反を報告するには、ON を選択します。違反のみを報告するには、OFF を選択します。
注記適用の振る舞いは、ライフサイクルの各ステージで異なります。
- Build ステージでは、イメージがポリシーの条件に一致すると、RHACS は CI ビルドを失敗します。
Deploy 段階では、RHACS アドミッションコントローラーが設定され実行されている場合、RHACS はポリシーの条件に一致するデプロイメントの作成と更新をブロックします。
- アドミッションコントローラーが適用されているクラスターでは、Kubernetes または OpenShift Container Platform サーバーがすべての非準拠のデプロイメントをブロックします。他のクラスターでは、RHACS は準拠していないデプロイメントを編集して、Pod がスケジュールされないようにします。
- 既存のデプロイメントの場合、ポリシーの変更は、Kubernetes イベントが発生したときに、基準が次に検出されたときにのみ適用されます。適用の詳細は、「デプロイステージのセキュリティーポリシーの適用」を参照してください。
- Runtime ステージでは、RHACS はポリシーの条件に一致するすべての Pod を停止します。
警告ポリシーの適用は、実行中のアプリケーションまたは開発プロセスに影響を与える可能性があります。適用オプションを有効にする前に、すべての利害関係者に通知し、自動適用アクションに対応する方法を計画してください。
2.1.2.1. デプロイステージのセキュリティーポリシーの実施
Red Hat Advanced Cluster Security for Kubernetes は、デプロイ時のポリシーに対して、アドミッションコントローラーによるハードな適用と RHACS Sensor によるソフトな適用という 2 つの形式のセキュリティーポリシー適用をサポートしています。アドミッションコントローラーは、ポリシーに違反するデプロイメントの作成または更新をブロックします。アドミッションコントローラーが無効または使用できない場合、Sensor はポリシーに違反するデプロイメントのレプリカを 0
にスケールダウンして強制を実行できます。
ポリシーの適用は、実行中のアプリケーションまたは開発プロセスに影響を与える可能性があります。適用オプションを有効にする前に、すべての利害関係者に通知し、自動適用アクションに対応する方法を計画してください。
2.1.2.1.1. ハードエンフォースメント
ハードエンフォースメントは、RHACS アドミッションコントローラーによって実行されます。アドミッションコントローラーが適用されているクラスターでは、Kubernetes または OpenShift Container Platform サーバーがすべての非準拠のデプロイメントをブロックします。アドミッションコントローラーは、CREATE
および UPDATE
操作をブロックします。デプロイ時の強制が有効に設定されたポリシーを満たす Pod の作成または更新リクエストはすべて失敗します。
Kubernetes アドミッション Webhook は、CREATE
、UPDATE
、DELETE
、または CONNECT
操作のみをサポートします。RHACS アドミッションコントローラーは、CREATE
および UPDATE
操作のみをサポートします。kubectl patch
、kubectl set
、kubectl scale
などの操作は、UPDATE 操作ではなく、PATCH 操作です。Kubernetes では PATCH 操作がサポートされていないため、RHACS は PATCH 操作の強制を実行できません。
ブロックを強制するには、RHACS でクラスターに対して次の設定を有効にする必要があります。
- Enforce on Object Creates: Dynamic Configuration セクションのこのトグルは、アドミッションコントロールサービスの動作を制御します。これを機能させるには、Static Configuration セクションの Configure Admission Controller Webhook to listen on Object Creates トグルをオンにする必要があります。
- オブジェクトの更新時に強制: Dynamic Configuration セクションのこのトグルは、アドミッションコントロールサービスの動作を制御します。これを機能させるには、Static Configuration セクションの Configure Admission Controller Webhook to listen on Object Updates トグルをオンにする必要があります。
Static Configuration 設定の項目を変更した場合に、その変更を有効にするにはセキュアクラスターを再デプロイする必要があります。
2.1.2.1.2. ソフトな適用
ソフトな適用は RHACS Sensor によって実行されます。このエンフォースメントにより、操作が開始しなくなります。ソフトな適用では、Sensor はレプリカを 0 にスケーリングし、Pod がスケジュールされるのを防ぎます。このエンフォースメントでは、クラスター内で準備ができていないデプロイメントが使用可能になります。
ソフトな適用が設定されていて、Sensor がダウンしている場合、RHACS は適用を実行できません。
2.1.2.1.3. namespace の除外
デフォルトでは、RHACS は、stackrox
、kube-system
、istio-system
namespace などの特定の管理 namespace をエンフォースメントブロックから除外します。その理由は、RHACS が正しく機能するためには、これらの namespace 内の一部の項目をデプロイする必要があるためです。
2.1.2.1.4. 既存のデプロイメントへのエンフォースメント
既存のデプロイメントの場合、ポリシーの変更は、Kubernetes イベントが発生したときに、基準が次に検出されたときにのみ適用されます。ポリシーに変更を加えた場合は、Policy Management を選択し、Reassess All をクリックしてポリシーを再評価する必要があります。このアクションは、新しい受信 Kubernetes イベントがあるかどうかに関係なく、すべての既存のデプロイメントにデプロイポリシーを適用します。ポリシーに違反があった場合は、RHACS がエンフォースメントを実行します。
関連情報