Skip to content

Commit ab50f29

Browse files
committed
OCPBUGS-59768: metrics endpoints security - add client cert auth to kube-rbac-proxy
**Problem:** OLM metrics endpoints were exposed without proper authentication, allowing unauthorized access to sensitive operational data. **Root Cause:** kube-rbac-proxy configuration was missing critical authentication argument `--client-ca-file` **Solution:** - Add missing authentication argument to kube-rbac-proxy in package-server-manager - Mount client CA certificate from new `metrics-client-ca` ConfigMap - Update ServiceMonitors to use `scrapeClass: tls-client-certificate-auth` - Create ConfigMap with service CA injection for automatic CA bundle sync **Security Impact:** - **Before:** Any HTTPS client could access metrics endpoints - **After:** Only authorized Prometheus service account (`system:serviceaccount:openshift-monitoring:prometheus-k8s`) can access metrics
1 parent e53cf30 commit ab50f29

11 files changed

+85
-13
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: metrics-client-ca
5+
namespace: openshift-operator-lifecycle-manager
6+
annotations:
7+
include.release.openshift.io/self-managed-high-availability: "true"
8+
service.beta.openshift.io/inject-cabundle: "true"
9+
include.release.openshift.io/ibm-cloud-managed: "true"
10+
capability.openshift.io/name: "OperatorLifecycleManager"
11+
include.release.openshift.io/hypershift: "true"
12+
data: {}

manifests/0000_50_olm_06-psm-operator.deployment.ibm-cloud-managed.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ spec:
3535
- --upstream=http://127.0.0.1:9090/
3636
- --tls-cert-file=/etc/tls/private/tls.crt
3737
- --tls-private-key-file=/etc/tls/private/tls.key
38+
- --client-ca-file=/etc/tls/client/client-ca-file
3839
- --logtostderr=true
3940
image: quay.io/openshift/origin-kube-rbac-proxy:latest
4041
imagePullPolicy: IfNotPresent
@@ -57,6 +58,9 @@ spec:
5758
volumeMounts:
5859
- mountPath: /etc/tls/private
5960
name: package-server-manager-serving-cert
61+
- mountPath: /etc/tls/client
62+
name: metrics-client-ca
63+
readOnly: true
6064
- name: package-server-manager
6165
securityContext:
6266
allowPrivilegeEscalation: false
@@ -120,3 +124,6 @@ spec:
120124
- name: package-server-manager-serving-cert
121125
secret:
122126
secretName: package-server-manager-serving-cert
127+
- name: metrics-client-ca
128+
configMap:
129+
name: metrics-client-ca

manifests/0000_50_olm_06-psm-operator.deployment.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ spec:
3535
- --upstream=http://127.0.0.1:9090/
3636
- --tls-cert-file=/etc/tls/private/tls.crt
3737
- --tls-private-key-file=/etc/tls/private/tls.key
38+
- --client-ca-file=/etc/tls/client/client-ca-file
3839
- --logtostderr=true
3940
image: quay.io/openshift/origin-kube-rbac-proxy:latest
4041
imagePullPolicy: IfNotPresent
@@ -57,6 +58,9 @@ spec:
5758
volumeMounts:
5859
- mountPath: /etc/tls/private
5960
name: package-server-manager-serving-cert
61+
- mountPath: /etc/tls/client
62+
name: metrics-client-ca
63+
readOnly: true
6064
- name: package-server-manager
6165
securityContext:
6266
allowPrivilegeEscalation: false
@@ -121,3 +125,6 @@ spec:
121125
- name: package-server-manager-serving-cert
122126
secret:
123127
secretName: package-server-manager-serving-cert
128+
- name: metrics-client-ca
129+
configMap:
130+
name: metrics-client-ca

manifests/0000_50_olm_06-psm-operator.servicemonitor.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ metadata:
99
capability.openshift.io/name: "OperatorLifecycleManager"
1010
spec:
1111
endpoints:
12-
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
13-
interval: 30s
12+
- interval: 30s
1413
port: metrics
1514
scheme: https
1615
tlsConfig:
17-
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
1816
serverName: package-server-manager-metrics.openshift-operator-lifecycle-manager.svc
17+
scrapeClass: tls-client-certificate-auth
1918
namespaceSelector:
2019
matchNames:
2120
- openshift-operator-lifecycle-manager

manifests/0000_90_olm_00-service-monitor.yaml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ metadata:
5353
include.release.openshift.io/hypershift: "true"
5454
spec:
5555
endpoints:
56-
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
5756
interval: 30s
5857
metricRelabelings:
5958
- action: drop
@@ -63,8 +62,8 @@ spec:
6362
port: https-metrics
6463
scheme: https
6564
tlsConfig:
66-
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
6765
serverName: olm-operator-metrics.openshift-operator-lifecycle-manager.svc
66+
scrapeClass: tls-client-certificate-auth
6867
jobLabel: component
6968
namespaceSelector:
7069
matchNames:
@@ -87,7 +86,6 @@ metadata:
8786
include.release.openshift.io/hypershift: "true"
8887
spec:
8988
endpoints:
90-
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
9189
interval: 30s
9290
metricRelabelings:
9391
- action: drop
@@ -97,8 +95,8 @@ spec:
9795
port: https-metrics
9896
scheme: https
9997
tlsConfig:
100-
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
10198
serverName: catalog-operator-metrics.openshift-operator-lifecycle-manager.svc
99+
scrapeClass: tls-client-certificate-auth
102100
jobLabel: component
103101
namespaceSelector:
104102
matchNames:
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
apiVersion: v1
2+
kind: ConfigMap
3+
metadata:
4+
name: metrics-client-ca
5+
namespace: openshift-operator-lifecycle-manager
6+
annotations:
7+
include.release.openshift.io/self-managed-high-availability: "true"
8+
service.beta.openshift.io/inject-cabundle: "true"
9+
include.release.openshift.io/ibm-cloud-managed: "true"
10+
capability.openshift.io/name: "OperatorLifecycleManager"
11+
include.release.openshift.io/hypershift: "true"
12+
data: {}

microshift-manifests/0000_50_olm_06-psm-operator.deployment.ibm-cloud-managed.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ spec:
3535
- --upstream=http://127.0.0.1:9090/
3636
- --tls-cert-file=/etc/tls/private/tls.crt
3737
- --tls-private-key-file=/etc/tls/private/tls.key
38+
- --client-ca-file=/etc/tls/client/client-ca-file
3839
- --logtostderr=true
3940
image: quay.io/openshift/origin-kube-rbac-proxy:latest
4041
imagePullPolicy: IfNotPresent
@@ -57,6 +58,9 @@ spec:
5758
volumeMounts:
5859
- mountPath: /etc/tls/private
5960
name: package-server-manager-serving-cert
61+
- mountPath: /etc/tls/client
62+
name: metrics-client-ca
63+
readOnly: true
6064
- name: package-server-manager
6165
securityContext:
6266
allowPrivilegeEscalation: false
@@ -120,3 +124,6 @@ spec:
120124
- name: package-server-manager-serving-cert
121125
secret:
122126
secretName: package-server-manager-serving-cert
127+
- name: metrics-client-ca
128+
configMap:
129+
name: metrics-client-ca

microshift-manifests/0000_50_olm_06-psm-operator.deployment.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ spec:
3535
- --upstream=http://127.0.0.1:9090/
3636
- --tls-cert-file=/etc/tls/private/tls.crt
3737
- --tls-private-key-file=/etc/tls/private/tls.key
38+
- --client-ca-file=/etc/tls/client/client-ca-file
3839
- --logtostderr=true
3940
image: quay.io/openshift/origin-kube-rbac-proxy:latest
4041
imagePullPolicy: IfNotPresent
@@ -57,6 +58,9 @@ spec:
5758
volumeMounts:
5859
- mountPath: /etc/tls/private
5960
name: package-server-manager-serving-cert
61+
- mountPath: /etc/tls/client
62+
name: metrics-client-ca
63+
readOnly: true
6064
- name: package-server-manager
6165
securityContext:
6266
allowPrivilegeEscalation: false
@@ -121,3 +125,6 @@ spec:
121125
- name: package-server-manager-serving-cert
122126
secret:
123127
secretName: package-server-manager-serving-cert
128+
- name: metrics-client-ca
129+
configMap:
130+
name: metrics-client-ca

microshift-manifests/0000_50_olm_06-psm-operator.servicemonitor.yaml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ metadata:
99
capability.openshift.io/name: "OperatorLifecycleManager"
1010
spec:
1111
endpoints:
12-
- bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
13-
interval: 30s
12+
- interval: 30s
1413
port: metrics
1514
scheme: https
1615
tlsConfig:
17-
caFile: /etc/prometheus/configmaps/serving-certs-ca-bundle/service-ca.crt
1816
serverName: package-server-manager-metrics.openshift-operator-lifecycle-manager.svc
17+
scrapeClass: tls-client-certificate-auth
1918
namespaceSelector:
2019
matchNames:
2120
- openshift-operator-lifecycle-manager

microshift-manifests/kustomization.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ resources:
1515
- 0000_50_olm_00-pprof-secret.yaml
1616
- 0000_50_olm_00-subscriptions.crd.yaml
1717
- 0000_50_olm_01-networkpolicies.yaml
18+
- 0000_50_olm_02-metrics-client-ca.configmap.yaml
1819
- 0000_50_olm_02-olm-operator.serviceaccount.yaml
1920
- 0000_50_olm_03-olmconfig.yaml
2021
- 0000_50_olm_03-services.yaml

0 commit comments

Comments
 (0)