Skip to content

Commit 085cc45

Browse files
Merge pull request #8661 from SimonUnge/prometheus_authentication_v2
(Opt-in) Prometheus scraping endpoint authentication
2 parents c7e4984 + c98c401 commit 085cc45

File tree

16 files changed

+568
-267
lines changed

16 files changed

+568
-267
lines changed

deps/rabbitmq_management/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ rabbitmq_suite(
190190
deps = [
191191
"//deps/rabbitmq_ct_helpers:erlang_app",
192192
"//deps/rabbitmq_management_agent:erlang_app",
193+
"//deps/rabbitmq_web_dispatch:erlang_app",
193194
"@proper//:erlang_app",
194195
],
195196
)
@@ -198,6 +199,7 @@ rabbitmq_integration_suite(
198199
name = "rabbit_mgmt_test_db_SUITE",
199200
deps = [
200201
"//deps/rabbitmq_management_agent:erlang_app",
202+
"//deps/rabbitmq_web_dispatch:erlang_app",
201203
],
202204
)
203205

@@ -211,6 +213,7 @@ rabbitmq_suite(
211213
size = "small",
212214
deps = [
213215
"//deps/rabbitmq_management_agent:erlang_app",
216+
"//deps/rabbitmq_web_dispatch:erlang_app",
214217
"@proper//:erlang_app",
215218
],
216219
)

deps/rabbitmq_management/app.bzl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,10 @@ def test_suite_beam_files(name = "test_suite_beam_files"):
571571
outs = ["test/rabbit_mgmt_stats_SUITE.beam"],
572572
app_name = "rabbitmq_management",
573573
erlc_opts = "//:test_erlc_opts",
574-
deps = ["//deps/rabbitmq_management_agent:erlang_app", "@proper//:erlang_app"],
574+
deps = [
575+
"//deps/rabbitmq_management_agent:erlang_app",
576+
"@proper//:erlang_app",
577+
],
575578
)
576579
erlang_bytecode(
577580
name = "rabbit_mgmt_test_db_SUITE_beam_files",
@@ -581,7 +584,11 @@ def test_suite_beam_files(name = "test_suite_beam_files"):
581584
hdrs = ["include/rabbit_mgmt.hrl"],
582585
app_name = "rabbitmq_management",
583586
erlc_opts = "//:test_erlc_opts",
584-
deps = ["//deps/rabbit_common:erlang_app", "//deps/rabbitmq_ct_helpers:erlang_app", "//deps/rabbitmq_management_agent:erlang_app"],
587+
deps = [
588+
"//deps/rabbit_common:erlang_app",
589+
"//deps/rabbitmq_ct_helpers:erlang_app",
590+
"//deps/rabbitmq_management_agent:erlang_app",
591+
],
585592
)
586593
erlang_bytecode(
587594
name = "rabbit_mgmt_test_unit_SUITE_beam_files",

deps/rabbitmq_management/src/rabbit_mgmt_util.erl

Lines changed: 79 additions & 248 deletions
Large diffs are not rendered by default.

deps/rabbitmq_management_agent/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ rabbitmq_app(
7272
deps = [
7373
"//deps/rabbit:erlang_app",
7474
"//deps/rabbit_common:erlang_app",
75+
"//deps/rabbitmq_web_dispatch:erlang_app",
7576
"@ranch//:erlang_app",
7677
],
7778
)

deps/rabbitmq_management_agent/app.bzl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def all_beam_files(name = "all_beam_files"):
3434
"//deps/rabbit:erlang_app",
3535
"//deps/rabbit_common:erlang_app",
3636
"//deps/rabbitmq_cli:erlang_app",
37+
"//deps/rabbitmq_web_dispatch:erlang_app",
3738
],
3839
)
3940

@@ -72,6 +73,7 @@ def all_test_beam_files(name = "all_test_beam_files"):
7273
"//deps/rabbit:erlang_app",
7374
"//deps/rabbit_common:erlang_app",
7475
"//deps/rabbitmq_cli:erlang_app",
76+
"//deps/rabbitmq_web_dispatch:erlang_app",
7577
],
7678
)
7779

deps/rabbitmq_management_agent/include/rabbit_mgmt_records.hrl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,8 @@
55
%% Copyright (c) 2007-2023 VMware, Inc. or its affiliates. All rights reserved.
66
%%
77

8-
-record(context, {user,
9-
password = none,
10-
impl}). % storage for a context of the resource handler
8+
-include_lib("rabbitmq_web_dispatch/include/rabbitmq_web_dispatch_records.hrl").
119

1210
-record(range, {first :: integer(),
1311
last :: integer(),
1412
incr :: integer()}).
15-
16-

deps/rabbitmq_prometheus/app.bzl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ def all_beam_files(name = "all_beam_files"):
2424
deps = [
2525
"//deps/amqp_client:erlang_app",
2626
"//deps/rabbit_common:erlang_app",
27+
"//deps/rabbitmq_web_dispatch:erlang_app",
2728
"@prometheus//:erlang_app",
2829
],
2930
)
@@ -53,6 +54,7 @@ def all_test_beam_files(name = "all_test_beam_files"):
5354
deps = [
5455
"//deps/amqp_client:erlang_app",
5556
"//deps/rabbit_common:erlang_app",
57+
"//deps/rabbitmq_web_dispatch:erlang_app",
5658
"@prometheus//:erlang_app",
5759
],
5860
)
@@ -114,5 +116,8 @@ def test_suite_beam_files(name = "test_suite_beam_files"):
114116
outs = ["test/rabbit_prometheus_http_SUITE.beam"],
115117
app_name = "rabbitmq_prometheus",
116118
erlc_opts = "//:test_erlc_opts",
117-
deps = ["//deps/amqp_client:erlang_app", "//deps/rabbitmq_ct_helpers:erlang_app"],
119+
deps = [
120+
"//deps/amqp_client:erlang_app",
121+
"//deps/rabbitmq_ct_helpers:erlang_app",
122+
],
118123
)

deps/rabbitmq_prometheus/priv/schema/rabbitmq_prometheus.schema

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,8 @@ end}.
141141
{mapping, "prometheus.ssl.max_keepalive", "rabbitmq_prometheus.ssl_config.cowboy_opts.max_keepalive",
142142
[{datatype, integer}, {validators, ["non_negative_integer"]}]}.
143143

144-
{mapping, "prometheus.filter_aggregated_queue_metrics_pattern", "rabbitmq_prometheus.filter_aggregated_queue_metrics_pattern", [{datatype, string}]}.
144+
{mapping, "prometheus.filter_aggregated_queue_metrics_pattern", "rabbitmq_prometheus.filter_aggregated_queue_metrics_pattern", [{datatype, string}]}.
145+
146+
%% Authentication options ========================================================
147+
{mapping, "prometheus.authentication.enabled", "rabbitmq_prometheus.authentication.enabled",
148+
[{datatype, {enum, [true, false]}}]}.

deps/rabbitmq_prometheus/src/rabbit_prometheus_handler.erl

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,38 @@
1111
-export([setup/0]).
1212

1313
-include_lib("amqp_client/include/amqp_client.hrl").
14+
-include_lib("rabbitmq_web_dispatch/include/rabbitmq_web_dispatch_records.hrl").
1415

1516
-define(SCRAPE_DURATION, telemetry_scrape_duration_seconds).
1617
-define(SCRAPE_SIZE, telemetry_scrape_size_bytes).
1718
-define(SCRAPE_ENCODED_SIZE, telemetry_scrape_encoded_size_bytes).
1819

20+
-define(AUTH_REALM, "Basic realm=\"RabbitMQ Prometheus\"").
21+
1922
%% ===================================================================
2023
%% Cowboy Handler Callbacks
2124
%% ===================================================================
2225

2326
init(Req, _State) ->
24-
{cowboy_rest, Req, #{}}.
27+
{cowboy_rest, Req, #context{}}.
28+
2529

2630
content_types_provided(ReqData, Context) ->
2731
%% Since Prometheus 2.0 Protobuf is no longer supported
2832
{[{{<<"text">>, <<"plain">>, '*'}, generate_response}], ReqData, Context}.
2933

3034
is_authorized(ReqData, Context) ->
31-
{true, ReqData, Context}.
35+
AuthSettings = rabbit_misc:get_env(rabbitmq_prometheus, authentication, []),
36+
case proplists:get_value(enabled, AuthSettings) of
37+
true ->
38+
rabbit_web_dispatch_access_control:is_authorized_monitor(ReqData,
39+
Context,
40+
#auth_settings{basic_auth_enabled = true,
41+
auth_realm = ?AUTH_REALM});
42+
_ ->
43+
{true, ReqData, Context}
44+
end.
45+
3246

3347
setup() ->
3448
setup_metrics(telemetry_registry()),

deps/rabbitmq_prometheus/test/config_schema_SUITE_data/rabbitmq_prometheus.snippets

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,5 +296,14 @@
296296
{ssl_config, [{cowboy_opts, [{max_keepalive, 120}]}]}
297297
]}
298298
], [rabbitmq_prometheus]
299+
},
300+
301+
{authentication,
302+
"prometheus.authentication.enabled = true",
303+
[
304+
{rabbitmq_prometheus, [
305+
{authentication, [{enabled, true}]}
306+
]}
307+
], [rabbitmq_prometheus]
299308
}
300309
].

0 commit comments

Comments
 (0)