PrometheusドキュメントPrometheusTweetこのページはPrometheus公式ドキュメント和訳+αの一部です。MODELPrometheusは、たくさんのコンポーネントとたくさんの他システムとの連携のある複雑なシステムである。多種多様な、信頼性のある環境と信頼性のない環境にデプロイされる可能性がある。このページは、Prometheusの一般的なセキュリティ上の仮定と、いくつかの設定で有効になる攻撃経路について記述する。複雑なシステムであれば何であれ、バグがないという保証することは不可能である。セキュリティのバグを見つけたら、関係するリポジトリのMAINTAINERS.mdに挙げられているメンテナー個人にレポートし、prometheus-team@googlegroups.comにCCして下さい。私たちは、その問題を修正し、リリース日をあなたと調整し、あなたが望むなら個人名を挙げてあなたの努力に謝意を示します。PrometheusPrometheusのHTTPエンドポイントとログに信頼性のないユーザーからのアクセスがあることが仮定されている。データベースに含まれる全ての時系列に加えて各種の操作/デバッグ情報にアクセスできる。信頼性のあるユーザーのみが、コマンドライン、設定ファイル、Prometheusとその他のコンポーネントの実行環境に関わるその他の側面を変更する力があることが仮定されている。どの対象を、どれぐらいの頻度で、どのような設定でスクレイプするかは、完全に設定ファイルを通して決まる。管理者は、サービスディスカバリーからの情報を使うこともできる。サービスディスカバリーのデータを変更することができる人なら誰にでも、その情報をリラベリングと組み合わせることで、この制御を許してしまう可能性がある。スクレイプの対象は、信頼性のないユーザーによって実行されている可能性がある。あるターゲットが他のターゲットのふりをするデータを出力するのがデフォルトで可能であってはいけない。honor_labelsは、この保護を取り除いてしまう。特定のリラベルの設定も同じことが起きてしまう可能性がある。APIへのアクセスを制御する。これはデフォルトで無効にされている。有効化されると、管理用で変更を伴う機能が、パス/api/*/admin/以下でアクセス可能になる。フラグ--web.enable-lifecycleは、Prometheusの再読み込みと停止を制御する。これもデフォルトでは無効になっている。有効になっている場合、パス/-/reloadと/-/quitでアクセス可能になる。APIにアクセスできる人なら誰でもアクセス可能である。エンドポイント/-/quitはデフォルトで無効になっているが、フラグ-web.enable-remote-shutdownで有効にできる。readエンドポイントにクエリを送信できるようになる。PromQLクエリが最終的にリレーショナルDBに対して直接実行されるならば、Prometheusに(Grafanaなどを通して)クエリを送信できる人なら誰でも任意のSQLをそのDBに対して出来ることになる。AlertmanagerAlertmanagerのHTTPエンドポイントにアクセスできる人なら誰でもそのデータにアクセスできる。アラートを作成したり解消できる。サイレンスを作成したり、修正したり、削除できる。どこに通知を送るかは、設定ファイルによって決まる。テンプレートの設定次第で、通知の宛先がアラートによって決まってしまう。宛先emailアドレスとしてアラートのラベルを使っていると、Alertmanagerにアラートを送信できる人なら誰でも、どんなemailアドレスにも通知を送ることが可能である。アラートで決まる宛先がテンプレート可能な秘密のフィールドならば、PrometheusまたはAlertmanagerにアクセスできる人なら誰でもその秘密を見ることが可能になるだろう。テンプレート可能な秘密のフィールドは、通知をルーティングするための利用を意図している。テンプレートファイルの機能を利用して秘密を設定ファイルから分離するための方法としては意図されていない。大規模な設定の中では、各チームが自分で完全に制御できるAlertmanager設定ファイルの断片を持っていて、それらが結合されて、最終的な完全な設定ファイルになる。PushgatewayPushgatewayのHTTPエンドポイントにアクセスできる人なら誰でも、その中に含まれるメトリクスを作成、変更、削除することができる。Pushgatewayは通常はhonor_labelsを有効にしてスクレイプされるので、これは、Pushgatewayにアクセスできる人は誰でもPrometheusの中に時系列を作成できるということを意味する。Exportersexporterは、一般的には、設定されたインスタンスとだけ、事前に決められたコマンド/リクエストの集合を用いて、通信する。exporterのような、URLパラメーターから監視対象を得るexporterも存在する。したがって、それらのexporterにHTTPでアクセスできる人なら誰でも、任意のエンドポイントにリクエストを送信することが可能である。stringsのような秘密の漏洩に繋がる可能性がある。TLSのようなチャレンジ/レスポンス認証はこの影響を受けない。クライアントライブラリクライアントライブラリは、ユーザーアプリケーションに含まれることが意図されている。Prometheusおよびそのコンポートは、サーバーサイドで認証も認可も暗号化も提供しない。それらが必要なら、リバースプロキシの利用が推奨されている。管理用エンドポイントと変更が起きるエンドポイントは、cURLなどの簡単なツールを通してアクセスされることを意図している。そのような使い方ができなくなってしまうので、CSRFの防御は組み込まれていない。したがって、リバースプロキシを使う際には、CSRFを防ぐためにそういうパスをブロックした方が良いだろう変更が起きないエンドポイントに対しては、XSSを防ぐために、Access-Control-Allow-OriginのようなCORSヘッダをリバースプロキシに設定した方が良いだろう。任意のPromQLを実行できるようにするつもりがない信頼性のないユーザーからの入力(コンソールテンプレートや自分で作った何かへのURLパラメーター)を含むPromQLクエリを構築している場合、信頼性のない入力の全てが適切にエスケープされるようにし、インジェクション攻撃を防ぐこと。some_metric{zzz=""}るだろう。Grafanaを使っている人は、ダッシュボードのパーミッションはデータソースのパーミッションではない、したがって、プロキシモードでユーザーが任意のクエリを実行する力を制限しないこと。Prometheusの各種コンポーネントはクライアント側の認証と暗号化をサポートしている。TLSクライアントが提供されている場合、SSLの検証をスキップするinsecure_skip_verifyという設定項目もしばしばある。APIやログを通じて利用可能な可能性がある。Prometheusでは、サービスディスカバリーで取得したメタデータは秘密とは考えられていない。Prometheusシステム全体で、メトリクスは秘密とは考えられていない。APIを通じて出力されることはない。コンポーネントが自分の設定をHTTPエンドポイントから出力するのは普通なので、秘密を他の設定フィールドに入れてはいけない。依存しているものに利用される他の情報源から来る秘密(例えば、EC2サービスディスカバリーで利用されるAWS_SECRET_KEY環境変数)は、Prometheusで制御できる範囲外のコードのせい、または、それが保存されている場所に出力する機能のせいで結局出力されてしまうかもしれない。Service過剰な負荷や高価なクエリに対する緩和策がいくつか講じられている。多すぎる、または効果すぎるクエリー/メトリクスが与えられると、コンポーネントは落ちてしまうだろう。悪意のある行動よりも信頼しているユーザーによってたまたま破壊される可能性の方が高い。CPU、RAM、ディスク容量、IOPS、ファイル記述子、通信帯域を含む十分なリソースをコンポーネントに与えるのはユーザーの責任である。全てのコンポーネントのエラーを監視し、エラー時に自動的に再起動させることが推奨される。ライブラリこのドキュメントは、ソースコードからビルドされた普通のバイナリについて考える。自分でソースコードを修正した場合や、Prometheusの内部を自分のコードから(公式クライアントライブラリAPIを超えて)利用した場合には、ここで記されている情報は適用できない。ビルドプロセスPrometheusのビルドパイプラインは、サードパーティーのプロバイダー上で動き、Prometheus開発チームのメンバーとそのプロバイダーのスタッフがパイプラインにアクセスできる。自分のバイナリの正確な出どころについて心配なら、プロジェクトによって事前にビルドされたバイナリに頼るのではなく、自分自身でビルドすることを推奨する。外部監査CNCFは、2018年4月から2018年6月に渡るcure53による外部のセキュリティ監査を支援した。さらなる詳細は、監査の最終報告書を呼んで下さい。見る和訳活動の支援Prometheusドキュメント和訳が役に立った方は、以下QRコードからPayPayで活動を支援して頂けるとありがたいです。Prometheusドキ...このページはPrometheus公式ドキュメント和訳+αの一部です。PrometheusドキュメントこのページはPrometheus公式ドキュメント和訳+αの一部です。PrometheusドキュメントこのページはPrometheus公式ドキュメント和訳+αの一部です。PrometheusドキュメントこのページはPrometheus公式ドキュメント和訳+αの一部です。Al...2019-01-20Prometheus公式ドキュメント和訳+αPrometheus公式ドキュメントの和訳をしています。KestrelServerOptions.Listen().月別アーカイブ参加グループプログラミングはてなブログをはじめよう!knj4484さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。