カスタムコンプライアンスチェック

コンプライアンスチェックのためのカスタムスクリプトの作成

カスタムスクリプトは、コンプライアンスチェックやその他の評価に使用するために、コンテナやホスト上で実行できます。カスタムコンプライアンスチェックは、任意のコンテナで条件を検証し、コンテナまたはノードのコンプライアンスセクションに結果を報告するために実行できるbashスクリプトです。

カスタムスクリプトを作成する機能は、誤用を防ぐためにデフォルトで無効になっています。これは、コントローラーとエンフォーサーでCUSTOM_CHECK_CONTROL 環境変数を設定することで有効にできます。値は「disable」(デフォルト、許可されていない)、「strict」(管理者ロールのみ)、または「loose」(管理者、コンプライアンス、ランタイムポリシーロール)です。

カスタムスクリプトは、極めて注意して使用する必要があります。カスタムスクリプトは、コンテナのネームスペース内でコンテナ特権を持つ任意の実行可能ファイルを実行できます。実行可能ファイルは、rm、format、fdiskなどの非常に破壊的なものになる可能性があります。この注意は、ホスト/ノードにも適用されます。ホスト上のカスタムチェックスクリプトは、クラスター内のマスターノードにアクセスできる場合、さらに破壊的になる可能性があります。

  • カスタムスクリプトは、名前空間RBACを使用したランタイムポリシーの権限によって制御されます。ユーザーはKubernetesのユーザーロールを適切にセットアップする必要があります。

  • カスタムスクリプトは、実行中のコンテナと同じ特権で実行されます。

  • カスタムスクリプトが削除されると、コンプライアンス結果は削除されます。

  • カスタムコンプライアンスチェックは、コンテナまたはノードのコンプライアンスレポートで結果を正しく報告するために、フォーマットに従う必要があります。

    • スクリプトは、いくつかの条件をチェックするために「if」文で始まります。

    • カスタムチェックは、終了コードが0の場合に合格します。

    • カスタムチェックは、終了コードが1の場合に失敗します。

コンテナにパスワードのないルートアカウントがあるかどうかを確認するサンプルスクリプトです。

if [ $(cat /etc/shadow | grep  'root:::0:::::') ]; then
     DESCRIPTION="CVE-2019-5021 fails."
     echo $DESCRIPTION;
     exit 1;
else
     echo "CVE-2019-5021 pass";
     exit 0;
fi

コンテナ内のダーティーコウファイルを確認するサンプルスクリプトです。

if [ $(find . / | grep -w 'cow') ]; then
     DESCRIPTION="dirty cow seen in the container"
    echo $DESCRIPTION;
    exit 1;
else
    echo "no dirty cow found pass";
    exit 0;
fi

その他の注意事項

  • スクリプトは1分のタイムアウトがあり、完了しない場合は強制終了され、コンプライアンス結果にエラーとして報告されます。

  • スクリプトは、発見、監視、保護の3つの操作モードすべてで実行できます。

カスタムチェックスクリプトの作成

  • ポリシー→グループからサービスグループ(ユーザー作成または自動学習)を選択します。

  • カスタムチェックタブをクリックしてください。

  • スクリプトの名前を入力してください。スペースは許可されていません。

  • スクリプトをスクリプトセクションにコピーして貼り付けてください。

  • スクリプトを追加するには、ADDボタンをクリックしてください。

  • 複数のスクリプトは、右上隅に提供されているオプションから作成および管理できます。

  • スクリプトは、作成されたときおよびスクリプトが更新されたときに、サービスグループに含まれるコンテナで実行されます。

  • スクリプトの結果は、資産→コンテナ→コンプライアンス、または資産→ノード→コンプライアンスから表示できます。

サンプル

3つのコンテナで構成されるデモグループにカスタムチェックスクリプトを作成しています。

ComplianceDemo

ダーティーコウファイルを持つnginxコンテナのコンプライアンス結果を表示しており、警告が報告されています。

ComplianceNginx

ノードJSコンテナのコンプライアンス結果を表示しています。このコンテナにはダーティーコウファイルがないため、スクリプトから合格が報告されます。

ComplianceNodejs

タイムアウトが発生したカスタムチェックのためのnginxコンテナのコンプライアンス結果を表示しています。

ComplianceTimeout

コンプライアンスレポートのための応答ルールを作成しています。

応答ルールは、カスタムコンプライアンスチェック結果に基づくポリシー→の応答ルールで作成できます。結果はコンプライアンスカテゴリの一部であり、特定のレベルのすべてのイベントに対して応答を作成できます。

  • カテゴリコンプライアンスを選択してください。

  • グループオプションにサービスグループ名を入力し、自動選択オプションから希望のグループを選択してください。

  • レベルを入力し、自動選択オプションからレベル:警告を選択してください。

  • 希望するアクション、隔離、Webhook、および/またはログ抑制を有効にしてください。

  • ステータスボタンを有効にしてください。

  • 応答ルールを追加するには、追加ボタンをクリックしてください。

次のコンプライアンスイベントで警告が結果として表示されると、対応する応答ルールアクションがトリガーされます。

コンプライアンス応答

名前でコンプライアンスレポートとカスタムチェックスクリプトの応答ルールを作成してください。

  • カテゴリコンプライアンスを選択してください。

  • グループオプションにサービスグループ名を入力し、ドロップダウンオプションから希望のグループを選択するか、すべてに適用するためにグループ名を空白のままにしてください。

  • 'n’と入力し、オプションのメニューからカスタムチェックスクリプト名を選択してください。

  • 希望するアクション、隔離、webhook、および/またはログ抑制を有効にしてください。

  • ステータスボタンを有効にしてください。

  • 応答ルールを追加するには、追加ボタンをクリックしてください。

次の警告を伴うコンプライアンスイベントが、対応する応答ルールアクションをトリガーします。

コンプライアンス応答