---
title: Secured Monitoring
authors:
  - "@astefanutti"
reviewers:
  - TBD
approvers:
  - TBD
creation-date: 2020-07-06
last-updated: 2020-17-07
status: implementable
see-also: []
replaces: []
superseded-by: []
---

= Secured Monitoring

== Summary

This proposal aims at enabling secured integration monitoring using the https://github.com/coreos/prometheus-operator[Prometheus Operator], deployed on Kubernetes or OpenShift.
It focuses specifically on securing the _metrics_ endpoints exposed by the integrations that are configured by the https://camel.apache.org/camel-k/latest/traits/prometheus.html[Prometheus trait].

== Motivation

While these endpoints typically expose read-only monitoring data, that are only accessible from within the cluster, making sure only authorized Prometheus instances can access integrations monitoring data can become a security requirement for multi-tenant clusters, and reduce the surface attack in case of a compromised pod.

== Goals

The goal of this proposal is to secure the communication between Prometheus and the _metrics_ endpoints exposed by the integrations, specifically:

- As a user, I can run an integration whose _metrics_ endpoint has RBAC enabled and auto-configured
- As a user, I can run an integration whose _metrics_ endpoint has TLS enabled and auto-configured

The implementation should rely on standard https://kubernetes.io/docs/reference/access-authn-authz/rbac/[Kubernetes RBAC authorization], as well as the security mechanisms supported by the Prometheus Operator.

== Current Architecture

It is recommended to use the Prometheus Operator to set up Prometheus on Kubernetes / OpenShift clusters.

The Prometheus Operator defines the `Prometheus` custom resource definition (CRD) to configure a Prometheus setup, to be run in a Kubernetes cluster.
The operator also defines the `ServiceMonitor` CRD, that is used to define the _metrics_ endpoints that managed Prometheus instances should scrape, based on label selection, as depicted in the following diagram:

image::assets/prometheus-operator.png[Prometheus Operator architecture]

== Proposal

The `ServiceMonitor` CRD declares a `.spec` section that defines a list of target ``Endpoint``s. The `Endpoint` API already supports:

. Bearer token authentication
. Basic authentication (username / password)
. Client certificate authentication
. TLS encryption

As excerpted from the Prometheus operator `v1` API:

[source,go]
----
package v1

import v1 "k8s.io/api/core/v1"

// Endpoint defines a scrapeable endpoint serving Prometheus metrics.
type Endpoint struct {
  // TLS configuration to use when scraping the endpoint
  TLSConfig *TLSConfig `json:"tlsConfig,omitempty"`
  // File to read bearer token for scraping targets.
  BearerTokenFile string `json:"bearerTokenFile,omitempty"` //<1>
  // BasicAuth allow an endpoint to authenticate over basic authentication
  // More info: https://prometheus.io/docs/operating/configuration/#endpoints
  BasicAuth *BasicAuth `json:"basicAuth,omitempty"` //<2>
}

// BasicAuth allow an endpoint to authenticate over basic authentication
type BasicAuth struct {
  // The secret that contains the username for authenticate
  Username v1.SecretKeySelector `json:"username,omitempty"`
  // The secret that contains the password for authenticate
  Password v1.SecretKeySelector `json:"password,omitempty"`
}

// TLSConfig specifies TLS configuration parameters.
type TLSConfig struct {
  // The CA cert to use for the targets.
  CAFile string `json:"caFile,omitempty"`
  // The client cert file for the targets.
  CertFile string `json:"certFile,omitempty"` //<3>
  // The client key file for the targets.
  KeyFile string `json:"keyFile,omitempty"`
  // Used to verify the hostname for the targets.
  ServerName string `json:"serverName,omitempty"`
  // Disable target certificate validation.
  InsecureSkipVerify bool `json:"insecureSkipVerify,omitempty"`
}
----

While the Prometheus trait already supports the auto-configuration of the `ServiceMonitor` resources, it does not leverage these mechanisms, and exposes the integrations monitoring data without authentication nor encryption.

== Proposal

The _metrics_ endpoint configured by the Prometheus trait can be gated using https://github.com/brancz/kube-rbac-proxy[kube-rbac-proxy], deployed as a side-car container, into the integration pod, and configured using https://kubernetes.io/docs/reference/access-authn-authz/authentication/#service-account-tokens[service account token authentication].

The communication between Prometheus and the integration during metrics scraping follows the sequence illustrated in the diagram below:

image::assets/service-account-token-monitoring.svg[Service Account Token Authentication]

. The Prometheus instance triggers a scraping request to the integration _metrics_ endpoint,
. The _kube-rbac-proxy_ side-car proxies the request,
. The _kube-rbac-proxy_ proxy presents the certificate generated for the integration, that's mounted into the side-car container, to Prometheus that uses it to authenticate the server:
.. On Kubernetes, solutions like https://github.com/jetstack/cert-manager[cert-manager] can be used to implement the certificate issuance,
.. On OpenShift, the Prometheus trait configures a https://docs.openshift.com/container-platform/4.4/authentication/certificates/service-serving-certificate.html[service signing certificate] for the integration pod,
. Prometheus verifies the integration certificate, and compares its identity with the `ServerName` field from the `ServiceMonitor` TLS configuration targeting the integration,
. Prometheus sends the configured service account token to the _kube-rbac-proxy_ proxy that authenticates it by triggering a `TokenReview` request to the API server,
. The _kube-rbac-proxy_ proxy authorizes the user identified with the service account token by triggering a `SubjectAccessReview` request for the `/metrics` resource to the API server,
. The _kube-rbac-proxy_ proxy forwards the authorized request to the upstream integration _metrics_ endpoint that returns the monitoring data.

== Risks and Mitigation

The use of `kube-rbac-proxy` as a side-car has the advantage to encapsulate the authentication and authorization concerns, so that all kind of Prometheus exporters can be used out-of-the-box.

While passing a token for client authentication can be a security risk, as the receiving server can use the token to impersonate the client, it is mitigated by the authentication of the integration using its certificate, and the validation of its identity against the `ServerName` field of the corresponding `ServiceMonitor` resource.

== Open Points

- The proposal compatibility with the ability to migrate from `ServiceMonitor` to `PodMonitoring` should be assessed: see https://github.com/apache/camel-k/issues/1555[#1555].
- Quarkus serves all HTTP traffic from a single port and does not support having a separate port for the _metrics_ endpoint: see https://github.com/quarkusio/quarkus/issues/7893[quarkusio/quarkus#7893]. The ability to use `kube-rbac-proxy` in parallel of another solution for securing application traffic should be confirmed.

== Alternatives

=== Client Certificate

The _metrics_ endpoint configured by the Prometheus trait can be gated using https://github.com/brancz/kube-rbac-proxy[kube-rbac-proxy], deployed as a side-car container, into the integration pod, and configured using client certificate authentication.

The communication between Prometheus and the integration during metrics scraping follows the sequence illustrated in the diagram below:

image::assets/client-certificate-monitoring.svg[Client Certificate Authentication]

. The Prometheus instance triggers a scraping request to the integration _metrics_ endpoint,
. The _kube-rbac-proxy_ side-car proxies the request,
. The _kube-rbac-proxy_ proxy presents the certificate generated for the integration, that's mounted into the side-car container, to Prometheus that uses it to authenticate the server:
.. On Kubernetes, solutions like https://github.com/jetstack/cert-manager[cert-manager] can be used to implement the certificate issuance,
.. On OpenShift, the Prometheus trait configures a https://docs.openshift.com/container-platform/4.4/authentication/certificates/service-serving-certificate.html[service signing certificate] for the integration pod,
. Prometheus verifies the integration certificate, and compares its identity with the `ServerName` field from the `ServiceMonitor` TLS configuration targeting the integration,
. Prometheus sends a client certificate, generated using an internal PKI certificate authority, to the _kube-rbac-proxy_ proxy that validates it using the CA public certificate mounted into the _kube-rbac-proxy_ container,
. The _kube-rbac-proxy_ proxy authorizes the user identified with the client certificate by triggering a `SubjectAccessReview` request for the `/metrics` resource to the API server,
. The _kube-rbac-proxy_ proxy forwards the authorized request to the upstream integration _metrics_ endpoint that returns the monitoring data.

The use of both a service signing certificate and a client certificate enables mutual TLS (mTLS).

The https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/[certificates API] could ideally be used for the client certificate issuance. However, it seems there is no convention about the CA used to sign the certificates, that could be relied on consistently to easily distribute the CA to the applications.

A custom CA could be used, along with solutions like https://github.com/jetstack/cert-manager[cert-manager] to implement the certificate issuance flow.

Conversely, on a typical OpenShift 4 cluster, the service signing CA can be accessed with:

```sh
$ oc get secrets/signing-key -n openshift-service-ca -o "jsonpath={.data['tls\.key']}" | base64 --decode > ca.key
```

However, the service signing certificates cannot be used for client authentication.

=== Network Policies

`NetworkPolicies` resources could be used to isolate tenants, though they are not supported by all providers, installers and distributions. Besides, they do not address the case where an attacker gains control of a pod, from which it’d be possible to discover sensitive information about the workload within this pod network policies graph.

=== Basic Authentication

While the Prometheus operator supports basic authentication (via the `BasicAuth` field from the `ServiceMonitor` resource), it is not supported by _kube-rbac-proxy_. Not using the later would require direct communication to the Prometheus exporters, hence requiring them to handle authentication and authorisation, leading to duplication. Besides, username / password credentials lifecycle would not be handled by the platform, as it is for tokens and certificates, e.g., expiry, rotation, …
