Google Cloudとコンテナの継続的なセキュリティ
本文の内容は、2020年4月23日にSysdigのJorge Salamero Sanzが投稿したブログ(https://sysdig.com/blog/monitor-gatekeeper-prometheus/)を元に日本語に翻訳・再構成した内容となっております。
このブログ投稿では、Prometheusメトリクスを使用してOpen Policy Agent(OPA)Gatekeeperを監視する方法について説明します。
OPA Gatekeeperをデプロイした場合、このアドミッションコントローラーの監視は、APIserver、kubelet、controller-managerなどの残りのKubernetesコントロールプレーンコンポーネントの監視と同様に重要です。ここで何かが壊れた場合、Kubernetesはクラスタに新しいポッドをデプロイしません。そして、それが遅い場合、クラスタースケールのパフォーマンスが低下します。 では、初歩から始めていきましょう:
Open Policy Agent、短縮してOPAは、汎用のポリシーエンジンです。Regoと呼ばれる宣言型言語を使用しており、次の事に使用できます:
OPAは、KubernetesやIstio、Sysdigなど、多くのクラウドネイティブプロジェクトと統合されています。イメージスキャンの結果に基づいてポッドのスケジューリングを許可または拒否する方法を検討している場合は、「OPAを活用してアドミッションコントローラを用いてイメージスキャンを実行」をチェックしてください。
GatekeeperはOPAのサブプロジェクトであり、カスタマイズ可能なKubernetesアドミッションコントローラーを提供して、ユーザーがKubernetesで実行できる操作(RBACよりも細かいレベル)などのポリシーを監査および適用し、クラスターが組織のポリシーに準拠していることを確かにします。
Gatekeeperは、ポリシー評価のためにOPA制約フレームワークを組み込みます。これにより、Kubernetesのオブジェクトを相互に比較し、制約を作成(CRDに格納)し、それらを監査したり、制約テンプレートを作成して再利用したりできます。Gatekeeperの動作の詳細については説明しませんが、Gatekeeperを監視する方法を理解するために知っておく必要があるいくつかの主要な概念は、次のリクエストワークフローで確認できます。
Gatekeeperの詳細については、このKubernetesブログまたはプロジェクトページをご覧ください。
Gatekeeperは、Prometheusメトリクスエンドポイントを公開して、サービスの状態とパフォーマンスを監視するためのメトリクスを提供します。Open Policy Agentはサーバーとして実行されているときにメトリクスエンドポイントも公開しますが、GatekeeperはOPAを組み込んでおり、サーバーとして実行しないため、使用しません。
Gatekeeperをインストールするときは、GatekeeperコントローラーマネージャーのデプロイメントまたはPrometheusスクレイピング用の適切なアノテーションを使用してサービスを編集する必要があります:
% kubectl edit deploy gatekeeper-controller-manager -n gatekeeper-system [...] spec: [...] template: metadata: annotations: container.seccomp.security.alpha.kubernetes.io/manager: runtime/default prometheus.io/port: "8888" prometheus.io/scrape: "true"
[...]
次に、PrometheusサーバーまたはSysdigエージェントをPrometheusメトリクスコレクション用に設定している場合は、Gatekeeperメトリクスをすでに取り込んでいるはずです。
Sysdigは、Kubernetesクラスターのセキュリティを監視するための、すぐに使用可能なOpen Policy Agent(OPA)ゲートキーパーダッシュボードを提供します。
また、Gatekeeperダッシュボードは、Prometheus統合カタログ:PromCat(SysdigダッシュボードとGrafanaの両方に互換性のある)にもあります。必要に応じて、Sysdig Prometheus APIに対してGrafanaを使用することもできます。
各メトリクス詳細と使用方法を理解するのは少し難しいかもしれませんが、ダッシュボードに含まれているGatekeeperによって公開された各メトリクスについて見ていきましょう:
メトリクスタイプ: ゲージ
ラベル: enforcement_action [deny, audit, dry_run, unrecognized], status [active, error]
説明: 現在の制約数
このメトリクスを理解する:Gatekeeperは、すべての制約リソースの監視にサブスクライブします。クラスターで1つが作成または削除されるたびに、このカウントは更新されます。
メトリクスタイプ: ゲージ
ラベル: status [active, error]
説明: 制約テンプレートの現在の数
このメトリクスを理解する:ゲートキーパーは、すべてのConstraintTemplateリソースのウォッチをサブスクライブします。 クラスターで1つが作成または削除されるたびに、このカウントは更新されます。
メトリクスタイプ: カウンター
ラベル: status
説明: 制約テンプレートの取り込みアクションの数
このメトリクスを理解する:Gatekeeperは、新しい制約テンプレートの通知を受けると、リソースをetcdからOPAの後にロードします。このメトリクスは、発生した取り込みの数をカウントします。 コンパイルエラーがある場合、メトリクスは更新されません。
メトリクスタイプ: ヒストグラム
ラベル: status
説明: 制約テンプレートの取り込み期間の分布
このメトリクスを理解する:Gatekeeperに新しい制約テンプレートが通知されたときに、etcdからリソースをロードしてから、OPAがコードのコンパイルから正常に戻った後までの時間を記録します。コンパイルエラーがある場合、メトリクスは更新されません。
メトリクスタイプ: カウンター
ラベル: admission_status
説明: APIサーバーからアドミッションWebhookにルーティングされるリクエストの数
このメトリクスを理解する:このメトリクスは、アドミッションWebhookが呼び出された回数をカウントします。OPAへの呼び出しの結果を測定にタグ付けします。
メトリクスタイプ: ヒストグラム
ラベル: admission_status
説明: アドミッションリクエスト期間の分布
このメトリクスを理解する:アドミッションWebhookが呼び出されるたびに、関数の開始から関数が戻る直前までの時間を記録します(たとえば、golang defer経由)。OPAへの呼び出しの結果を測定にタグ付けします。
メトリクスタイプ:ゲージ
ラベル: enforcement_action
説明: 最後の監査サイクルで検出された制約ごとの監査違反の数
このメトリクスを理解する:監査では、実行ごとに、検出されたすべての違反を合計し、エンフォースメントモードごとにこれらのカウントを報告します。
メトリクスタイプ:ゲージ
ラベル:
説明: 最後の監査ランタイム以降のエポックタイムスタンプ
このメトリクスを理解する:各実行の最後に、cronジョブは、ジョブが終了したときのエポックを浮動小数点の秒数で報告します。
メトリクスタイプ: ヒストグラム
ラベル:
説明: 監査サイクル期間の分布
このメトリクスを理解する:cronジョブが実行されるときはいつでも、監査機能の開始から完了までの時間を記録する必要があります。
これらのメトリクスのほとんどは、Gatekeeper#157のErik Kitsonによって記述されています。そうしてくれたErikに感謝します。このリストを集めるのに本当に役立ちました。
Google Anthosは、OPA Gatekeeperを組み込んでいるため、Anthos Config ManagementのこれらのPrometheusメトリクスも公開しています。また、Anthosを使用している場合は、Sysdigを使用したAnthosのモニタリングとセキュリティ、およびGoogle Cloud Runを保護するためのソリューションをお見逃しなく。
Sysdig Secure DevOps Platformを使用すると、クラウドネイティブのワークロードを本番環境で自信を持って実行できます。 DevOpsチームは、企業が要求する規模と使いやすさで、オープンソースツール上に構築された単一のプラットフォームを使用して、コンテナ環境とKubernetes環境を保護および監視できます。
OPA Gatekeeperを使用したKubernetesアドミッションコントローラーのモニタリングは、セキュリティとモニタリングが同じDevOpsワークフローの一部となった例の1つにすぎません。 Sysdig Prometheusの監視機能を使用すると、Prometheusメトリクスを収集し、PromQLでクエリしてセキュリティを監視できるため、パフォーマンスやセキュリティインシデントに関係なく、DevOpsチームはリスクを減らし、問題をより迅速に解決できます。
Sysdigをまだテストしていませんか? 今すぐ無料トライアルにサインアップしてください!