Monitoring Specific Keycloak Configuration📜
Table of Contents📜
- Keycloak configuration
- Grafana configuration
- Prometheus+Alertmanager configuration
These are the items you need to configure after keycloak and Grafana are working on your cluster, or you are utilizing an external keycloak eg: login.dso.mil
Keycloak Configuration📜
Grafana📜
- Create a grafana client scope named “Grafana” with the following mappings
| Name | Mapper Type | Mapper Selection Sub | Token Claim Name | Claim JSON Type | Other | 
|---|---|---|---|---|---|
| profile | User Attribute | profile | profile | String | Add to ID token: on | 
| Add to access token: on | |||||
| add to userinfo: on | |||||
| multivalued: off | |||||
| aggr attrib values: off | |||||
| User Property | String | Add to ID token: on | |||
| Add to access token: on | |||||
| add to userinfo: on | |||||
| realm roles | User Realm Role | realm roles | realm_access.roles | String | Add to ID token: off | 
| Add to access token: on | |||||
| add to userinfo: off | |||||
| client roles | User Client Role | N/A | resource_access.${client_id}.roles | String | Add to ID token: off | 
| Add to access token: on | |||||
| add to userinfo: off | |||||
| username | User Property | username | preferred_username | String | Add to ID token: on | 
| Add to access token: on | |||||
| add to userinfo: on | |||||
| groups | Group Membership | N/A | groups | N/A | Full group path: on | 
| Add to ID token: on | |||||
| Add to access token: on | |||||
| add to userinfo: on | 
- 
Create a grafana client 
- 
Change the following configuration items 
- access type: confidential this will enable a “Credentials” tab within the client configuration page
- Direct Access Grants Enabled: Off
- Valid Redirect URIs: https://grafana.DOMAIN/login/generic_oauth
- Base URL: https://grafana.DOMAIN
- Set Client Scopes
- Default Client Scopes: Grafana (the client scope you created in the previous step)
- optional client scopes: N/A
- Take note of the client secret in the credential tab
Prometheus📜
- 
Create a prometheus client 
- 
Change the following configuration items 
- access type: confidential this will enable a “Credentials” tab within the client configuration page
- Direct Access Grants Enabled: Off
- Valid Redirect URIs: https://prometheus.DOMAIN/login/generic_oauth
- Base URL: https://prometheus.DOMAIN
- Take note of the client secret in the credential tab
Alertmanager📜
- 
Create an alertmanager client 
- 
Change the following configuration items 
- access type: confidential this will enable a “Credentials” tab within the client configuration page
- Direct Access Grants Enabled: Off
- Valid Redirect URIs: https://alertmanager.DOMAIN/login/generic_oauth
- Base URL: https://alertmanager.DOMAIN
- Take note of the client secret in the credential tab
Grafana Configuration📜
Grafana configuration can be set via the editing the following section in the chart’s values.
- It is recommended to utilize BigBang’s encrypted helm values support to paste in the client_secret directly.
- Below config are example BigBang values for enabling and configuring OIDC support:
sso:
  oidc:
    host: login.dso.mil
    realm: baby-yoda
  certificate_authority: ''
monitoring:
  sso:
    enabled: true
    grafana:
      client_id: ""
      client_secret: ""
      scopes: "openid Grafana" # default 'openid profile email'
      allow_sign_up: "true" # true/false if Grafana will auto-create users from Keycloak after successful first login
- 
The root_url setting DOES NOT need to be edited if you filled in your “hostname” variable in your values file and istio is enabled, update only if desiring a different prefix or if not using HTTPS. 
- 
Setting monitoring.sso.enabled=true in BigBang values will set Grafana OIDC to enabled. 
- Update role_attribute_path to either “Editor” or “Admin” to allow all OIDC created users to be able to edit dashboards or administer the grafana install.
Enabling Grafana OIDC in BigBang📜
monitoring:
  sso:
    enabled: true
    grafana:
      client_id: grafana
      client_secret: secret
OIDC Custom CA📜
Grafana can establish trust using a CA cert file with OIDC auth connections. An example of this when using Big Bang to deploy grafana with a secret named grafana-oidc-secret is below. This assumes the secret is created in the same namespace (an example of secret creation can also be found below):
monitoring:
  sso:
    enabled: true
    grafana:
      scopes: "openid Grafana" #this is a sample client scope, review docs/KEYCLOAK.md
      allow_sign_up: "true"
      role_attribute_path: "Viewer"
      tls_client_cert: ""
      tls_client_key: ""
      tls_client_ca : "/etc/oidc/ca.pem"
      tls_skip_verify_insecure: false
      client_id: "grafana"    #this is a sample client_id, review docs/KEYCLOAK.md
      client_secret: "secret" #this is a sample secret, review docs/KEYCLOAK.md
      auth_url: https://login.dso.mil/auth/realms/baby-yoda/protocol/openid-connect/auth
      token_url: https://login.dso.mil/auth/realms/baby-yoda/protocol/openid-connect/token
      api_url: https://login.dso.mil/auth/realms/baby-yoda/protocol/openid-connect/userinfo
      # allowed_domains: ""
      # empty_scopes: false
monitoring:
  values:
    grafana:
      extraSecretMounts:
        - name: "oidc-ca-cert"
          mountPath: "/etc/oidc/ca.pem"
          secretName: "grafana-oidc-secret"
          readOnly: true
          subPath: "ca.pem"
Secret creation example that works with this example”
kubectl create secret generic grafana-oidc-secret --from-file=ca.pem=/path/to/cert.pem -n monitoring
Prometheus + Alertmanager Configuration📜
Configuration of Keycloak/OIDC auth in front of Prometheus+Alertmanager requires the following:
sso:
  oidc:
    host: login.dso.mil
    realm: baby-yoda
  certificate_authority: ''
  # JWKS value is different for each Keycloak instance, will need to be retrieved after deployment. Can be found with: $ curl https://$KEYCLOAK_URL$/auth/realms/$KEYCLOAK_REALM$ /protocol/openid-connect/certs
  jwks: ""
monitoring:
  sso:
    enabled: true
    prometheus:
      client_id: ""
      client_secret: ""
    alertmanager:
      client_id: ""
      client_secret: ""
authservice:
  enabled: true
- 
Configuration above is for BigBang, chains for authservice are automatically populated when above settings are present. 
- 
Setting monitoring.sso.enabled to true installs an HAProxy container in the authservice namespace which works in conjunction with Authservice itself to place an OIDC redirect in front of Prometheus+Alertmanager. 
- When monitoring.sso.enabled is set to true, the Prometheus+Alertmanager VirtualServices are replaced with ones that route to the HAProxy Deployment rather than directly to the services themselves.