ブログ

Prometheusメトリクスを使用してOPA Gatekeeperを監視する方法

Prometheusメトリクスを使用してOPA Gatekeeperを監視する方法

本文の内容は、2020年4月23日にSysdigのJorge Salamero Sanzが投稿したブログ(https://sysdig.com/blog/monitor-gatekeeper-prometheus/)を元に日本語に翻訳・再構成した内容となっております。

このブログ投稿では、Prometheusメトリクスを使用してOpen Policy Agent(OPA)Gatekeeperを監視する方法について説明します。

OPA Gatekeeperをデプロイした場合、このアドミッションコントローラーの監視は、APIserverkubeletcontroller-managerなどの残りのKubernetesコントロールプレーンコンポーネントの監視と同様に重要です。ここで何かが壊れた場合、Kubernetesはクラスタに新しいポッドをデプロイしません。そして、それが遅い場合、クラスタースケールのパフォーマンスが低下します。 では、初歩から始めていきましょう:

Open Policy Agentとは?

Open Policy Agent、短縮してOPAは、汎用のポリシーエンジンです。Regoと呼ばれる宣言型言語を使用しており、次の事に使用できます:

  • アドミッションコントロール:脆弱性のないコンテナーイメージのみをデプロイできるようにする
  • API認証:ユーザーXはソースZで操作Yを実行できますか?
  • SSHとsudoの認証:本番環境にSSHで接続できるのはオンコールチームメンバーのみです
  • データ保護とデータフィルタリング

OPAは、KubernetesやIstio、Sysdigなど、多くのクラウドネイティブプロジェクトと統合されています。イメージスキャンの結果に基づいてポッドのスケジューリングを許可または拒否する方法を検討している場合は、「OPAを活用してアドミッションコントローラを用いてイメージスキャンを実行」をチェックしてください。

OPA Gatekeeper、Kubernetesアドミッションコントローラ

GatekeeperはOPAのサブプロジェクトであり、カスタマイズ可能なKubernetesアドミッションコントローラーを提供して、ユーザーがKubernetesで実行できる操作(RBACよりも細かいレベル)などのポリシーを監査および適用し、クラスターが組織のポリシーに準拠していることを確かにします。

Gatekeeperは、ポリシー評価のためにOPA制約フレームワークを組み込みます。これにより、Kubernetesのオブジェクトを相互に比較し、制約を作成(CRDに格納)し、それらを監査したり、制約テンプレートを作成して再利用したりできます。Gatekeeperの動作の詳細については説明しませんが、Gatekeeperを監視する方法を理解するために知っておく必要があるいくつかの主要な概念は、次のリクエストワークフローで確認できます。

20200424-0.png
  • Kubernetes APIサーバーは、GatekeeperアドミッションWebhookをトリガーしてリクエストを処理します(オブジェクトが作成、更新、または削除されるたびに)。 APIサーバーは、Gatekeeper内のOPAによって実行されるポリシーに基づいて応答します。
  • 制約またはポリシーインスタンスは、目的のオブジェクト定義の宣言です。これらは、OPAの宣言型ポリシー言語であるRegoで記述されています。
  • 制約を宣言するには、制約テンプレートが必要です。各テンプレートは、Rego評価ロジックと、CRDおよび制約に渡されるパラメーターを含む制約のスキーマを記述します。
  • 監査機能は、オブジェクトを制約に対して定期的に評価し、既存の設定を検出します。 結果はviolationと呼ばれます。

Gatekeeperの詳細については、このKubernetesブログまたはプロジェクトページをご覧ください。

GatekeeperからPrometheusメトリックのスクレイピングする

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メトリクスをすでに取り込んでいるはずです。

Open Policy Agent - OPA Gatekeeperダッシュボード

Sysdigは、Kubernetesクラスターのセキュリティを監視するための、すぐに使用可能なOpen Policy Agent(OPA)ゲートキーパーダッシュボードを提供します。

また、Gatekeeperダッシュボードは、Prometheus統合カタログ:PromCat(SysdigダッシュボードとGrafanaの両方に互換性のある)にもあります。必要に応じて、Sysdig Prometheus APIに対してGrafanaを使用することもできます。

20200424-1.png

各メトリクス詳細と使用方法を理解するのは少し難しいかもしれませんが、ダッシュボードに含まれているGatekeeperによって公開された各メトリクスについて見ていきましょう:

OPA Gatekeeper Controllerメトリクスのモニタリング

gatekeeper_constraints

メトリクスタイプ: ゲージ

ラベル: enforcement_action [deny, audit, dry_run, unrecognized], status [active, error]

説明: 現在の制約数

このメトリクスを理解する:Gatekeeperは、すべての制約リソースの監視にサブスクライブします。クラスターで1つが作成または削除されるたびに、このカウントは更新されます。

gatekeeper_constraint_templates

メトリクスタイプ: ゲージ

ラベル: status [active, error]

説明: 制約テンプレートの現在の数

このメトリクスを理解する:ゲートキーパーは、すべてのConstraintTemplateリソースのウォッチをサブスクライブします。 クラスターで1つが作成または削除されるたびに、このカウントは更新されます。

gatekeeper_constraint_template_ingestion_count

メトリクスタイプ: カウンター

ラベル: status

説明: 制約テンプレートの取り込みアクションの数

このメトリクスを理解する:Gatekeeperは、新しい制約テンプレートの通知を受けると、リソースをetcdからOPAの後にロードします。このメトリクスは、発生した取り込みの数をカウントします。 コンパイルエラーがある場合、メトリクスは更新されません。

gatekeeper_constraint_template_ingestion_duration_seconds

メトリクスタイプ: ヒストグラム

ラベル: status

説明: 制約テンプレートの取り込み期間の分布

このメトリクスを理解する:Gatekeeperに新しい制約テンプレートが通知されたときに、etcdからリソースをロードしてから、OPAがコードのコンパイルから正常に戻った後までの時間を記録します。コンパイルエラーがある場合、メトリクスは更新されません。

OPA Gatekeeper Admission Webookメトリクスのモニタリング

gatekeeper_request_count

メトリクスタイプ: カウンター

ラベル: admission_status

説明: APIサーバーからアドミッションWebhookにルーティングされるリクエストの数

このメトリクスを理解する:このメトリクスは、アドミッションWebhookが呼び出された回数をカウントします。OPAへの呼び出しの結果を測定にタグ付けします。

gatekeeper_request_duration_seconds

メトリクスタイプ: ヒストグラム

ラベル: admission_status

説明: アドミッションリクエスト期間の分布

このメトリクスを理解する:アドミッションWebhookが呼び出されるたびに、関数の開始から関数が戻る直前までの時間を記録します(たとえば、golang defer経由)。OPAへの呼び出しの結果を測定にタグ付けします。

OPA Gatekeeper Auditプロセスメトリクスのモニタリング

gatekeeper_violations

メトリクスタイプ:ゲージ

ラベル: enforcement_action

説明: 最後の監査サイクルで検出された制約ごとの監査違反の数

このメトリクスを理解する:監査では、実行ごとに、検出されたすべての違反を合計し、エンフォースメントモードごとにこれらのカウントを報告します。

gatekeeper_audit_last_run_time

メトリクスタイプ:ゲージ

ラベル:

説明: 最後の監査ランタイム以降のエポックタイムスタンプ

このメトリクスを理解する:各実行の最後に、cronジョブは、ジョブが終了したときのエポックを浮動小数点の秒数で報告します。

gatekeeper_audit_duration_seconds

メトリクスタイプ: ヒストグラム

ラベル:

説明: 監査サイクル期間の分布

このメトリクスを理解する:cronジョブが実行されるときはいつでも、監査機能の開始から完了までの時間を記録する必要があります。

これらのメトリクスのほとんどは、Gatekeeper#157のErik Kitsonによって記述されています。そうしてくれたErikに感謝します。このリストを集めるのに本当に役立ちました。

Google Anthosは、OPA Gatekeeperを組み込んでいるため、Anthos Config ManagementのこれらのPrometheusメトリクスも公開しています。また、Anthosを使用している場合は、Sysdigを使用したAnthosのモニタリングとセキュリティ、およびGoogle Cloud Runを保護するためのソリューションをお見逃しなく。

Kubernetesのセキュリティ監視

Sysdig Secure DevOps Platformを使用すると、クラウドネイティブのワークロードを本番環境で自信を持って実行できます。 DevOpsチームは、企業が要求する規模と使いやすさで、オープンソースツール上に構築された単一のプラットフォームを使用して、コンテナ環境とKubernetes環境を保護および監視できます。

OPA Gatekeeperを使用したKubernetesアドミッションコントローラーのモニタリングは、セキュリティとモニタリングが同じDevOpsワークフローの一部となった例の1つにすぎません。 Sysdig Prometheusの監視機能を使用すると、Prometheusメトリクスを収集し、PromQLでクエリしてセキュリティを監視できるため、パフォーマンスやセキュリティインシデントに関係なく、DevOpsチームはリスクを減らし、問題をより迅速に解決できます。

Sysdigをまだテストしていませんか? 今すぐ無料トライアルにサインアップしてください!

ご質問・お問い合わせはこちら

top