Compare commits

...

39 Commits

Author SHA1 Message Date
Sebastian Kawelke
ac712f4063 Adds further kyverno policies
Signed-off-by: Sebastian Kawelke <sebastian.kawelke@l3montree.com>
2025-12-03 11:48:43 +01:00
Sebastian Kawelke
56ddb422ca Adds sec context and workload isolation kyverno checks
Signed-off-by: Sebastian Kawelke <sebastian.kawelke@l3montree.com>
2025-12-01 13:33:13 +01:00
Thorsten Roßner
7b592a24b0 docs(migrations.md): Fix section sequence and some text streamlining 2025-11-19 17:22:51 +01:00
Thomas Kaltenbrunner
f3f707c9ee fix(open-xchange): Optimize Dovecot Pro full-text search caches; review migrations.md for required upgrade steps 2025-11-19 17:20:20 +01:00
Thomas Kaltenbrunner
850761e047 fix(open-xchange): Update Dovecot configuration based on supplier's best practise review 2025-11-19 17:20:02 +01:00
Norbert Tretkowski
12379d67e0 feat(nubus): Update from v1.14.0 to v1.15.2 2025-11-19 16:05:03 +01:00
Thorsten Roßner
d25c95f06b fix(collabora): Update Controller to 1.1.6 incl. Helm chart update to 1.1.10 2025-11-17 11:51:11 +01:00
Thorsten Roßner
8de0f5de72 fix(collabora): Update from 25.04.5 to 25.04.6 2025-11-17 06:27:21 +00:00
Thorsten Roßner
152221fa79 fix(nubus): Remove legacy UMC Keycloak client that was used for SAML connection with the Nubus portal 2025-11-14 07:51:31 +00:00
Sven-Erik Schmidt
7aa717c050 fix(helmfile): Streamline annotations 2025-11-12 11:28:49 +01:00
Oliver Günther
19438c0281 feat(openproject): Update OpenProject from 16.5.1 to 16.6.0 2025-11-11 10:53:50 +00:00
Clément Aubin
02a3b77114 fix(xwiki): Update XWiki from 17.4.4 to 17.4.7 2025-11-10 15:46:13 +00:00
Thorsten Roßner
4655942762 chore(release): 1.9.0 [skip ci]
# [1.9.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/compare/v1.8.0...v1.9.0) (2025-11-07)

### Bug Fixes

* **collabora:** Update from 25.04.4.3.1 to 25.04.5.3.1 ([e0128e6](e0128e6ccf))
* **element:** Increase message and media rate limits ([13968a8](13968a8133))
* **element:** Update favicon to use PNG version ([f8104f6](f8104f6358))
* **element:** Update Synapse from v1.137.0 to v1.141.0; fixes https://github.com/element-hq/synapse/security/advisories/GHSA-fh66-fcv5-jjfr which applies to all openDesk deployments using Element/Matrix with federation enabled ([02d3021](02d3021c4b))
* **element:** Update widgets primary color theme settings ([94394a1](94394a1e3e))
* **gitlab:** Add issue templates ([26da7e3](26da7e3667))
* **helmfile:** Support setting the `defaultLanguage` - relevant for OX App Suite and XWiki - in `functional.yaml.gotmpl` ([24065db](24065dbc70))
* **helmfile:** Use passwords defined in `database.yaml.gotmpl` for Cassandra when available ([0268219](026821996a))
* **notes:** Fix python path for self signed certs ([c4279d1](c4279d11bb))
* **notes:** Fix repeated redirects on expired session; Remove fetching of external assets ([c1012f4](c1012f4e65))
* **open-xchange:** Don't enable sasl auth when no relay host is set ([ff3b221](ff3b221870))
* **open-xchange:** Enable and configure defaults for ContactCollector, remove legacy config artifacts ([465f60d](465f60d4a2))
* **open-xchange:** Use masterpassword for mailfilter in migration Pods; use PLAIN instead of OAuth for SASL ([484dfaf](484dfafe64))
* **ox-connector:** Use FQDN for internal service URLs ([8593d5f](8593d5f2bd))

### Features

* **helmfile:** Add toggle for external mail client onboarding and allow non-default FQDNs for IMAP and SMTP endpoints ([25a97ab](25a97abba6))
* **open-xchange:** Enable XRechnung in Viewer ([08e6ec5](08e6ec59d2))
* **openproject:** Update from 16.4.1 to 16.5.1 ([74cf2ee](74cf2ee0d8))
2025-11-07 09:08:52 +00:00
Thorsten Roßner
f8104f6358 fix(element): Update favicon to use PNG version 2025-11-07 05:58:42 +00:00
Thorsten Roßner
02d3021c4b fix(element): Update Synapse from v1.137.0 to v1.141.0; fixes https://github.com/element-hq/synapse/security/advisories/GHSA-fh66-fcv5-jjfr which applies to all openDesk deployments using Element/Matrix with federation enabled 2025-11-07 05:58:42 +00:00
Thorsten Roßner
d2dc8c40b9 chore(publiccode.yml): Update for 1.9.0 2025-11-06 15:49:03 +01:00
Philip Gaber
47a1ed75e8 docs(migration.md): Further enhance version table and explanations 2025-11-06 15:41:29 +01:00
Philip Gaber
47e13e4ff9 docs(misc): Change to stylized note/warning/important banners 2025-11-06 14:02:34 +01:00
Philip Gaber
b2f1d609cb docs(migration.md): Enhance version semantics, corrections, enhance version table 2025-11-06 13:35:13 +01:00
ulferts
74cf2ee0d8 feat(openproject): Update from 16.4.1 to 16.5.1 2025-11-04 15:12:27 +00:00
Thorsten Roßner
25a97abba6 feat(helmfile): Add toggle for external mail client onboarding and allow non-default FQDNs for IMAP and SMTP endpoints 2025-11-04 09:00:34 +01:00
Thorsten Roßner
465f60d4a2 fix(open-xchange): Enable and configure defaults for ContactCollector, remove legacy config artifacts 2025-11-03 14:58:17 +01:00
Viktor Pracht
08e6ec59d2 feat(open-xchange): Enable XRechnung in Viewer 2025-11-03 14:58:11 +01:00
Thorsten Roßner
c115a83924 docs(data-storage.md): Set ox-connector-appcenter-ox-connector-0 PVC as optional instead of mandatory for backup 2025-11-03 10:24:49 +00:00
Thorsten Roßner
026821996a fix(helmfile): Use passwords defined in database.yaml.gotmpl for Cassandra when available 2025-11-03 10:24:49 +00:00
Thorsten Roßner
24065dbc70 fix(helmfile): Support setting the defaultLanguage - relevant for OX App Suite and XWiki - in functional.yaml.gotmpl 2025-11-03 10:24:49 +00:00
Thorsten Roßner
8151896b55 docs(architecture.md): Fix footnote 2025-11-03 10:24:49 +00:00
Thorsten Roßner
0f10d363bf ci(user-importer): Update image to 3.4.1 2025-11-03 10:24:49 +00:00
Milton Moura (Nordeck)
94394a1e3e fix(element): Update widgets primary color theme settings
Signed-off-by: Milton Moura (Nordeck) <milton.moura@nordeck.net>
2025-10-31 12:34:09 +01:00
Milton Moura
13968a8133 fix(element): Increase message and media rate limits 2025-10-27 15:01:04 +01:00
Viktor Pracht
484dfafe64 fix(open-xchange): Use masterpassword for mailfilter in migration Pods; use PLAIN instead of OAuth for SASL 2025-10-27 15:00:21 +01:00
rweber
c1012f4e65 fix(notes): Fix repeated redirects on expired session; Remove fetching of external assets 2025-10-16 09:33:13 +00:00
Thomas Kaltenbrunner
ff3b221870 fix(open-xchange): Don't enable sasl auth when no relay host is set 2025-10-08 13:37:44 +00:00
Thomas Kaltenbrunner
c4279d11bb fix(notes): Fix python path for self signed certs 2025-10-03 23:03:08 +02:00
Thorsten Roßner
98283aeef7 docs(requirements.md): Explicitly state that local-path-provisioner does not support sticky bit 2025-10-01 11:27:48 +02:00
Thorsten Roßner
26da7e3667 fix(gitlab): Add issue templates 2025-10-01 11:12:43 +02:00
Thorsten Roßner
8593d5f2bd fix(ox-connector): Use FQDN for internal service URLs 2025-10-01 08:53:30 +02:00
Thorsten Roßner
4fd991b110 docs(misc): [bmi/opendesk/documentation/handbooks#1] Fixes broken external links 2025-09-30 09:30:24 +02:00
Thorsten Roßner
e0128e6ccf fix(collabora): Update from 25.04.4.3.1 to 25.04.5.3.1 2025-09-26 09:46:08 +02:00
143 changed files with 3243 additions and 455 deletions

5
.gitignore vendored
View File

@@ -28,3 +28,8 @@ logs
# Ignore backup files, e.g. created by the script that eases the local chart development
*.bak
rendered.yaml
pol.yaml
.DS_Store

View File

@@ -762,7 +762,7 @@ import-default-accounts:
- if: >
$CI_PIPELINE_SOURCE =~ "web|schedules|trigger|api" && $NAMESPACE =~ /.+/ && $CREATE_DEFAULT_ACCOUNTS == "yes"
when: "on_success"
image: "registry.opencode.de/bmi/opendesk/components/platform-development/images/user-import:3.3.2"
image: "registry.opencode.de/bmi/opendesk/components/platform-development/images/user-import:3.4.1"
script:
- "echo \"Starting default account import for ${DOMAIN}\""
- "cd /app"

View File

@@ -0,0 +1,59 @@
## 🐛 Issue Report Template
Thank you for reporting an issue!
Please provide the details below to help us investigate and resolve it efficiently.
If you have a feature request, please select the "Feature Request" template.
### 📦 Deployment Details
- **Release version deployed**:
_(e.g. v1.4.2, commit hash, or branch name)_
- **Deployment type**:
- [ ] Fresh installation
- [ ] Upgrade (from version: ___ )
### ☸️ Kubernetes Environment
- **Kubernetes distribution** (select one):
- [ ] Rancher RKE / RKE2
- [ ] OpenShift
- [ ] k3s
- [ ] kind / minikube
- [ ] Other: ___________
- **Kubernetes version**:
_(e.g. v1.27.3)_
### 🌐 Ingress & Certificates
- **Ingress controller in use**:
- [ ] Ingress NGINX Controller version: ___
- [ ] Other: Currently only Ingress NGINX is supported
- **Certificate status**:
- [ ] Lets Encrypt
- [ ] Other publicly verifiable certificate (issuer: ___ )
- [ ] Self-signed certificate (see [`self-signed-certificated.md`](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/blob/develop/docs/enhanced-configuration/self-signed-certificates.md))
- [ ] Option 1
- [ ] Option 2a
- [ ] Option 2b
### 🔧 Tooling Versions
- **Helm version (`helm version`)**: ___________
- **Helmfile version (`helmfile --version`)**: ___________
### 🔍 Problem Description
- **Expected behavior**:
- **Observed behavior / error message**:
- **Steps to reproduce**:
1.
2.
3.
### 📄 Additional context
- Relevant logs (please redact sensitive info):
- Screenshots (if applicable):
- Other notes that might help:
## 🙌 Thank you for contributing to the project!

View File

@@ -0,0 +1,37 @@
## 💡 Feature Request Template
Thank you for suggesting an improvement!
To help us understand and evaluate your idea, please provide the details below.
### 📝 Summary
- **Short description of the feature**:
_(One or two sentences that capture the core idea)_
### 🎯 Use Case / Motivation
- **Who would benefit from this feature?**
- [ ] Operators / Administrators
- [ ] Developers
- [ ] End users
- [ ] Other: ___________
- **Why is this feature needed?**
_(Describe the problem, pain point, or gap this would address)_
### 🔧 Proposed Solution
- **How should it work?**
_(Describe the desired functionality. If relevant, provide examples, CLI flags, configuration snippets, or workflows.)_
### 📊 Alternatives Considered
- **Other approaches youve tried or thought of**:
_(Whats possible now, and why is it not sufficient?)_
### 📄 Additional Context
- Links to related issues, merge requests, or external references:
- Screenshots, diagrams, or mockups (if available):
## 🙌 Thank you for helping improve the project!

View File

@@ -1,3 +1,30 @@
# [1.9.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/compare/v1.8.0...v1.9.0) (2025-11-07)
### Bug Fixes
* **collabora:** Update from 25.04.4.3.1 to 25.04.5.3.1 ([e0128e6](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/e0128e6ccf02eaaa68fe53f5629150f0e0863ba0))
* **element:** Increase message and media rate limits ([13968a8](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/13968a8133174024dc97c5cf73e6b1e7883ce0a0))
* **element:** Update favicon to use PNG version ([f8104f6](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/f8104f635862ce6c80b66c6d7fa82df7cde9d446))
* **element:** Update Synapse from v1.137.0 to v1.141.0; fixes https://github.com/element-hq/synapse/security/advisories/GHSA-fh66-fcv5-jjfr which applies to all openDesk deployments using Element/Matrix with federation enabled ([02d3021](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/02d3021c4ba97f81165e286d1ee53b7c199f5dbb))
* **element:** Update widgets primary color theme settings ([94394a1](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/94394a1e3e3da304138263de73121a62aabbee11))
* **gitlab:** Add issue templates ([26da7e3](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/26da7e366709b3888f6786b574e3b3b11f1a6fab))
* **helmfile:** Support setting the `defaultLanguage` - relevant for OX App Suite and XWiki - in `functional.yaml.gotmpl` ([24065db](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/24065dbc7043d09dbad0d272128cfe2f33f22e48))
* **helmfile:** Use passwords defined in `database.yaml.gotmpl` for Cassandra when available ([0268219](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/026821996a4e42ac9ef25dd62c34d1697547962c))
* **notes:** Fix python path for self signed certs ([c4279d1](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/c4279d11bb46c9fe65b2ccd54dc0789d11c0d0d8))
* **notes:** Fix repeated redirects on expired session; Remove fetching of external assets ([c1012f4](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/c1012f4e656222750dda0668d8f81e5d1fbe02fd))
* **open-xchange:** Don't enable sasl auth when no relay host is set ([ff3b221](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/ff3b2218706a98b854c072de62105aa8352e3949))
* **open-xchange:** Enable and configure defaults for ContactCollector, remove legacy config artifacts ([465f60d](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/465f60d4a28ead7d7a715db71dad9d9992e8b89a))
* **open-xchange:** Use masterpassword for mailfilter in migration Pods; use PLAIN instead of OAuth for SASL ([484dfaf](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/484dfafe643e04a717e6bc3a8e6e6e6f5011c1c1))
* **ox-connector:** Use FQDN for internal service URLs ([8593d5f](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/8593d5f2bdea685a836edc9d9034ce1976cf2e96))
### Features
* **helmfile:** Add toggle for external mail client onboarding and allow non-default FQDNs for IMAP and SMTP endpoints ([25a97ab](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/25a97abba69b34c6b65a08ca7af979f3897d218b))
* **open-xchange:** Enable XRechnung in Viewer ([08e6ec5](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/08e6ec59d2abac36a8f6e5ab10fec6a5643de282))
* **openproject:** Update from 16.4.1 to 16.5.1 ([74cf2ee](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/commit/74cf2ee0d818b5e017b3c97f6fbedb05ab764d67))
# [1.8.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/compare/v1.7.1...v1.8.0) (2025-09-25)

View File

@@ -40,10 +40,10 @@ openDesk currently features the following functional main components:
| File management | Nextcloud | AGPL-3.0-or-later | [31.0.7](https://nextcloud.com/de/changelog/#31-0-7) | [Nextcloud 31](https://docs.nextcloud.com/) |
| Groupware | OX App Suite | GPL-2.0-only (backend), AGPL-3.0-or-later (frontend) | [8.41](https://documentation.open-xchange.com/appsuite/releases/8.41/) | Online documentation available from within the installed application; [Additional resources](https://documentation.open-xchange.com/) |
| Knowledge management | XWiki | LGPL-2.1-or-later | [17.4.4](https://www.xwiki.org/xwiki/bin/view/ReleaseNotes/Data/XWiki/17.4.4/) | [For the most recent release](https://www.xwiki.org/xwiki/bin/view/Documentation) |
| Portal & IAM | Nubus | AGPL-3.0-or-later | [1.14.0](https://docs.software-univention.de/nubus-kubernetes-release-notes/1.x/en/1.14.html) | [Univention's documentation website](https://docs.software-univention.de/n/en/nubus.html) |
| Project management | OpenProject | GPL-3.0-only | [16.4.1](https://www.openproject.org/docs/release-notes/16-4-1/) | [For the most recent release](https://www.openproject.org/docs/user-guide/) |
| Portal & IAM | Nubus | AGPL-3.0-or-later | [1.15.2](https://docs.software-univention.de/nubus-kubernetes-release-notes/1.x/en/1.15.html) | [Univention's documentation website](https://docs.software-univention.de/n/en/nubus.html) |
| Project management | OpenProject | GPL-3.0-only | [16.6.0](https://www.openproject.org/docs/release-notes/16-6-0/) | [For the most recent release](https://www.openproject.org/docs/user-guide/) |
| Videoconferencing | Jitsi | Apache-2.0 | [2.0.10431](https://github.com/jitsi/jitsi-meet/releases/tag/stable%2Fjitsi-meet_10431) | [For the most recent release](https://jitsi.github.io/handbook/docs/category/user-guide/) |
| Weboffice | Collabora | MPL-2.0 | [25.04.4](https://www.collaboraoffice.com/code-25-04-release-notes/) | Online documentation available from within the installed application; [Additional resources](https://sdk.collaboraonline.com/) |
| Weboffice | Collabora | MPL-2.0 | [25.04.6](https://www.collaboraoffice.com/code-25-04-release-notes/) | Online documentation available from within the installed application; [Additional resources](https://sdk.collaboraonline.com/) |
While not all components are perfectly designed for the execution inside containers, one of the project's objectives is to
align the applications with best practices regarding container design and operations.

View File

@@ -37,3 +37,8 @@ SPDX-License-Identifier = "CC-BY-SA-4.0"
path = ".gitlab/merge_request_templates/*.md"
SPDX-FileCopyrightText = "2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH"
SPDX-License-Identifier = "Apache-2.0"
[[annotations]]
path = ".gitlab/issue_templates/*.md"
SPDX-FileCopyrightText = "2025 Zentrum für Digitale Souveränität der Öffentlichen Verwaltung (ZenDiS) GmbH"
SPDX-License-Identifier = "Apache-2.0"

View File

@@ -129,7 +129,7 @@ An overview of
- components that consume the LDAP service.
- The components access the LDAP using a component-specific LDAP search account.
- components using Univention Keycloak as an identity provider (IdP).
- The components should use OAuth2 / OIDC flows if not otherwise denoted.
- All components use OAuth2 / OIDC flows.
- All components have a client configured in Keycloak.
Some components trust others to handle authentication for them.
@@ -148,7 +148,7 @@ flowchart TD
D-->K
O-->K
X-->K
P-->|SAML|K
P-->K
E[Element]-->K
J[Jitsi]-->K
I[IntercomService]-->K
@@ -184,9 +184,6 @@ sequenceDiagram
Note over Browser: User is authenticated
```
> **Note:**<br>
> Nubus' Portal and UMC still use [SAML 2.0](https://www.oasis-open.org/standard/saml/) to authenticate users. However, Nubus will switch to OIDC in an upcoming release, eliminating the use of SAML in openDesk altogether.
## Keycloak
[Keycloak](https://www.keycloak.org/) is an open-source identity and access management solution for web based applications and services. It provides features such as single sign-on, multi-factor authentication, user federation, and centralized user management.
@@ -245,7 +242,7 @@ To find out more, see [Roles & Permissions](./docs/permissions.md).
In openDesk, SCIM will be used in the future to automate the process of creating, updating, and deactivating user accounts across the applications. This ensures that user data is consistent across all applications, reducing the administrative overhead and potential for errors.
> **Note:**<br>
> [!note]
> SCIM support is planned in openDesk for 2025.
# Component integration
@@ -449,4 +446,4 @@ While the IAM manages users centrally, some applications come with local account
# Footnotes
[^1]: We are working on a new approach to provision the OpenProject filestore, therefore the accounts are planned to be deactivated/removed with openDesk 1.2.
[^1]: We are working on a new approach to provision the OpenProject filestore, therefore the accounts are planned to be deactivated/removed in the future.

View File

@@ -295,8 +295,10 @@ The following are the APIs used by the Groupware application:
| Supported standards | SOAP |
| Documentation | https://software.open-xchange.com/products/appsuite/doc/SOAP/admin/OX-Admin-SOAP.html |
> **Note**:
> You will find a catalogue of the available services including links to the respective URLs at `/webservices/` within the AppSuite host of your openDesk installation, e.g. https://webmail.myopendesk.tld/webservices/
> [!note]
> You will find a catalogue of the available services including links to the respective URLs at
> `/webservices/` within the AppSuite host of your openDesk installation,
> e.g. https://webmail.myopendesk.tld/webservices/
## REST API
@@ -648,7 +650,7 @@ The following are the APIs used by the Project management application:
## Jitsi Meet React SDK
> **Note**<br>
> [!note]
> Additional SDKs can be found at https://jitsi.github.io/handbook/docs/category/sdks/
| Name | Meet React SDK |

View File

@@ -38,7 +38,7 @@ As this is a comprehensive set of requirements most new components will not adhe
This document can be used to assess the status and possible gaps for a component which might itself be the basis for a decision if a component should be integrated into openDesk by working on closing the identified gaps.
> **Note**<br>
> [!note]
> Even an already integrated application might not adhere to all aspects of the documented requirements yet.
> Closing the gaps for existing applications therefore is an openDesk priority.
@@ -147,8 +147,9 @@ Please find more context about the topic on the [website of the German CIO](http
Each vendor must provide a certificate that their product - or the parts of the product relevant for openDesk - complies with at least WCAG 2.1 AA or [BITV 2.0](https://www.bundesfachstelle-barrierefreiheit.de/DE/Fachwissen/Informationstechnik/EU-Webseitenrichtlinie/BGG-und-BITV-2-0/Die-neue-BITV-2-0/die-neue-bitv-2-0_node.html). As the certification and related product improvements are time-consuming the focus of openDesk is that a supplier provides a plan and certification partner (contract) that shows the supplier is working towards the certification. While the aforementioned standard states the priority is the "A" level requirements, the "AA" level must be met at the end of the process.
> **Note**<br>
> Please keep in mind that WCAG 2.2 and 3.0 are work in progress. If you already work on accessibility improvements you might want to take these standards already into consideration.
> [!note]
> Please keep in mind that WCAG 2.2 and 3.0 are work in progress. If you already work on accessibility
> improvements you might want to take these standards already into consideration.
**Reference:** In the past the [accessibility evaluations](https://gitlab.opencode.de/bmi/opendesk/info/-/tree/main/24.03/Barrierefreiheit) have been executed by Dataport. But they do not do certifications.
@@ -185,7 +186,7 @@ With a central Identity- and Access Management (IAM) also the user lifecycle (UL
The focus is to have all the account information in all applications including the account's state, profile picture ([reference](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/issues/27)) and - where required - the user's group memberships. This cannot be done purely by pushing that data through OIDC claims when a user logs in to an application therefore two ways of managing an account are applicable and described in the following subchapters.
> **Note**<br>
> [!note]
> Allowing ad hoc updates of account data through OIDC claims during login is still encouraged.
### Pull: LDAP
@@ -194,8 +195,9 @@ Applications can access the IAM's LDAP to access all data necessary for managing
**Reference:** Most applications use LDAP access as per https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/blob/main/docs/components.md?ref_type=heads#identity-data-flows
> **Note**<br>
> The direct access to LDAP is going to be deprecated for most use cases. openDesk is looking into active provisioning of the user/group data into the applications using [SCIM](https://scim.cloud/).
> [!note]
> The direct access to LDAP is going to be deprecated for most use cases. openDesk is looking into active
> provisioning of the user/group data into the applications using [SCIM](https://scim.cloud/).
### Push: Provisioning

View File

@@ -67,9 +67,10 @@ XWiki,PersistentVolume,1
# Details
| Application | Data Storage | Backup | Content | (Default) Identifier | Details |
|----------------------|--------------|----------|-----------------------------------------------------------------------------------|------------------------------------------------|-----------------------------------------------------------------------------------------------------------|
| -------------------- | ------------ | -------- | --------------------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
| **ClamAV** | PVC | No | ClamAV Database | `clamav-database-clamav-simple-0` | `/var/lib/clamav` |
| **Dovecot** | PVC | Yes | openDesk CE only: User mail directories | `dovecot` | `/srv/mail` |
| | PVC | No | openDesk EE only: Metacache directory | `var-lib-dovecot-dovecot-0` | `/var/lib/dovecot` |
| | S3 | Yes | openDesk EE only: User mail | `dovecot` | `dovecot` |
| | Cassandra | Yes | openDesk EE only: Metadata and ACLs | `dovecot_dictmap`, `dovecot_acl` | |
| **Element/Synapse** | PostgreSQL | Yes | Application's main database | `matrix` | |
@@ -105,8 +106,8 @@ XWiki,PersistentVolume,1
| | | Yes | OX Guard related settings | `oxguard*` | |
| | S3 | Yes | Attachments of meetings, contacts and tasks | `openxchange` | |
| | Redis | Optional | Cache, session related data, distributed maps | | |
| | PVC | Yes | OX Connector: OXAPI access details | `ox-connector-appcenter-ox-connector-0` | `/var/lib/univention-appcenter/apps/ox-connector` |
| | | Yes | OX Connector: Application's meta data | `ox-connector-ox-contexts-ox-connector-0` | `/etc/ox-secrets` |
| | PVC | Optional | OX Connector: Caching of OX object data | for backup | `/var/lib/univention-appcenter/apps/ox-connector` |
| | | Yes | OX Connector: OX SOAP API credentials | `ox-connector-ox-contexts-ox-connector-0` | `/etc/ox-secrets` |
| **Postfix** | PVC | Yes | Mail spool | `postfix` | `/var/spool/postfix` |
| **XWiki** | PostgreSQL | Yes | Application's main database | `xwiki` | |
| | PVC | Yes | Attachments | `xwiki-data-xwiki-0` | `/usr/local/xwiki/data` |

View File

@@ -31,10 +31,10 @@ It will be extended over time as we deal with debugging cases.
We for sure do not want to reinvent the wheel, so we might link to external sources that contain helpful
information where available.
> **Warning**<br>
> You should never enable the debug option in production environments! By looking up `debug.enabled` in the deployment, you
will find the various places changes are applied when enabling debugging. So, outside of development and test
environments, you should use them thoughtfully and carefully if needed.
> [!warning]
> You should never enable the debug option in production environments! By looking up `debug.enabled` in the
> deployment, you will find the various places changes are applied when enabling debugging. So, outside of
> development and test environments, you should use them thoughtfully and carefully if needed.
# Enable debugging
@@ -49,11 +49,13 @@ This will result in:
- making the Keycloak admin console available by default at `https://id.<your_domain>/admin/`
- ingress for `http://minio-console.<your_domain>` being configured
> **Note**<br>
> When enabling debug mode and updating your deployment, you must manually delete all jobs before updating. In debug mode, we keep the jobs, and some job fields are immutable, leading to a deployment failure.
> [!note]
> When enabling debug mode and updating your deployment, you must manually delete all jobs before updating. In
> debug mode, we keep the jobs, and some job fields are immutable, leading to a deployment failure.
> **Note**<br>
> All containers should write their log output to STDOUT; if you find (valuable) logs inside a container which were not in STDOUT, please let us know!
> [!note]
> All containers should write their log output to STDOUT; if you find (valuable) logs inside a container which
> were not in STDOUT, please let us know!
# Adding containers to a pod for debugging purposes
@@ -168,7 +170,7 @@ While you will find all the details for the CLI tool in the [MariaDB documentati
## Nextcloud
`occ` is the CLI for Nextcloud; all the details can be found in the [upstream documentation](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html).
`occ` is the CLI for Nextcloud; all the details can be found in the [upstream documentation](https://docs.nextcloud.com/server/stable/admin_manual/occ_command.html).
You can run occ commands in the `opendesk-nextcloud-aio` pod like this: `php /var/www/html/occ config:list`
@@ -215,11 +217,16 @@ kubectl patch -n ${NAMESPACE} configmap ${CONFIGMAP_NAME} --type merge -p '{"dat
2. Restart the Keycloak Pod(s).
> **Note**<br>
> Because the `ums-keycloak-extensions-handler` is sending frequent requests (one per second) to Keycloak for retrieval of the Keycloak event history, you might want to stop/remove the deployment while debugging/analysing Keycloak to not get your debug output spammed by these requests.
> [!note]
> Because the `ums-keycloak-extensions-handler` is sending frequent requests (one per second) to Keycloak for
> retrieval of the Keycloak event history, you might want to stop/remove the deployment while
> debugging/analysing Keycloak to not get your debug output spammed by these requests.
> **Note**<br>
> While you can set the standard log levels like `INFO`, `DEBUG`, `TRACE` etc. you can also set class specific logs by comma separating the details in the `KC_LOG_LEVEL` environment variable like e.g. `INFO,org.keycloak.protocol.oidc.endpoints:TRACE`. The example sets the overall loglevel to `INFO` but provides trace logs for `org.keycloak.protocol.oidc.endpoints`.
> [!note]
> While you can set the standard log levels like `INFO`, `DEBUG`, `TRACE` etc. you can also set class specific
> logs by comma separating the details in the `KC_LOG_LEVEL` environment variable like
> e.g. `INFO,org.keycloak.protocol.oidc.endpoints:TRACE`. The example sets the overall loglevel to `INFO` but
> provides trace logs for `org.keycloak.protocol.oidc.endpoints`.
### Accessing the Keycloak admin console

View File

@@ -84,9 +84,9 @@ In the project's CI, there is a step dedicated to lint the two yaml files, as we
In the linting step, the [openDesk CI CLI](https://gitlab.opencode.de/bmi/opendesk/tooling/opendesk-ci-cli) is used to apply the
aforementioned sorting, and the result is compared with the unsorted version. If there is a delta, the linting fails, and you can fix it by running the CLI tool locally, verifying and applying the result to your branch.
> **Note**<br>
> Please ensure that in component blocks, you use comments only at the beginning of the block or at its end. Ideally, you stick
with the many available examples in the yaml files.
> [!note]
> Please ensure that in component blocks, you use comments only at the beginning of the block or at its
> end. Ideally, you stick with the many available examples in the yaml files.
Example:
```yaml
@@ -108,9 +108,9 @@ If you follow the "push early, push often" paradigm to save your work to the cen
existing documentation, you can avoid the CI and its linting being executed, as it might not offer additional value.
GitLab offers two options to skip the CI on a commit/push:
- Add `[ci skip]` to your commit message ([details](https://docs.gitlab.com/ee/ci/pipelines/#skip-a-pipeline)).
1. Add `[ci skip]` to your commit message ([details](https://docs.gitlab.com/ee/ci/pipelines/#skip-a-pipeline)).
**Note:** The string has to be removed before merging your feature branch into `develop`.
- Use the related git push option `git push -o ci.skip` ([details](https://docs.gitlab.com/ee/user/project/push_options.html#push-options-for-gitlab-cicd)).
2. Use the related git push option `git push -o ci.skip` ([details](https://docs.gitlab.com/topics/git/commit/#push-options)).
## Renovate
@@ -126,7 +126,7 @@ Checks for newer versions of the given artifact and creates an MR containing the
- See also: https://gitlab.opencode.de/bmi/opendesk/tooling/oci-pull-mirror
> **Note:**<br>
> [!note]
> The mirror is scheduled to run every hour at 42 minutes past the hour.
openDesk strives to make all relevant artifacts available on openCode so there is a mirroring process

View File

@@ -85,7 +85,7 @@ The below rendering in [class diagram](https://en.wikipedia.org/wiki/Class_diagr
- the first section below the name of the class shows the required **characteristics** of each component of the given class
- the second section shows the **methods** like linting that must be applied to that class's artifacts
> **Note**<br>
> [!note]
> The methods prefixed with '-' are not yet available in `gitlab-config`. You will learn about them later.
```mermaid
@@ -148,11 +148,14 @@ openDesk uses Apache 2.0 as the license for their work. A typical reuse copyrigh
```
The way to mark the license header as a comment differs between the various file types. Please find matching examples for all types across the [deployment automation repository](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk).
> **Note**<br>
> If a `SPDX-FileCopyrightText` already exists with the copyright owner described above but with a past year (e.g. 2024), please update this copyright header line to cover (up to and including) the current year, e.g. `2024-2025`.
> [!note]
> If a `SPDX-FileCopyrightText` already exists with the copyright owner described above but with a past year
> (e.g. 2024), please update this copyright header line to cover (up to and including) the current year,
> e.g. `2024-2025`.
> **Note**<br>
> If line(s) with `SPDX-FileCopyrightText` containing a different copyright owner exist in the file you are working on, do not replace existing one(s), but rather add another header above these.
> [!note]
> If line(s) with `SPDX-FileCopyrightText` containing a different copyright owner exist in the file you are
> working on, do not replace existing one(s), but rather add another header above these.
## Development workflow
@@ -348,14 +351,14 @@ Branches created from the `develop` branch have to adhere to the following notat
Example: `tmueller/fix_jitsi_theming`.
> **Note**<br>
> [!note]
> The above naming convention has yet to be enforced, but please ensure you use it.
#### Commit messages / Conventional Commits
Commit messages must adhere to the [Conventional Commit standard](https://www.conventionalcommits.org/en/v1.0.0/#summary). Commits that do not adhere to the standard get rejected by either [Gitlab push rules](https://docs.gitlab.com/ee/user/project/repository/push_rules.html) or the CI.
> **Note**<br>
> [!note]
> The first letter after the `: ` must be uppercase.
```text
@@ -372,7 +375,7 @@ Commit messages must adhere to the [Conventional Commit standard](https://www.co
Example: `fix(open-xchange): Bump to 8.26 to heal issue with functional mailbox provisioning.`
> **Note**<br>
> [!note]
> The commit messages are an essential part of the [technical releases](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases) as the release notes are generated from these messages.
#### Verified commits

View File

@@ -44,9 +44,10 @@ References:
Afterwards, you can use the resulting manifests within a standard Argo CD workflow.
> **Note**<br>
> When creating the Argo CD application based on the resulting manifests, you must not use the `Automated Sync Policy`
> offered by Argo CD, as you have to manually ensure the applications are updated in the required sequence.
> [!note]
> When creating the Argo CD application based on the resulting manifests, you must not use the `Automated Sync
> Policy` offered by Argo CD, as you have to manually ensure the applications are updated in the required
> sequence.
## Option 2: Helmfile plugin

View File

@@ -41,8 +41,9 @@ You will have to select an existing user account that will be used as a service
Please note that the account that shall serve as the service account requires a Microsoft 365/Exchange online license (mailbox).
> **Note**<br>
> If you want to designate your admin account as a service account, you have to provide the admin with a license.
> [!note]
> If you want to designate your admin account as a service account, you have to provide the admin with a
> license.
***2. Register the audriga app in your tenant***
@@ -53,7 +54,7 @@ To register the audriga app in your tenant, log into your admin account and acce
- Accept the App "audriga CloudMovr migration"
- You will be redirected to an audriga page, which you can close - it does not require additional interaction.
> **Note**<br>
> [!note]
> The audriga application is created under the "Enterprise application" tab in the AzureAD console.
***3. Create a "secret" group in the M365 tenant***
@@ -91,11 +92,15 @@ To validate the master authentication mode please read the appendix section at t
Updating your deployment with these settings will allow you to continue with the migration scenario. Once the migration is completed, you can remove `secrets.oxAppSuite.migrationsMasterPassword` and need to turn off the migration mode by setting `functional.migration.oxAppSuite.enabled` to `false` or removing that setting, as `false` is the default before you update your deployment once again.
> **Note**<br>
> For the changes to take effect, it is sufficient to re-deploy the `open-xchange` component alone. But you have to restart the Dovecot Pod(s) manually when switching to/from the master authentication mode for the changes to take effect.
> [!note]
> For the changes to take effect, it is sufficient to re-deploy the `open-xchange` component alone. But you
> have to restart the Dovecot Pod(s) manually when switching to/from the master authentication mode for the
> changes to take effect.
> **Note**<br>
> While in master authentication mode, regular users cannot log in to the webmail module of openDesk or access the mail using IMAP, as it is not recommended that users interact with the target mail infrastructure during the migration scenario described in this document.
> [!note]
> While in master authentication mode, regular users cannot log in to the webmail module of openDesk or access
> the mail using IMAP, as it is not recommended that users interact with the target mail infrastructure during
> the migration scenario described in this document.
# Migration configuration
@@ -107,7 +112,7 @@ Ensure you meet the prerequisites. For example, this document does not support u
Choose [Microsoft 365 / Exchange Online (Admin)](https://umzug.audriga.com/SMESwitchWebApp/?client=groupware#src=onmicrosoft.com) as your current provider.
> **Note**<br>
> [!note]
> You may need to start typing in "Microsoft Office 365/Exchange Online" for it to appear in the list.
Configure openDesk as your destination server:

View File

@@ -152,7 +152,7 @@ If you just created the `fed-test-idp-realm`, you are already in the admin scree
## openDesk IdP
> **Note**
> [!note]
> While manual configuration is possible, an SSO federation can also be configured as part of the deployment.
> Check `functional.authentication.ssoFederation` section from the `functional.yaml.gotmpl` for details.

View File

@@ -52,9 +52,9 @@ CA certificate as X.509 encoded (`ca.crt`) and as jks trust store (`truststore.j
5. Create a Kubernetes secret with name `opendesk-certificates-keystore-jks` with key `password` and as value the jks
trust store password.
> **Note**<br>
> XWiki does not support the use of an existing secret to access the keystore. Therefore you have to set the password
> from step 5 also as `secrets.certificates.password`.
> [!note]
> XWiki does not support the use of an existing secret to access the keystore. Therefore you have to set the
> password from step 5 also as `secrets.certificates.password`.
## Option 2a: Use cert-manager.io with auto-generated namespace based root-certificate

View File

@@ -19,8 +19,10 @@ This document will cover the additional configuration for external services like
When deploying this suite to production, you need to configure the applications to use your production-grade database
service.
> **Note**<br>
> openDesk supports PostgreSQL as alternative database backend for Nextcloud and XWiki. PostgreSQL is likely to become the preferred option/default in the future should MariaDB become deprecated. This would cause migration[^1] to be necessary if you do not select PostgreSQL for new installations.
> [!note]
> openDesk supports PostgreSQL as alternative database backend for Nextcloud and XWiki. PostgreSQL is likely
> to become the preferred option/default in the future should MariaDB become deprecated. This would cause
> migration[^1] to be necessary if you do not select PostgreSQL for new installations.
| Component | Name | Parameter | Key | Default |
| ------------------ | ------------------ | --------- | --------------------------------------------- | ---------------------------- |

View File

@@ -32,5 +32,9 @@ The following categories are available. Each category contains a set of options
In case the options from [`functional.yaml.gotmpl`](../helmfile/environments/default/functional.yaml.gotmpl) are not sufficient, you might want to look into [`customization.yaml.gotmpl`](../helmfile/environments/default/customization.yaml.gotmpl). The customizations give you control over all templating that is being done in openDesk, but be aware it is an unsupported approach, so in case you have a strong need for customizations, please let us know by opening a ticket. We will check if it is a use case that can be supported by implementing it as part of the aforementioned [`functional.yaml.gotmpl`](../helmfile/environments/default/functional.yaml.gotmpl).
> **Note<br>**
> You can not directly template your own values in the structure found in [`customization.yaml.gotmpl`](../helmfile/environments/default/customization.yaml.gotmpl), rather, you need to reference your custom value files to overwrite the openDesk defaults. In the app specific `helmfile-child.yaml.gotmpl` files, the openDesk value files are referenced first, then afterwards, the files you define in the customizations are read.
> [!note]
> You can not directly template your own values in the structure found in
> [`customization.yaml.gotmpl`](../helmfile/environments/default/customization.yaml.gotmpl), rather, you need
> to reference your custom value files to overwrite the openDesk defaults. In the app specific
> `helmfile-child.yaml.gotmpl` files, the openDesk value files are referenced first, then afterwards, the
> files you define in the customizations are read.

View File

@@ -236,9 +236,9 @@ ingress:
ingressClassName: "nginx"
```
> **Note**<br>
> Currently, the only supported ingress controller is `ingress-nginx`
> (see [requirements.md](./docs/requirements.md) for reference).
> [!note]
> Currently, the only supported ingress controller is `ingress-nginx` (see
> [requirements.md](./docs/requirements.md) for reference).
### Container runtime
@@ -279,8 +279,9 @@ While openDesk configures the applications with meaningful defaults, you can che
### Ports
> **Note**<br>
> If you use `NodePort` for service exposure, you must check your deployment for the actual ports and ensure they are opened where necessary.
> [!note]
> If you use `NodePort` for service exposure, you must check your deployment for the actual ports and ensure
> they are opened where necessary.
#### Web-based user interface
@@ -385,10 +386,15 @@ To prevent others from using your openDesk instance, you must set your individua
export MASTER_PASSWORD="your_individual_master_password"
```
> **Note**<br>
> Currently a [documented](https://docs.software-univention.de/nubus-kubernetes-operation/1.x/en/configuration/nats.html#configure-the-secrets) upstream [bug](https://forge.univention.org/bugzilla/show_bug.cgi?id=58357) causes a failure when passwords/secrets beginning with certain numbers are using for the Nubus subcomponent NATS.
> With openDesk 1.6.0 an update-aware workaround was implemented that prefixes the affected secrets in the openDesk included `secrets.yaml.gotmpl` that derives all secrets from the previously mentioned `MASTER_PASSWORD`.
> If you are using externally provided passwords/secrets make sure that none of the ones listed below are starting with a number:
> [!important]
> Currently a
> [documented](https://docs.software-univention.de/nubus-kubernetes-operation/1.x/en/configuration/nats.html#configure-the-secrets)
> upstream [bug](https://forge.univention.org/bugzilla/show_bug.cgi?id=58357) causes a failure when
> passwords/secrets beginning with certain numbers are using for the Nubus subcomponent NATS. With openDesk
> 1.6.0 an update-aware workaround was implemented that prefixes the affected secrets in the openDesk included
> `secrets.yaml.gotmpl` that derives all secrets from the previously mentioned `MASTER_PASSWORD`. If you are
> using externally provided passwords/secrets make sure that none of the ones listed below are starting with a
> number:
>
> - `secrets.nubus.provisioning.api.natsPassword`
> - `secrets.nubus.provisioning.dispatcherNatsPassword`
@@ -497,7 +503,7 @@ You can uninstall the deployment by executing the following:
helmfile destroy -n <NAMESPACE>
```
> **Note**<br>
> [!note]
> Not all Jobs, PersistentVolumeClaims, or Certificates are deleted; you have to delete them manually
**'Sledgehammer destroy'** - for fast development turn-around times (at your own risk):
@@ -516,5 +522,5 @@ kubectl delete jobs --all --namespace ${NAMESPACE};
kubectl delete configmaps --all --namespace ${NAMESPACE};
```
> **Warning**<br>
> [!warning]
> Without specifying a `--namespace` flag, or by leaving it empty, cluster-wide components will get deleted!

View File

@@ -8,10 +8,19 @@ SPDX-License-Identifier: Apache-2.0
<!-- TOC -->
* [Disclaimer](#disclaimer)
* [Deprecation warnings](#deprecation-warnings)
* [Automated migrations - Overview and mandatory upgrade path](#automated-migrations---overview-and-mandatory-upgrade-path)
* [Overview and mandatory upgrade path](#overview-and-mandatory-upgrade-path)
* [Manual checks/actions](#manual-checksactions)
* [v1.7.1+](#v171)
* [Pre-upgrade to v1.7.1+](#pre-upgrade-to-v171)
* [Versions ≥ v1.10.0](#versions--v1100)
* [Pre-upgrade to versions ≥ v1.10.0](#pre-upgrade-to-versions--v1100)
* [New Helmfile default: Nubus provisioning debug container no longer deployed](#new-helmfile-default-nubus-provisioning-debug-container-no-longer-deployed)
* [Post-upgrade to versions ≥ v1.10.0](#post-upgrade-to-versions--v1100)
* [New application default: Dovecot full-text search index configuration](#new-application-default-dovecot-full-text-search-index-configuration)
* [Versions ≥ v1.9.0](#versions--v190)
* [Pre-upgrade to versions ≥ v1.9.0](#pre-upgrade-to-versions--v190)
* [Helmfile fix: Cassandra passwords read from `databases.*`](#helmfile-fix-cassandra-passwords-read-from-databases)
* [Helmfile new feature: `functional.groupware.externalClients.*`](#helmfile-new-feature-functionalgroupwareexternalclients)
* [Versions ≥ v1.8.0](#versions--v180)
* [Pre-upgrade to versions ≥ v1.8.0](#pre-upgrade-to-versions--v180)
* [New application default: Default group for two-factor authentication is now "2FA Users"](#new-application-default-default-group-for-two-factor-authentication-is-now-2fa-users)
* [New database and secrets: Portal now uses OIDC](#new-database-and-secrets-portal-now-uses-oidc)
* [New application default: XWiki blocks self-registration of user accounts](#new-application-default-xwiki-blocks-self-registration-of-user-accounts)
@@ -20,37 +29,39 @@ SPDX-License-Identifier: Apache-2.0
* [Helmfile new default: New groupware settings changing current behaviour](#helmfile-new-default-new-groupware-settings-changing-current-behaviour)
* [New application default: Nextcloud apps "Spreed" and "Comments" no longer enabled by default](#new-application-default-nextcloud-apps-spreed-and-comments-no-longer-enabled-by-default)
* [New application default: Gravatar is switched off for Jitsi and OpenProject](#new-application-default-gravatar-is-switched-off-for-jitsi-and-openproject)
* [v1.7.0+](#v170)
* [Pre-upgrade to v1.7.0+](#pre-upgrade-to-v170)
* [Versions ≥ v1.7.0](#versions--v170)
* [Pre-upgrade to versions ≥ v1.7.0](#pre-upgrade-to-versions--v170)
* [Helmfile fix: Ensure enterprise overrides apply when deploying from project root](#helmfile-fix-ensure-enterprise-overrides-apply-when-deploying-from-project-root)
* [Replace Helm chart: New Notes Helm chart with support for self-signed deployments](#replace-helm-chart-new-notes-helm-chart-with-support-for-self-signed-deployments)
* [Post-upgrade to v1.7.0+](#post-upgrade-to-v170)
* [Post-upgrade to versions ≥ v1.7.0](#post-upgrade-to-versions--v170)
* [Upstream fix: Provisioning of functional mailboxes](#upstream-fix-provisioning-of-functional-mailboxes)
* [v1.6.0+](#v160)
* [Pre-upgrade to v1.6.0+](#pre-upgrade-to-v160)
* [Versions ≥ v1.6.0](#versions--v160)
* [Pre-upgrade to versions ≥ v1.6.0](#pre-upgrade-to-versions--v160)
* [Upstream constraint: Nubus' external secrets](#upstream-constraint-nubus-external-secrets)
* [Helmfile new secret: `secrets.minio.openxchangeUser`](#helmfile-new-secret-secretsminioopenxchangeuser)
* [Helmfile new object storage: `objectstores.openxchange.*`](#helmfile-new-object-storage-objectstoresopenxchange)
* [OX App Suite fix-up: Using S3 as storage for non mail attachments (pre-upgrade)](#ox-app-suite-fix-up-using-s3-as-storage-for-non-mail-attachments-pre-upgrade)
* [Post-upgrade to v1.6.0+](#post-upgrade-to-v160)
* [Post-upgrade to versions ≥ v1.6.0](#post-upgrade-to-versions--v160)
* [OX App Suite fix-up: Using S3 as storage for non mail attachments (post-upgrade)](#ox-app-suite-fix-up-using-s3-as-storage-for-non-mail-attachments-post-upgrade)
* [v1.4.0+](#v140)
* [Pre-upgrade to v1.4.0+](#pre-upgrade-to-v140)
* [Helmfile new feature: `functional.authentication.ssoFederation`](#helmfile-new-feature-functionalauthenticationssofederation)
* [Versions ≥ v1.4.0](#versions--v140)
* [Pre-upgrade to versions ≥ v1.4.0](#pre-upgrade-to-versions--v140)
* [Helmfile cleanup: `global.additionalMailDomains` as list](#helmfile-cleanup-globaladditionalmaildomains-as-list)
* [v1.2.0+](#v120)
* [Pre-upgrade to v1.2.0+](#pre-upgrade-to-v120)
* [Versions ≥ v1.3.0](#versions--v130)
* [Pre-upgrade to versions ≥ v1.3.0](#pre-upgrade-to-versions--v130)
* [Helmfile new feature: `functional.authentication.ssoFederation`](#helmfile-new-feature-functionalauthenticationssofederation)
* [Versions ≥ v1.2.0](#versions--v120)
* [Pre-upgrade to versions ≥ v1.2.0](#pre-upgrade-to-versions--v120)
* [Helmfile cleanup: Do not configure OX provisioning when no OX installed](#helmfile-cleanup-do-not-configure-ox-provisioning-when-no-ox-installed)
* [Helmfile new default: PostgreSQL for XWiki and Nextcloud](#helmfile-new-default-postgresql-for-xwiki-and-nextcloud)
* [v1.1.2+](#v112)
* [Pre-upgrade to v1.1.2+](#pre-upgrade-to-v112)
* [Versions ≥ v1.1.2](#versions--v112)
* [Pre-upgrade to versions ≥ v1.1.2](#pre-upgrade-to-versions--v112)
* [Helmfile feature update: App settings wrapped in `apps.` element](#helmfile-feature-update-app-settings-wrapped-in-apps-element)
* [v1.1.1+](#v111)
* [Pre-upgrade to v1.1.1](#pre-upgrade-to-v111)
* [Versions ≥ v1.1.1](#versions--v111)
* [Pre-upgrade to versions ≥ v1.1.1](#pre-upgrade-to-versions--v111)
* [Helmfile feature update: Component specific `storageClassName`](#helmfile-feature-update-component-specific-storageclassname)
* [Helmfile new secret: `secrets.nubus.masterpassword`](#helmfile-new-secret-secretsnubusmasterpassword)
* [v1.1.0+](#v110)
* [Pre-upgrade to v1.1.0](#pre-upgrade-to-v110)
* [Versions ≥ v1.1.0](#versions--v110)
* [Pre-upgrade to versions ≥ v1.1.0](#pre-upgrade-to-versions--v110)
* [Helmfile cleanup: Restructured `/helmfile/files/theme` folder](#helmfile-cleanup-restructured-helmfilefilestheme-folder)
* [Helmfile cleanup: Consistent use of `*.yaml.gotmpl`](#helmfile-cleanup-consistent-use-of-yamlgotmpl)
* [Helmfile cleanup: Prefixing certain app directories with `opendesk-`](#helmfile-cleanup-prefixing-certain-app-directories-with-opendesk-)
@@ -60,10 +71,10 @@ SPDX-License-Identifier: Apache-2.0
* [openDesk defaults (new): Enforce login](#opendesk-defaults-new-enforce-login)
* [openDesk defaults (changed): Jitsi room history enabled](#opendesk-defaults-changed-jitsi-room-history-enabled)
* [External requirements: Redis 7.4](#external-requirements-redis-74)
* [Post-upgrade to v1.1.0+](#post-upgrade-to-v110)
* [Post-upgrade to versions ≥ v1.1.0](#post-upgrade-to-versions--v110)
* [XWiki fix-ups](#xwiki-fix-ups)
* [v1.1.0](#v110-1)
* [Pre-upgrade to v1.1.0](#pre-upgrade-to-v110-1)
* [Versions ≥ v1.0.0](#versions--v100)
* [Pre-upgrade to versions ≥ v1.0.0](#pre-upgrade-to-versions--v100)
* [Configuration Cleanup: Removal of unnecessary OX-Profiles in Nubus](#configuration-cleanup-removal-of-unnecessary-ox-profiles-in-nubus)
* [Configuration Cleanup: Updated `global.imagePullSecrets`](#configuration-cleanup-updated-globalimagepullsecrets)
* [Changed openDesk defaults: Matrix presence status disabled](#changed-opendesk-defaults-matrix-presence-status-disabled)
@@ -71,17 +82,17 @@ SPDX-License-Identifier: Apache-2.0
* [Changed openDesk defaults: File-share configurability](#changed-opendesk-defaults-file-share-configurability)
* [Changed openDesk defaults: Updated default subdomains in `global.hosts`](#changed-opendesk-defaults-updated-default-subdomains-in-globalhosts)
* [Changed openDesk defaults: Dedicated group for access to the UDM REST API](#changed-opendesk-defaults-dedicated-group-for-access-to-the-udm-rest-api)
* [Post-upgrade to v1.0.0+](#post-upgrade-to-v100)
* [Post-upgrade to versions ≥ v1.0.0](#post-upgrade-to-versions--v100)
* [Configuration Improvement: Separate user permission for using Video Conference component](#configuration-improvement-separate-user-permission-for-using-video-conference-component)
* [Optional Cleanup](#optional-cleanup)
* [Automated migrations - Details](#automated-migrations---details)
* [v1.6.0+ (automated)](#v160-automated)
* [v1.6.0+ migrations-post](#v160-migrations-post)
* [v1.2.0+ (automated)](#v120-automated)
* [v1.2.0+ migrations-pre](#v120-migrations-pre)
* [v1.2.0+ migrations-post](#v120-migrations-post)
* [v1.1.0+ (automated)](#v110-automated)
* [v1.0.0+ (automated)](#v100-automated)
* [Versions ≥ v1.6.0 (automated)](#versions--v160-automated)
* [Versions ≥ v1.6.0 migrations-post](#versions--v160-migrations-post)
* [Versions ≥ v1.2.0 (automated)](#versions--v120-automated)
* [Versions ≥ v1.2.0 migrations-pre](#versions--v120-migrations-pre)
* [Versions ≥ v1.2.0 migrations-post](#versions--v120-migrations-post)
* [Versions ≥ v1.1.0 (automated)](#versions--v110-automated)
* [Versions ≥ v1.0.0 (automated)](#versions--v100-automated)
* [Related components and artifacts](#related-components-and-artifacts)
* [Development](#development)
<!-- TOC -->
@@ -96,12 +107,14 @@ These automated migrations have limitations in the sense that they require a cer
Manual checks and possible activities are also required by openDesk updates, they are described in the section [Manual update steps](#manual-update-steps).
> **Note**<br>
> Please be sure to _thoroughly_ read / follow the requirements before you update / upgrade.
> [!important]
> Please be sure to _thoroughly_ read / follow the requirements before you update / upgrade and assure that
> you are reading the correct version of this document (change branch / version if necessary).
> **Known limitations**<br>
> [!warning]
> We assume that the PV reclaim policy is set to `delete`, resulting in PVs getting deleted as soon as the related PVC is deleted; we will not address explicit deletion for PVs.
# Deprecation warnings
We cannot hold back all migrations as some are required e.g. due to a change in a specific component that we want/need to update, we try to bundle others only with major releases.
@@ -115,31 +128,131 @@ This section provides an overview of potential changes to be part of the next ma
- `persistence.storages.nubusUdmListener.storageClassName`
- `persistence.storages.nubusProvisioningNats.storageClassName`
# Automated migrations - Overview and mandatory upgrade path
# Overview and mandatory upgrade path
The following table gives an overview of the mandatory upgrade path of openDesk, required in order for the automated migrations to work as expected.
To upgrade existing deployments, you cannot skip any version mentioned in the column *Mandatory version*. When a version number is not fully defined (e.g. `v1.1.x`), you can install any version matching that constraint.
To upgrade existing deployments, you _cannot_ skip any version denoted with `yes` in the column
*Mandatory*. This ensures [automated migrations](#automated-migrations---details) have the required previous
state of openDesk. When a version number is not fully defined (e.g. `v1.1.x`), you can install any version
matching that constraint, though our links always point to the newest patch release for that minor version.
| Mandatory version |
| ----------------- |
| v1.5.0 |
| v1.1.x |
| v1.0.0 |
| v0.9.0 |
| v0.8.1 |
<!-- | 1.x.x | add the entry to the table as soon as we get new migration requiring that the former migration was executed -->
> [!warning]
> You must perform **all** manual pre and post upgrade steps for **any** major, minor and patch version up to your desired openDesk version!
> **Note**<br>
> [!note]
> An exemplary update path for an upgrade from v1.3.2 to v1.7.1 would be:
> 1. You are at v1.3.2 → pre steps for v1.4.0 to v1.5.0
> 1. Upgrade to v1.5.0 → post steps for v1.4.0 to v1.5.0
> 1. You are at v1.5.0 → pre steps for v1.6.0 to 1.7.1
> 1. Upgrade to v1.7.1 → post steps for v1.6.0 to v1.7.1
<!-- IMPORTANT: Make sure to mark mandatory releases if an automatic migration requires a previous update to be installed -->
| Version | Mandatory | Pre-Upgrade | Post-Upgrade | Minimum Required Previous Version |
| ---------------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------- | ---------------------------------------------------- |
| [v1.10.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.9.0) | -- | [Pre](#pre-upgrade-to-versions--v1100) | -- | ⬇ Install &GreaterEqual; v1.5.0 first |
| [v1.9.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.9.0) | -- | [Pre](#pre-upgrade-to-versions--v190) | -- | ⬇ Install &GreaterEqual; v1.5.0 first |
| [v1.8.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.8.0) | -- | [Pre](#pre-upgrade-to-versions--v180) | -- | ⬇ Install &GreaterEqual; v1.5.0 first |
| [v1.7.x](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.7.1) | -- | [Pre](#pre-upgrade-to-versions--v170) | [Post](#post-upgrade-to-versions--v170) | ⬇ Install &GreaterEqual; v1.5.0 first |
| [v1.6.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.6.0) | -- | [Pre](#pre-upgrade-to-versions--v160) | [Post](#post-upgrade-to-versions--v160) | [⚠ Install v1.5.0 first](#versions--v160-automated) |
| [v1.5.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.5.0) | **yes** | -- | -- | ⬇ Install &GreaterEqual; v1.1.x first |
| [v1.4.x](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.4.1) | -- | [Pre](#pre-upgrade-to-versions--v140) | -- | ⬇ Install &GreaterEqual; v1.1.x first |
| [v1.3.x](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.3.2) | -- | [Pre](#pre-upgrade-to-versions--v130) | -- | ⬇ Install &GreaterEqual; v1.1.x first |
| [v1.2.x](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.2.1) | -- | [Pre](#pre-upgrade-to-versions--v120) | -- | [⚠ Install v1.1.x first](#versions--v120-automated) |
| [v1.1.x](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.1.2) | **yes** | [Pre .0](#pre-upgrade-to-versions--v110) → [Pre .1](#pre-upgrade-to-versions--v111) → [Pre .2](#pre-upgrade-to-versions--v112) | [Post](#post-upgrade-to-versions--v110) | [⚠ Install v1.0.0 first](#versions--v110-automated) |
| [v1.0.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v1.0.0) | **yes** | [Pre](#pre-upgrade-to-versions--v100) | [Post](#post-upgrade-to-versions--v100) | [⚠ Install v0.9.0 first](#versions--v100-automated) |
| [v0.9.0](https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk/-/releases/v0.9.0) | **yes** | -- | -- | -- |
> [!warning]
> Be sure to check out the table in the release version you are going to install, and not the currently installed version.
If you would like more details about the automated migrations, please read section [Automated migrations - Details](#automated-migrations---details).
# Manual checks/actions
## v1.7.1+
> [!note]
> We **only** use the mathematical symbol &GreaterEqual; to denote for which versions manual steps must be
> applied. For example, "Versions &GreaterEqual; v1.7.0" refers to all openDesk versions (major, minor and
> patch) starting from 1.7.0, e.g. 1.7.0, 1.7.1, 1.8.0, etc. Furthermore, if a version is not explicitly
> listed no extra manual steps are required when upgrading to that version, e.g. in the case of an update from
> version 1.7.0 to version 1.7.1.
### Pre-upgrade to v1.7.1+
## Versions &GreaterEqual; v1.10.0
### Pre-upgrade to versions &GreaterEqual; v1.10.0
#### New Helmfile default: Nubus provisioning debug container no longer deployed
**Target group:** All deployments that make use of the debugging container for Nubus' provisioning stack called "nats-box",
The [nats-box](https://github.com/nats-io/nats-box), a handy tool when it comes to debugging the Nubus provisioning stack, is no longer enabled in openDesk by default.
To re-enable the nats-box for your deployment you have to set:
```
technical.nubus.provisioning.nats.natsBox.enabled: true
```
> [!note]
> The nats-box also gets enabled when setting `debug.enabled: true`, but that should only be used in non-production scenarios and enabled debug
> accross the whole deployment.
### Post-upgrade to versions &GreaterEqual; v1.10.0
#### New application default: Dovecot full-text search index configuration
**Target group:** All openDesk Enterprise deployments using the groupware module.
Due to a configurational change the full-text search indexes of Dovecot Pro need to be rebuilt.
Run the following command inside the Dovecot container:
```shell
set -x; for d in /var/lib/dovecot/*/*; do uuid=$(basename "$d"); [[ $uuid =~ ^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$ ]] || continue; doveadm fts rescan -u "$uuid"; doveadm index -u "$uuid" -q '*'; done
```
## Versions &GreaterEqual; v1.9.0
### Pre-upgrade to versions &GreaterEqual; v1.9.0
#### Helmfile fix: Cassandra passwords read from `databases.*`
**Target group:** All of the below must apply to your deployment:
1. Enterprise Edition
2. Using external Cassandra DB
3. Defined the Cassandra passwords in `databases.*` (`database.yaml.gotmpl`) which got ignored until now
4. Defined the Cassandra passwords then in `secrets.*` (`secrets.yaml.gotmpl`)
The Cassandra passwords
- `databases.dovecotDictmap.password`
- `databases.dovecotACL.password`
are no longer ignored. So please move the passwords from
- `secrets.cassandra.dovecotDictmapUser`
- `secrets.cassandra.dovecotACLUser`
to the `databases.*` structure.
#### Helmfile new feature: `functional.groupware.externalClients.*`
**Target group:**
Deployments that allow access to groupware emails via external mail clients (e.g. Thunderbird) using IMAP and SMTP.
OX App Suite can display a dialog with configuration details for connecting external mail clients. In previous versions,
this dialog was automatically enabled when Dovecot was deployed with a service type of `NodePort` or `LoadBalancer`.
From now on, the dialog can be explicitly controlled via the setting
`functional.groupware.externalClients.enabledOnboardingInfo`, which is set to `false` by default.
If you want your users to see this dialog, set the attribute to `true`.
Additionally, it is now possible to explicitly define the hostnames shown in the client onboarding dialog using the following values:
- `functional.groupware.externalClients.fqdnImap`
- `functional.groupware.externalClients.fqdnSmtp`
If these values are not explicitly set, openDesk will use `.Values.global.domain` as in previous releases.
## Versions &GreaterEqual; v1.8.0
### Pre-upgrade to versions &GreaterEqual; v1.8.0
#### New application default: Default group for two-factor authentication is now "2FA Users"
@@ -162,8 +275,8 @@ The portal has been migrated to use OIDC for single sign-on by default. This int
- `secrets.keycloak.clientSecret.portal`: The OIDC client secret for the portal.
- `secrets.postgresql.umsAuthSessionUser`: For internal databases, set the secret for the database user here. If you are using an external database, you already provide these credentials in the New database step above.
> **Note**<br>
> The SAML Client for the Nubus portal is still preserved in Keycloak and will be removed in one of the next openDesk releases.
> [!note]
> The SAML Client for the Nubus portal is still preserved in Keycloak and is going to be removed with openDesk 1.10.0.
#### New application default: XWiki blocks self-registration of user accounts
@@ -199,7 +312,7 @@ To preserve as much data as possible, dedicated upgrade guidelines for each of t
- Matrix Meetings widget: https://github.com/nordeck/matrix-meetings?tab=readme-ov-file#matrix-room-upgrades
- Matrix Poll widget: https://github.com/nordeck/matrix-poll?tab=readme-ov-file#matrix-room-upgrades
> **Note**<br>
> [!note]
> These instructions apply to any room upgrades, not just upgrade to `v12`.
#### New Helmfile default: Restricting characters for directory and filenames in fileshare module
@@ -252,7 +365,7 @@ The following options, newly introduced in `functional.yaml.gotmpl`, modify the
The display name is centrally managed by the openDesk IAM.
To allow users to change it within OX App Suite, set this option to `true`.
> **Note**<br>
> [!note]
> openDesk v1.8.0 adds even more options under `functional.groupware.*` while retaining the current default behaviour.
#### New application default: Nextcloud apps "Spreed" and "Comments" no longer enabled by default
@@ -294,9 +407,9 @@ Gravatar support is no longer enabled by default in Jitsi and OpenProject. In ca
OPENPROJECT_PLUGIN__OPENPROJECT__AVATARS: '{enable_gravatars: true, enable_local_avatars: true}'
```
## v1.7.0+
## Versions &GreaterEqual; v1.7.0
### Pre-upgrade to v1.7.0+
### Pre-upgrade to versions &GreaterEqual; v1.7.0
#### Helmfile fix: Ensure enterprise overrides apply when deploying from project root
@@ -327,7 +440,7 @@ annotation:
notesYProvider: {}
```
### Post-upgrade to v1.7.0+
### Post-upgrade to versions &GreaterEqual; v1.7.0
#### Upstream fix: Provisioning of functional mailboxes
@@ -354,16 +467,18 @@ kill ${PROVISIONING_PORT_FORWARD_PID}
rm ${TEMPORARY_CONSUMER_JSON}
```
## v1.6.0+
## Versions &GreaterEqual; v1.6.0
### Pre-upgrade to v1.6.0+
### Pre-upgrade to versions &GreaterEqual; v1.6.0
#### Upstream constraint: Nubus' external secrets
**Target group:** Operators that use external secrets for Nubus.
> **Note**<br>
> External Secrets are not yet a supported feature. We are working on making it available in 2025, though it is possible to make use of the support for external secrets within single applications using the openDesk [customization](../helmfile/environments/default/customization.yaml.gotmpl) options.
> [!note]
> External secrets are not yet a supported feature. We are working on making it available in 2025,
> though it is possible to make use of the support for external secrets within single applications using the
> openDesk [customization](../helmfile/environments/default/customization.yaml.gotmpl) options.
Please ensure you read the [Nubus 1.10.0 "Migration steps" section](https://docs.software-univention.de/nubus-kubernetes-release-notes/1.x/en/changelog.html#v1-10-0-migration-steps) with focus on the paragraph "Operators that make use of the following UDM Listener secrets variables" and act accordingly.
@@ -409,7 +524,7 @@ kubectl cp -n ${NAMESPACE} open-xchange-core-mw-default-0:/opt/open-xchange/ox-f
2. Run the upgrade.
3. Continue with the [related post-upgrade steps](#ox-app-suite-fix-up-using-s3-as-storage-for-non-mail-attachments-post-upgrade)
### Post-upgrade to v1.6.0+
### Post-upgrade to versions &GreaterEqual; v1.6.0
#### OX App Suite fix-up: Using S3 as storage for non mail attachments (post-upgrade)
@@ -450,15 +565,9 @@ ID Type of Job Status Further Information
/opt/open-xchange/sbin/unregisterfilestore -A $MASTER_ADMIN_USER -P $MASTER_ADMIN_PW -i <your_old_filestore_id_from_step_3>
```
## v1.4.0+
## Versions &GreaterEqual; v1.4.0
### Pre-upgrade to v1.4.0+
#### Helmfile new feature: `functional.authentication.ssoFederation`
**Target group:** Deployments that make use of IdP federation as described in [`idp-federation.md`](./enhanced-configuration/idp-federation.md).
Please ensure to configure your IdP federation config details as part of `functional.authentication.ssoFederation`. You can find more details in the "Example configuration" section of [`idp-federation.md`](./enhanced-configuration/idp-federation.md).
### Pre-upgrade to versions &GreaterEqual; v1.4.0
#### Helmfile cleanup: `global.additionalMailDomains` as list
@@ -482,9 +591,19 @@ global:
- "sub2.maildomain.de"
```
## v1.2.0+
## Versions &GreaterEqual; v1.3.0
### Pre-upgrade to v1.2.0+
### Pre-upgrade to versions &GreaterEqual; v1.3.0
#### Helmfile new feature: `functional.authentication.ssoFederation`
**Target group:** Deployments that make use of IdP federation as described in [`idp-federation.md`](./enhanced-configuration/idp-federation.md).
Please ensure to configure your IdP federation config details as part of `functional.authentication.ssoFederation`. You can find more details in the "Example configuration" section of [`idp-federation.md`](./enhanced-configuration/idp-federation.md).
## Versions &GreaterEqual; v1.2.0
### Pre-upgrade to versions &GreaterEqual; v1.2.0
#### Helmfile cleanup: Do not configure OX provisioning when no OX installed
@@ -545,9 +664,9 @@ In case you are planning to migrate an existing instance from MariaDB to Postgre
- https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Backup#HUsingtheXWikiExportfeature
- https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/ImportExport
## v1.1.2+
## Versions &GreaterEqual; v1.1.2
### Pre-upgrade to v1.1.2+
### Pre-upgrade to versions &GreaterEqual; v1.1.2
#### Helmfile feature update: App settings wrapped in `apps.` element
@@ -576,9 +695,9 @@ apps:
enabled: true
```
## v1.1.1+
## Versions &GreaterEqual; v1.1.1
### Pre-upgrade to v1.1.1
### Pre-upgrade to versions &GreaterEqual; v1.1.1
#### Helmfile feature update: Component specific `storageClassName`
@@ -631,9 +750,9 @@ persistence:
A not yet templated secret was discovered in the Nubus deployment. It is now declared in [`secrets.yaml.gotmpl`](../helmfile/environments/default/secrets.yaml.gotmpl) and can be defined using: `secrets.nubus.masterpassword`. If you define your own secrets, please be sure this new secret is set to the same value as the `MASTER_PASSWORD` environment variable used in your deployment.
## v1.1.0+
## Versions &GreaterEqual; v1.1.0
### Pre-upgrade to v1.1.0
### Pre-upgrade to versions &GreaterEqual; v1.1.0
#### Helmfile cleanup: Restructured `/helmfile/files/theme` folder
@@ -796,7 +915,7 @@ The update from openDesk v1.0.0 contains Redis 7.4.1, like the other openDesk bu
Please ensure the Redis you are using is updated to at least version 7.4 to support the requirement of OX App Suite.
### Post-upgrade to v1.1.0+
### Post-upgrade to versions &GreaterEqual; v1.1.0
#### XWiki fix-ups
@@ -822,13 +941,13 @@ Unfortunately XWiki does not upgrade itself as expected. The bug has been report
You should have now a fully functional XWiki instance with single sign-on and full-text search.
## v1.1.0
## Versions &GreaterEqual; v1.0.0
### Pre-upgrade to v1.1.0
### Pre-upgrade to versions &GreaterEqual; v1.0.0
#### Configuration Cleanup: Removal of unnecessary OX-Profiles in Nubus
> **Warning**<br>
> [!warning]
> The upgrade will fail if you do not address this section in your current deployment.
The update will remove unnecessary OX-Profiles in Nubus, so long as these profiles are in use.
@@ -1006,7 +1125,7 @@ The IAM admin account `Administrator` is the only member of this group by defaul
If you need other accounts to use the API, please assign them to the aforementioned group.
### Post-upgrade to v1.0.0+
### Post-upgrade to versions &GreaterEqual; v1.0.0
#### Configuration Improvement: Separate user permission for using Video Conference component
@@ -1022,7 +1141,7 @@ This can be done as IAM admin:
- Check the checkbox for *Video Conference* and the directly below check box for *Overwrite*.
- Click on the green *Save* button at the top of the screen to apply the change.
> **Hint**<br>
> [!tip]
> If you have a lot of users and want to update (almost) all them, you can select all users by clicking the checkbox in the user's table header and then de-selecting the users you do not want to update.
#### Optional Cleanup
@@ -1038,33 +1157,33 @@ kubectl -n ${NAMESPACE} delete pvc ox-connector-ox-contexts-ox-connector-0
# Automated migrations - Details
## v1.6.0+ (automated)
## Versions &GreaterEqual; v1.6.0 (automated)
> **Note**<br>
> [!note]
> Details can be found in [run_5.py](https://gitlab.opencode.de/bmi/opendesk/components/platform-development/images/opendesk-migrations/-/blob/main/odmigs-python/odmigs_runs/run_5.py).
### v1.6.0+ migrations-post
### Versions &GreaterEqual; v1.6.0 migrations-post
Restarting the StatefulSets `ums-provisioning-nats` and `ox-connector` due to a workaround applied on the NATS secrets, see the "Notes" segment of the ["Password seed" heading in getting-started.md](./docs/getting-started.md#password-seed)
- Automatically restarts the StatefulSets `ums-provisioning-nats` and `ox-connector` due to a workaround applied on the NATS secrets, see the "Notes" segment of the ["Password seed" heading in getting-started.md](./docs/getting-started.md#password-seed)
> **Note**<br>
> [!note]
> This change aims to prevent authentication failures with NATS in some Pods, which can lead to errors such as: `wait-for-nats Unavailable, waiting 2 seconds. Error: nats: 'Authorization Violation'`.
## v1.2.0+ (automated)
## Versions &GreaterEqual; v1.2.0 (automated)
> **Note**<br>
> [!note]
> Details can be found in [run_4.py](https://gitlab.opencode.de/bmi/opendesk/components/platform-development/images/opendesk-migrations/-/blob/main/odmigs-python/odmigs_runs/run_4.py).
### v1.2.0+ migrations-pre
### Versions &GreaterEqual; v1.2.0 migrations-pre
- Delete PVC `group-membership-cache-ums-portal-consumer-0`: With the upgrade the Nubus Portal Consumer no longer requires to be executed with root privileges. The PVC contains files that require root permission to access them, therefore the PVC gets deleted (and re-created) during the upgrade.
- Delete StatefulSet `ums-portal-consumer`: A bug was fixed in the templating of the Portal Consumer's PVC causing the values in `persistence.storages.nubusPortalConsumer.*` to be ignored. As these values are immutable, we had to delete the whole StatefulSet.
- Automatically deletes PVC `group-membership-cache-ums-portal-consumer-0`: With the upgrade the Nubus Portal Consumer no longer requires to be executed with root privileges. The PVC contains files that require root permission to access them, therefore the PVC gets deleted (and re-created) during the upgrade.
- Automatically deletes StatefulSet `ums-portal-consumer`: A bug was fixed in the templating of the Portal Consumer's PVC causing the values in `persistence.storages.nubusPortalConsumer.*` to be ignored. As these values are immutable, we had to delete the whole StatefulSet.
### v1.2.0+ migrations-post
### Versions &GreaterEqual; v1.2.0 migrations-post
- Restarting Deployment `ums-provisioning-udm-transformer` and StatefulSet `ums-provisioning-udm-listener` as well as deleting the Nubus Provisioning consumer `durable_name:incoming` on stream `stream:incoming`: Due to a bug in Nubus 1.7.0 the `incoming` stream was blocked after the upgrade, the aforementioned measures unblock the stream.
- Automatically restarts the Deployment `ums-provisioning-udm-transformer` and StatefulSet `ums-provisioning-udm-listener` and deletes the Nubus Provisioning consumer `durable_name:incoming` on stream `stream:incoming`: Due to a bug in Nubus 1.7.0 the `incoming` stream was blocked after the upgrade, the aforementioned measures unblock the stream.
## v1.1.0+ (automated)
## Versions &GreaterEqual; v1.1.0 (automated)
With openDesk v1.1.0 the IAM stack supports HA LDAP primary as well as scalable LDAP secondary pods.
@@ -1072,16 +1191,16 @@ openDesk's automated migrations takes care of this upgrade requirement described
[Nubus 1.5.1](https://docs.software-univention.de/nubus-kubernetes-release-notes/1.5.1/en/changelog.html#migrate-existing-ldap-server-to-mirror-mode-readiness),
creating the config map with the mentioned label.
> **Note**<br>
> [!note]
> Details can be found in [run_3.py](https://gitlab.opencode.de/bmi/opendesk/components/platform-development/images/opendesk-migrations/-/blob/main/odmigs-python/odmigs_runs/run_3.py).
## v1.0.0+ (automated)
## Versions &GreaterEqual; v1.0.0 (automated)
The `migrations-pre` and `migrations-post` jobs in the openDesk deployment address the automated migration tasks.
The permissions required to execute the migrations can be found in the migration's Helm chart [`role.yaml'](https://gitlab.opencode.de/bmi/opendesk/components/platform-development/charts/opendesk-migrations/-/blob/v1.3.5/charts/opendesk-migrations/templates/role.yaml?ref_type=tags#L29).
> **Note**<br>
> [!note]
> Details can be found in [run_2.py](https://gitlab.opencode.de/bmi/opendesk/components/platform-development/images/opendesk-migrations/-/blob/main/odmigs-python/odmigs_runs/run_3.py).
## Related components and artifacts

View File

@@ -52,8 +52,9 @@ Roles are defined sets of permissions that can be assigned to users. Each role c
- **openDesk Administrator**: Manages openDesk-global settings, such as users and groups.
- **openDesk User**: Can log in to openDesk to make use of defined openDesk applications.
> **Note**<br>
> Although it is not enforced by openDesk, it is strongly recommended that a user account is not granted both roles at the same time. This is to maintain the separation of duties.
> [!note]
> Although it is not enforced by openDesk, it is strongly recommended that a user account is not granted both
> roles at the same time. This is to maintain the separation of duties.
### Application usage
@@ -93,15 +94,20 @@ When editing a user in the IAM, you can select if a user can access or get eleva
To easily identify these groups, all of them are prefixed with `managed-by-Attribute-`.
> **Note**<br>
> The membership of these groups is automatically managed based on the user's attributes from the "openDesk" tab. Any changes directly to the groups will be overwritten, so please always use the "openDesk" tab of the respective user. The IAM supports editing user attributes across multiple accounts simultaneously.
> [!note]
> The membership of these groups is automatically managed based on the user's attributes from the "openDesk"
> tab. Any changes directly to the groups will be overwritten, so please always use the "openDesk" tab of the
> respective user. The IAM supports editing user attributes across multiple accounts simultaneously.
#### Standard access to applications
Unless a user is a member of a group, the respective application is not shown in the portal.
> **Note**<br>
> In openDesk's identity provider, the required OIDC claims to access an application are only granted when the respective group membership is available. This means that even if a user who is not a member of an application group knows the link to the application and calls it directly, the single sign-on will be unsuccessful.
> [!note]
> In openDesk's identity provider, the required OIDC claims to access an application are only granted when the
> respective group membership is available. This means that even if a user who is not a member of an
> application group knows the link to the application and calls it directly, the single sign-on will be
> unsuccessful.
- **managed-by-Attribute-Groupware**: Members of this group have access to the groupware applications.
- **managed-by-Attribute-Fileshare**: Members of this group have access to the file sharing application.
@@ -130,7 +136,7 @@ Users get roles assigned based on their responsibilities and the tasks they need
openDesk defines [templates](https://gitlab.opencode.de/bmi/opendesk/components/platform-development/images/opendesk-nubus/-/blob/main/udm/udm-data-loader/65-usertemplate.yaml) for the *User* and *Administrator* roles. The templates can be used by an *openDesk Administrator* to create users with these roles using the [administration portal](https://docs.opendesk.eu/administration/).
> **Note**<br>
> [!note]
> Additional/custom templates can be created using the UDM REST API.
### *openDesk User*
@@ -195,8 +201,10 @@ Managing all application permissions within the IAM would require a superset of
Within IAM groups, the visibility of openDesk applications can be configured. Like with users, this is done in the "openDesk" tab of the [group administration](https://docs.opendesk.eu/administration/gruppen/).
> **Note**<br>
> Currently the openDesk applications do not support nested groups. As a result only direct group memberships of users are processed in the application.<br>
> The plan is to enable the openDesk applications to either support nested groups or to actively provision users into an application while resolving the nested group memberships for the application.
> [!note]
> Currently the openDesk applications do not support nested groups. As a result only direct group memberships
> of users are processed in the application.<br> The plan is to enable the openDesk applications to either
> support nested groups or to actively provision users into an application while resolving the nested group
> memberships for the application.
Within an application, each available group can have a set of application specific permissions assigned.

View File

@@ -34,7 +34,10 @@ openDesk follows a structured release cycle to ensure predictability and reliabi
| **Minor** | Monthly | New features, enhancements, may contain breaking changes or refactors (clearly flagged in the notes) |
| **Patch** | On demand | Bug fixes, security updates, minor improvements, no intended breaking changes |
> **Note:** openDesk does **not** guarantee that minor releases are 100% backwardcompatible. When a breaking change is unavoidable it is announced in the release notes under a dedicated header **“Breaking Changes”** and a migration guide is provided.
> [!note]
> openDesk does **not** guarantee that minor releases are 100% backwardcompatible. When a breaking > change
> is unavoidable it is announced in the release notes under a dedicated header **“Breaking Changes”** > and a
> migration guide is provided.
## Release schedule
@@ -52,7 +55,7 @@ openDesk follows a structured release cycle to ensure predictability and reliabi
- openDesk does not guarantee an inplace upgrade between two major versions. Always consult the release notes and plan appropriate migration efforts.
- Even within the same major line, skipping multiple monthly minor versions is not guaranteed to work without intermediate upgrade steps.
- All breaking changes, including those in monthly minor releases, are highlighted in the release notes under Breaking Changes.
- Additional, nonbinding migration hints are collected in `migrations.md`
- Additional, nonbinding migration hints are collected in [migrations.md](./migrations.md)
# Patch management process

View File

@@ -55,7 +55,7 @@ Any self-hosted or managed K8s cluster >= v1.24 listed in
The deployment is tested against [kubespray](https://github.com/kubernetes-sigs/kubespray) based clusters.
> **Note**<br>
> [!note]
> The deployment is not tested against OpenShift.
# Ingress controller
@@ -67,7 +67,7 @@ configured ingress controller deployed in your cluster.
- [Ingress NGINX Controller](https://github.com/kubernetes/ingress-nginx)
> **Note**<br>
> [!note]
> The platform development team is evaluating the use of [Gateway API](https://gateway-api.sigs.k8s.io/).
**Compatibility with Ingress NGINX >= 1.12.0**
@@ -79,8 +79,9 @@ controller.config.strict-validate-path-type=false
```
See the [`annotations-risk-level` documentation](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#annotations-risk-level) and [`strict-validate-path-type` documentation](https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/configmap/#strict-validate-path-type) for details.
> **Important Note**<br>
> Ensure to install at least Ingress NGINX 1.11.5 or 1.12.1 due to [security issues](https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities) in earlier versions.
> [!warning]
> Ensure to install at least Ingress NGINX 1.11.5 or 1.12.1 due to [security
> issues](https://www.wiz.io/blog/ingress-nginx-kubernetes-vulnerabilities) in earlier versions.
## Minimal configuration
@@ -96,7 +97,7 @@ See the [`allowSnippetAnnotations` documentation](https://kubernetes.github.io/i
Initial evaluation deployment requires a `ReadWriteOnce` volume provisioner. For local deployment, a local- or hostPath-
provisioner is sufficient.
> **Note**<br>
> [!note]
> Some components require a `ReadWriteMany` volume provisioner for distributed mode or horizontal scaling.
# Certificate management
@@ -139,6 +140,6 @@ Helmfile requires [HelmDiff](https://github.com/databus23/helm-diff) to compare
[^1]: Due to a [Helm bug](https://github.com/helm/helm/issues/30890) Helm 3.18.0 is not supported.
[^2]: Due to [restrictions on Kubernetes `emptyDir`](https://github.com/kubernetes/kubernetes/pull/130277) you need a volume provisioner that has sticky bit support, otherwise the OpenProject seeder job will fail.
[^2]: Due to [restrictions on Kubernetes `emptyDir`](https://github.com/kubernetes/kubernetes/pull/130277) you need a volume provisioner that has sticky bit support, otherwise the OpenProject seeder job will fail. E.g. the `local-path-provisioner` does not have sticky bit support.
[^3]: Required for Dovecot Pro as part of openDesk Enterprise Edition.

View File

@@ -0,0 +1,59 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-latest-tag
labels:
opendesk.eu/security-id: image-sec-001
annotations:
policies.kyverno.io/title: Disallow Latest Tag
policies.kyverno.io/category: Best Practices
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/description: >-
The ':latest' tag is mutable and can lead to unexpected errors if the
image changes. A best practice is to use an immutable tag that maps to
a specific version of an application Pod. This policy validates that the image
specifies a tag and that it is not called `latest`.
spec:
validationFailureAction: Audit
background: true
rules:
- name: require-image-tag
match:
any:
- resources:
kinds:
- Pod
validate:
message: "An image tag is required."
foreach:
- list: "request.object.spec.containers"
pattern:
image: "*:*"
- list: "request.object.spec.initContainers"
pattern:
image: "*:*"
- list: "request.object.spec.ephemeralContainers"
pattern:
image: "*:*"
- name: validate-image-tag
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Using a mutable image tag e.g. 'latest' is not allowed."
foreach:
- list: "request.object.spec.containers"
pattern:
image: "!*:latest"
- list: "request.object.spec.initContainers"
pattern:
image: "!*:latest"
- list: "request.object.spec.ephemeralContainers"
pattern:
image: "!*:latest"

View File

@@ -0,0 +1,40 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-image-registries
labels:
opendesk.eu/security-id: image-sec-002
annotations:
policies.kyverno.io/title: Restrict Image Registries
policies.kyverno.io/category: Best Practices, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.26"
policies.kyverno.io/subject: Pod
policies.kyverno.io/description: >-
Images from unknown, public registries can be of dubious quality and may not be
scanned and secured, representing a high degree of risk. Requiring use of known, approved
registries helps reduce threat exposure by ensuring image pulls only come from them. This
policy validates that container images only originate from the registry `registry.opencode.de`.
spec:
validationFailureAction: Audit
background: true
rules:
- name: validate-registries
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Unknown image registry."
pattern:
spec:
=(ephemeralContainers):
- image: "registry.opencode.de/*"
=(initContainers):
- image: "registry.opencode.de/*"
containers:
- image: "registry.opencode.de/*"

View File

@@ -0,0 +1,54 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-image-checksum
labels:
opendesk.eu/security-id: image-sec-003
annotations:
policies.kyverno.io/title: Require Images Use SHA-256 Checksums
policies.kyverno.io/category: Supply Chain Security
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/description: >-
Use of a SHA-256 checksum when pulling an image is often preferable because
tags are mutable and can be overwritten. This policy checks to ensure that
all images use SHA-256 digests in the format image@sha256:<64-character-hex>.
spec:
validationFailureAction: Audit
background: true
rules:
- name: require-image-checksum
match:
any:
- resources:
kinds:
- Pod
validate:
message: >-
Images must use SHA-256 checksums rather than tags.
Expected format: registry/image:tag@sha256:<64-character-hex> or registry/image@sha256:<64-character-hex>
foreach:
- list: "request.object.spec.containers"
deny:
conditions:
any:
- key: "{{ regex_match('^.*@sha256:[a-f0-9]{64}$', element.image) }}"
operator: NotEquals
value: true
- list: "request.object.spec.initContainers || `[]`"
deny:
conditions:
any:
- key: "{{ regex_match('^.*@sha256:[a-f0-9]{64}$', element.image) }}"
operator: NotEquals
value: true
- list: "request.object.spec.ephemeralContainers || `[]`"
deny:
conditions:
any:
- key: "{{ regex_match('^.*@sha256:[a-f0-9]{64}$', element.image) }}"
operator: NotEquals
value: true

View File

@@ -0,0 +1,40 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: verify-image
labels:
opendesk.eu/security-id: image-sec-004
annotations:
policies.kyverno.io/title: Verify Image
policies.kyverno.io/category: Software Supply Chain Security, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.7.0
policies.kyverno.io/description: >-
Using the Cosign project, OCI images may be signed to ensure supply chain
security is maintained. Those signatures can be verified before pulling into
a cluster.
spec:
validationFailureAction: Audit
background: false
rules:
- name: verify-image
match:
any:
- resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- "registry.opencode.de/*"
mutateDigest: true
attestors:
- entries:
- keys:
publicKeys: |
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXdVDz6n39PDj9ZezqYgmZ/qCDV4h
bQwmuDfxix8BMRTZB9UHcOX4EgmAHWyXsbANB6tG8XWoqFpYRReNUvsG6g==
-----END PUBLIC KEY-----

View File

@@ -0,0 +1,53 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
###
# TODO
###
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: verify-sbom-cyclonedx
labels:
opendesk.eu/security-id: image-sec-005
annotations:
policies.kyverno.io/title: Verify CycloneDX SBOM (Keyless)
policies.kyverno.io/category: Software Supply Chain Security
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.8.3
kyverno.io/kyverno-version: 1.9.0
kyverno.io/kubernetes-version: "1.24"
policies.kyverno.io/description: >-
Software Bill of Materials (SBOM) provide details on the composition of a given
container image and may be represented in a couple different standards.
Having an SBOM can be important to ensuring images are built using verified
processes. This policy verifies that an image has an SBOM in CycloneDX format
and was signed by the expected subject and issuer when produced through GitHub Actions
and using Cosign's keyless signing. It requires configuration based upon your own values.
spec:
validationFailureAction: Audit
webhookTimeoutSeconds: 30
rules:
- name: check-sbom
match:
any:
- resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- "registry.opencode.de/*"
attestations:
- predicateType: https://cyclonedx.org/schema
attestors:
- entries:
- keyless:
subject: "mysubject"
issuer: "https://token.actions.githubusercontent.com"
rekor:
url: https://rekor.sigstore.dev
conditions:
- all:
- key: "{{ Data.bomFormat }}"
operator: Equals
value: CycloneDX

View File

@@ -0,0 +1,56 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
###
# TODO
###
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: verify-slsa-provenance-keyless
labels:
opendesk.eu/security-id: image-sec-006
annotations:
policies.kyverno.io/title: Verify SLSA Provenance (Keyless)
policies.kyverno.io/category: Software Supply Chain Security
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.8.3
kyverno.io/kyverno-version: 1.9.0
kyverno.io/kubernetes-version: "1.24"
policies.kyverno.io/description: >-
Provenance is used to identify how an artifact was produced
and from where it originated. SLSA provenance is an industry-standard
method of representing that provenance. This policy verifies that an
image has SLSA provenance and was signed by the expected subject and issuer
when produced through GitHub Actions.
spec:
validationFailureAction: Audit
webhookTimeoutSeconds: 30
rules:
- name: check-slsa-keyless
match:
any:
- resources:
kinds:
- Pod
verifyImages:
- imageReferences:
- "registry.opencode.de/*"
attestations:
- predicateType: https://slsa.dev/provenance/v0.2
attestors:
- count: 1
entries:
- keyless:
subject: "https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@refs/tags/v*"
issuer: "https://token.actions.githubusercontent.com"
rekor:
url: https://rekor.sigstore.dev
conditions:
- all:
# This expression uses a regex pattern to ensure the builder.id in the attestation is equal to the official
# SLSA provenance generator workflow and uses a tagged release in semver format. If using a specific SLSA
# provenance generation workflow, you may need to adjust the first input as necessary.
- key: "{{ regex_match('^https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_container_slsa3.yml@refs/tags/v[0-9].[0-9].[0-9]$','{{ builder.id}}') }}"
operator: Equals
value: true

View File

@@ -0,0 +1 @@
# TODO

View File

@@ -0,0 +1,7 @@
## Image Security
...
### Status
{{ .image-sec.status }}

View File

@@ -0,0 +1,42 @@
apiVersion: cli.kyverno.io/v1alpha1
kind: Test
metadata:
name: image-sec
policies:
- image-sec-001_latest-tag.yaml
- image-sec-002_trusted-registry.yaml
- image-sec-003_digest.yaml
- image-sec-004_signature.yaml
- image-sec-005_sbom.yaml
- image-sec-006_provenance.yaml
resources:
- ../../../rendered.yaml
exceptions: []
results:
# image-sec-001
- policy: disallow-latest-tag
rule: require-image-tag
result: pass
- policy: disallow-latest-tag
rule: validate-image-tag
result: pass
# image-sec-002
- policy: restrict-image-registries
rule: validate-registries
result: pass
# image-sec-003
- policy: require-image-checksum
rule: require-image-checksum
result: pass
# image-sec-004
- policy: verify-image
rule: verify-image
result: pass
# image-sec-005
#- policy: verify-sbom-cyclonedx
# rule: verify-sbom-cyclonedx
# result: pass
# image-sec-006
#- policy: verify-slsa-provenance-keyless
# rule: verify-slsa-provenance-keyless
# result: pass

View File

@@ -0,0 +1,24 @@
apiVersion: cli.kyverno.io/v1alpha1
kind: Test
metadata:
name: net-mgt
policies:
- net-mgt-001_service-external-ips.yaml
- net-mgt-002_service-node-port.yaml
- net-mgt-003_ingress-host-match-tls.yaml
resources:
- ../../../rendered.yaml
exceptions: []
results:
# net-mgt-001
- policy: restrict-external-ips
rule: check-ips
result: pass
# net-mgt-002
- policy: restrict-nodeport
rule: validate-nodeport
result: pass
# net-mgt-003
- policy: ingress-host-match-tls
rule: host-match-tls
result: pass

View File

@@ -0,0 +1,37 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-external-ips
labels:
opendesk.eu/security-id: net-mgt-001
annotations:
policies.kyverno.io/title: Restrict External IPs
policies.kyverno.io/category: Best Practices
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Service
policies.kyverno.io/description: >-
Service externalIPs can be used for a MITM attack (CVE-2020-8554).
Restrict externalIPs or limit to a known set of addresses.
See: https://github.com/kyverno/kyverno/issues/1367. This policy validates
that the `externalIPs` field is not set on a Service.
spec:
validationFailureAction: Audit
background: true
rules:
- name: check-ips
match:
any:
- resources:
kinds:
- Service
validate:
message: "externalIPs are not allowed."
pattern:
spec:
# restrict external IP addresses
# you can alternatively restrict to a known set of addresses using:
# =(externalIPs): ["37.10.11.53", "153.10.20.1"]
X(externalIPs): "null"

View File

@@ -0,0 +1,35 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-nodeport
labels:
opendesk.eu/security-id: net-mgt-002
annotations:
policies.kyverno.io/title: Disallow NodePort
policies.kyverno.io/category: Best Practices
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Service
policies.kyverno.io/description: >-
A Kubernetes Service of type NodePort uses a host port to receive traffic from
any source. A NetworkPolicy cannot be used to control traffic to host ports.
Although NodePort Services can be useful, their use must be limited to Services
with additional upstream security checks. This policy validates that any new Services
do not use the `NodePort` type.
spec:
validationFailureAction: Audit
background: true
rules:
- name: validate-nodeport
match:
any:
- resources:
kinds:
- Service
validate:
message: "Services of type NodePort are not allowed."
pattern:
spec:
=(type): "!NodePort"

View File

@@ -0,0 +1,40 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: ingress-host-match-tls
labels:
opendesk.eu/security-id: net-mgt-003
annotations:
policies.kyverno.io/title: Ingress Host Match TLS
policies.kyverno.io/category: Other
policies.kyverno.io/severity: medium
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.20, 1.21"
policies.kyverno.io/subject: Ingress
policies.kyverno.io/description: >-
Ingress resources which name a host name that is not present
in the TLS section can produce ingress routing failures as a TLS
certificate may not correspond to the destination host. This policy
ensures that the host name in an Ingress rule is also found
in the list of TLS hosts.
spec:
background: false
validationFailureAction: Audit
rules:
- name: host-match-tls
match:
any:
- resources:
kinds:
- Ingress
validate:
message: "The host(s) in spec.rules[].host must match those in spec.tls[].hosts[]."
deny:
conditions:
all:
- key: "{{ (request.object.spec.rules[].host || `[]`) | sort(@) }}"
operator: AnyNotIn
value: "{{ (request.object.spec.tls[].hosts[] || `[]`) | sort(@) }}"

View File

@@ -0,0 +1,7 @@
## Network Management
...
### Status
{{ .net-mgt.status }}

View File

@@ -0,0 +1,49 @@
apiVersion: cli.kyverno.io/v1alpha1
kind: Test
metadata:
name: rbac-mgt
policies:
- rbac-mgt-001_automount-serviceaccount.yaml
- rbac-mgt-002_binding-clusteradmin.yaml
#- rbac-mgt-003_clusterrole.yaml
- rbac-mgt-004_escalation-verbs.yaml
- rbac-mgt-005_automount-sa-setting.yaml
- rbac-mgt-006_secret-verbs.yaml
- rbac-mgt-007_wildcard-verbs.yaml
- rbac-mgt-008_wildcard-resources.yaml
resources:
- ../../../rendered.yaml
exceptions: []
results:
# rbac-mgt-001
- policy: restrict-automount-sa-token
rule: validate-automountServiceAccountToken
result: pass
# rbac-mgt-002
- policy: restrict-binding-clusteradmin
rule: clusteradmin-bindings
result: pass
# rbac-mgt-003
#- policy: restrict-binding-clusteradmin
# rule: clusteradmin-bindings
# result: pass
# rbac-mgt-004
- policy: restrict-escalation-verbs-roles
rule: escalate
result: pass
# rbac-mgt-005
- policy: restrict-sa-automount-sa-token
rule: validate-sa-automountServiceAccountToken
result: pass
# rbac-mgt-006
- policy: restrict-secret-role-verbs
rule: secret-verbs
result: pass
# rbac-mgt-007
- policy: restrict-wildcard-verbs
rule: wildcard-verbs
result: pass
# rbac-mgt-008
- policy: restrict-wildcard-resources
rule: wildcard-resources
result: pass

View File

@@ -0,0 +1,35 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-automount-sa-token
labels:
opendesk.eu/security-id: rbac-mgt-001
annotations:
policies.kyverno.io/title: Restrict Auto-Mount of Service Account Tokens
policies.kyverno.io/category: Sample, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod,ServiceAccount
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/description: >-
Kubernetes automatically mounts ServiceAccount credentials in each Pod.
The ServiceAccount may be assigned roles allowing Pods to access API resources.
Blocking this ability is an extension of the least privilege best practice and should
be followed if Pods do not need to speak to the API server to function.
This policy ensures that mounting of these ServiceAccount tokens is blocked.
spec:
validationFailureAction: Audit
background: true
rules:
- name: validate-automountServiceAccountToken
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Auto-mounting of Service Account tokens is not allowed."
pattern:
spec:
automountServiceAccountToken: "false"

View File

@@ -0,0 +1,37 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-binding-clusteradmin
labels:
opendesk.eu/security-id: rbac-mgt-002
annotations:
policies.kyverno.io/title: Restrict Binding to Cluster-Admin
policies.kyverno.io/category: Security
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: RoleBinding, ClusterRoleBinding, RBAC
kyverno.io/kyverno-version: 1.6.2
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.23"
policies.kyverno.io/description: >-
The cluster-admin ClusterRole allows any action to be performed on any resource
in the cluster and its granting should be heavily restricted. This
policy prevents binding to the cluster-admin ClusterRole in
RoleBinding or ClusterRoleBinding resources.
spec:
validationFailureAction: Audit
background: true
rules:
- name: clusteradmin-bindings
match:
any:
- resources:
kinds:
- RoleBinding
- ClusterRoleBinding
validate:
message: "Binding to cluster-admin is not allowed."
pattern:
roleRef:
name: "!cluster-admin"

View File

@@ -0,0 +1,2 @@
# No clusterrole allowed
# TODO

View File

@@ -0,0 +1,53 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-escalation-verbs-roles
labels:
opendesk.eu/security-id: rbac-mgt-004
annotations:
policies.kyverno.io/title: Restrict Escalation Verbs in Roles
policies.kyverno.io/category: Security
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Role, ClusterRole, RBAC
kyverno.io/kyverno-version: 1.6.2
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.23"
policies.kyverno.io/description: >-
The verbs `impersonate`, `bind`, and `escalate` may all potentially lead to
privilege escalation and should be tightly controlled. This policy prevents
use of these verbs in Role or ClusterRole resources.
spec:
validationFailureAction: Audit
background: true
rules:
- name: escalate
match:
any:
- resources:
kinds:
- Role
- ClusterRole
validate:
message: "Use of verbs `escalate`, `bind`, and `impersonate` are forbidden."
foreach:
- list: "request.object.rules[]"
deny:
conditions:
all:
- key: "{{ element.apiGroups || '' }}"
operator: AnyIn
value:
- rbac.authorization.k8s.io
- key: "{{ element.resources || '' }}"
operator: AnyIn
value:
- clusterroles
- roles
- key: "{{ element.verbs }}"
operator: AnyIn
value:
- bind
- escalate
- impersonate

View File

@@ -0,0 +1,35 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-sa-automount-sa-token
labels:
opendesk.eu/security-id: rbac-mgt-005
annotations:
policies.kyverno.io/title: Restrict Auto-Mount of Service Account Tokens in Service Account
policies.kyverno.io/category: Security
kyverno.io/kyverno-version: 1.11.1
kyverno.io/kubernetes-version: "1.27"
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Secret,ServiceAccount
policies.kyverno.io/description: >-
Kubernetes automatically mounts ServiceAccount credentials in each ServiceAccount.
The ServiceAccount may be assigned roles allowing Pods to access API resources.
Blocking this ability is an extension of the least privilege best practice and should
be followed if Pods do not need to speak to the API server to function.
This policy ensures that mounting of these ServiceAccount tokens is blocked.
spec:
validationFailureAction: Audit
background: true
rules:
- name: validate-sa-automountServiceAccountToken
match:
any:
- resources:
kinds:
- ServiceAccount
validate:
message: "ServiceAccounts must set automountServiceAccountToken to false."
pattern:
automountServiceAccountToken: false

View File

@@ -0,0 +1,42 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-secret-role-verbs
labels:
opendesk.eu/security-id: rbac-mgt-006
annotations:
policies.kyverno.io/title: Restrict Secret Verbs in Roles
policies.kyverno.io/category: Security
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Role, ClusterRole, RBAC
kyverno.io/kyverno-version: 1.6.2
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.23"
policies.kyverno.io/description: >-
The verbs `get`, `list`, and `watch` in a Role or ClusterRole, when paired with the Secrets resource, effectively
allows Secrets to be read which may expose sensitive information. This policy prevents
a Role or ClusterRole from using these verbs in tandem with Secret resources. In order to
fully implement this control, it is recommended to pair this policy with another which
also prevents use of the wildcard ('*') in the verbs list either when explicitly naming Secrets
or when also using a wildcard in the base API group.
spec:
validationFailureAction: Audit
background: true
rules:
- name: secret-verbs
match:
any:
- resources:
kinds:
- Role
- ClusterRole
validate:
message: "Requesting verbs `get`, `list`, or `watch` on Secrets is forbidden."
deny:
conditions:
any:
- key: ["get","list","watch"]
operator: AnyIn
value: "{{ request.object.rules[?resources.contains(@,'secrets')].verbs[] }}"

View File

@@ -0,0 +1,41 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-wildcard-verbs
labels:
opendesk.eu/security-id: rbac-mgt-007
annotations:
policies.kyverno.io/title: Restrict Wildcard in Verbs
policies.kyverno.io/category: Security, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Role, ClusterRole, RBAC
kyverno.io/kyverno-version: 1.6.2
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.23"
policies.kyverno.io/description: >-
Wildcards ('*') in verbs grants all access to the resources referenced by it and
does not follow the principal of least privilege. As much as possible,
avoid such open verbs unless scoped to perhaps a custom API group.
This policy blocks any Role or ClusterRole that contains a wildcard entry in
the verbs list found in any rule.
spec:
validationFailureAction: Audit
background: true
rules:
- name: wildcard-verbs
match:
any:
- resources:
kinds:
- Role
- ClusterRole
validate:
message: "Use of a wildcard ('*') in any verbs is forbidden."
deny:
conditions:
any:
- key: "{{ contains(to_array(request.object.rules[].verbs[]), '*') }}"
operator: Equals
value: true

View File

@@ -0,0 +1,41 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-wildcard-resources
labels:
opendesk.eu/security-id: rbac-mgt-008
annotations:
policies.kyverno.io/title: Restrict Wildcards in Resources
policies.kyverno.io/category: Security, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: ClusterRole, Role, RBAC
kyverno.io/kyverno-version: 1.7.0
policies.kyverno.io/minversion: 1.6.0
kyverno.io/kubernetes-version: "1.23"
policies.kyverno.io/description: >-
Wildcards ('*') in resources grants access to all of the resources referenced by
the given API group and does not follow the principal of least privilege. As much as possible,
avoid such open resources unless scoped to perhaps a custom API group.
This policy blocks any Role or ClusterRole that contains a wildcard entry in
the resources list found in any rule.
spec:
validationFailureAction: Audit
background: true
rules:
- name: wildcard-resources
match:
any:
- resources:
kinds:
- Role
- ClusterRole
validate:
message: "Use of a wildcard ('*') in any resources is forbidden."
deny:
conditions:
any:
- key: "{{ contains(request.object.rules[].resources[], '*') }}"
operator: Equals
value: true

View File

@@ -0,0 +1,7 @@
## Role Based Access Control (RBAC) Management
...
### Status
{{ .rbac-mgt.status }}

View File

@@ -0,0 +1,20 @@
apiVersion: kyverno.io/v2
kind: PolicyException
metadata:
name: postfix-exception
namespace: opendesk
spec:
exceptions:
- policyName: require-run-as-non-root-user
ruleNames:
- run-as-non-root-user
- autogen-run-as-non-root-user
match:
any:
- resources:
kinds:
- Deployment
namespaces:
- opendesk
names:
- postfix

View File

@@ -0,0 +1,66 @@
apiVersion: cli.kyverno.io/v1alpha1
kind: Test
metadata:
name: sec-ctx
policies:
- sec-ctx-001_disallow-privileged-containers.yaml
- sec-ctx-002_require-as-non-root.yaml
- sec-ctx-003_run-as-user.yaml
- sec-ctx-004_capabilities.yaml
- sec-ctx-005_seccomp.yaml
- sec-ctx-006_sysctl.yaml
- sec-ctx-007_apparmor.yaml
- sec-ctx-008_selinux.yaml
- sec-ctx-009_proc-mount.yaml
- sec-ctx-010_privilege-escalation.yaml
resources:
- ../../../rendered.yaml
exceptions:
- exceptions/postfix-exception.yaml
results:
# sec-ctx-001
- policy: disallow-privileged-containers
rule: privileged-containers
result: pass
# sec-ctx-002
- policy: require-run-as-nonroot
rule: run-as-non-root
result: pass
# sec-ctx-003
- policy: require-run-as-non-root-user
rule: run-as-non-root-user
result: pass
# sec-ctx-004
- policy: disallow-capabilities-strict
rule: require-drop-all
result: pass
- policy: disallow-capabilities-strict
rule: adding-capabilities-strict
result: pass
# sec-ctx-005
- policy: restrict-seccomp-strict
rule: check-seccomp-strict
result: pass
# sec-ctx-006
- policy: restrict-sysctls
rule: check-sysctls
result: pass
# sec-ctx-007
- policy: restrict-apparmor-profiles
rule: app-armor
result: pass
# sec-ctx-008
- policy: disallow-selinux
rule: selinux-type
result: pass
- policy: disallow-selinux
rule: selinux-user-role
result: pass
# sec-ctx-009
- policy: disallow-proc-mount
rule: check-proc-mount
result: pass
# sec-ctx-010
- policy: disallow-privilege-escalation
rule: privilege-escalation
result: pass

View File

@@ -0,0 +1,42 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-001
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: Privileged mode disables most security mechanisms
and must not be allowed. This policy ensures Pods do not call for privileged
mode.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow Privileged Containers
name: disallow-privileged-containers
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: privileged-containers
validate:
message: Privileged mode is disallowed. The fields spec.containers[*].securityContext.privileged,
spec.initContainers[*].securityContext.privileged, and spec.ephemeralContainers[*].securityContext.privileged
must be unset or set to `false`.
pattern:
spec:
=(ephemeralContainers):
- =(securityContext):
=(privileged): "false"
=(initContainers):
- =(securityContext):
=(privileged): "false"
containers:
- =(securityContext):
=(privileged): "false"
validationFailureAction: Audit

View File

@@ -0,0 +1,56 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-002
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/description: Containers must be required to run as non-root
users. This policy ensures `runAsNonRoot` is set to `true`. A known issue prevents
a policy such as this using `anyPattern` from being persisted properly in Kubernetes
1.23.0-1.23.2.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Require runAsNonRoot
name: require-run-as-nonroot
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: run-as-non-root
validate:
anyPattern:
- spec:
=(ephemeralContainers):
- =(securityContext):
=(runAsNonRoot): "true"
=(initContainers):
- =(securityContext):
=(runAsNonRoot): "true"
containers:
- =(securityContext):
=(runAsNonRoot): "true"
securityContext:
runAsNonRoot: "true"
- spec:
=(ephemeralContainers):
- securityContext:
runAsNonRoot: "true"
=(initContainers):
- securityContext:
runAsNonRoot: "true"
containers:
- securityContext:
runAsNonRoot: "true"
message: Running as root is not allowed. Either the field spec.securityContext.runAsNonRoot
must be set to `true`, or the fields spec.containers[*].securityContext.runAsNonRoot,
spec.initContainers[*].securityContext.runAsNonRoot, and spec.ephemeralContainers[*].securityContext.runAsNonRoot
must be set to `true`.
validationFailureAction: Audit

View File

@@ -0,0 +1,45 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-003
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/description: Containers must be required to run as non-root
users. This policy ensures `runAsUser` is either unset or set to a number greater
than zero.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Require Run As Non-Root User
name: require-run-as-non-root-user
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: run-as-non-root-user
validate:
message: Running as root is not allowed. The fields spec.securityContext.runAsUser,
spec.containers[*].securityContext.runAsUser, spec.initContainers[*].securityContext.runAsUser,
and spec.ephemeralContainers[*].securityContext.runAsUser must be unset or
set to a number greater than zero.
pattern:
spec:
=(ephemeralContainers):
- =(securityContext):
=(runAsUser): '>0'
=(initContainers):
- =(securityContext):
=(runAsUser): '>0'
=(securityContext):
=(runAsUser): '>0'
containers:
- =(securityContext):
=(runAsUser): '>0'
validationFailureAction: Audit

View File

@@ -0,0 +1,120 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-004
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: Adding capabilities beyond those listed in the
policy must be disallowed.
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow Capabilities
name: disallow-capabilities
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: adding-capabilities
preconditions:
all:
- key: '{{ request.operation || ''BACKGROUND'' }}'
operator: NotEquals
value: DELETE
validate:
deny:
conditions:
all:
- key: '{{ request.object.spec.[ephemeralContainers, initContainers, containers][].securityContext.capabilities.add[]
}}'
operator: AnyNotIn
value:
- AUDIT_WRITE
- CHOWN
- DAC_OVERRIDE
- FOWNER
- FSETID
- KILL
- MKNOD
- NET_BIND_SERVICE
- SETFCAP
- SETGID
- SETPCAP
- SETUID
- SYS_CHROOT
message: Any capabilities added beyond the allowed list (AUDIT_WRITE, CHOWN,
DAC_OVERRIDE, FOWNER, FSETID, KILL, MKNOD, NET_BIND_SERVICE, SETFCAP, SETGID,
SETPCAP, SETUID, SYS_CHROOT) are disallowed.
validationFailureAction: Audit
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-001
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/description: Adding capabilities other than `NET_BIND_SERVICE`
is disallowed. In addition, all containers must explicitly drop `ALL` capabilities.
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow Capabilities (Strict)
name: disallow-capabilities-strict
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: require-drop-all
preconditions:
all:
- key: '{{ request.operation || ''BACKGROUND'' }}'
operator: NotEquals
value: DELETE
validate:
foreach:
- deny:
conditions:
all:
- key: ALL
operator: AnyNotIn
value: '{{ element.securityContext.capabilities.drop[] || `[]` }}'
list: request.object.spec.[ephemeralContainers, initContainers, containers][]
message: Containers must drop `ALL` capabilities.
- match:
any:
- resources:
kinds:
- Pod
name: adding-capabilities-strict
preconditions:
all:
- key: '{{ request.operation || ''BACKGROUND'' }}'
operator: NotEquals
value: DELETE
validate:
foreach:
- deny:
conditions:
all:
- key: '{{ element.securityContext.capabilities.add[] || `[]` }}'
operator: AnyNotIn
value:
- NET_BIND_SERVICE
- ""
list: request.object.spec.[ephemeralContainers, initContainers, containers][]
message: Any capabilities added other than NET_BIND_SERVICE are disallowed.
validationFailureAction: Audit

View File

@@ -0,0 +1,113 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-005
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: The seccomp profile must not be explicitly set
to Unconfined. This policy, requiring Kubernetes v1.19 or later, ensures that
seccomp is unset or set to `RuntimeDefault` or `Localhost`.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Restrict Seccomp
name: restrict-seccomp
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: check-seccomp
validate:
message: Use of custom Seccomp profiles is disallowed. The fields spec.securityContext.seccompProfile.type,
spec.containers[*].securityContext.seccompProfile.type, spec.initContainers[*].securityContext.seccompProfile.type,
and spec.ephemeralContainers[*].securityContext.seccompProfile.type must be
unset or set to `RuntimeDefault` or `Localhost`.
pattern:
spec:
=(ephemeralContainers):
- =(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
=(initContainers):
- =(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
=(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
containers:
- =(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
validationFailureAction: Audit
---
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-005
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/description: The seccomp profile in the Restricted group must
not be explicitly set to Unconfined but additionally must also not allow an
unset value. This policy, requiring Kubernetes v1.19 or later, ensures that
seccomp is set to `RuntimeDefault` or `Localhost`. A known issue prevents a
policy such as this using `anyPattern` from being persisted properly in Kubernetes
1.23.0-1.23.2.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Restrict Seccomp (Strict)
name: restrict-seccomp-strict
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: check-seccomp-strict
validate:
anyPattern:
- spec:
=(ephemeralContainers):
- =(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
=(initContainers):
- =(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
containers:
- =(securityContext):
=(seccompProfile):
=(type): RuntimeDefault | Localhost
securityContext:
seccompProfile:
type: RuntimeDefault | Localhost
- spec:
=(ephemeralContainers):
- securityContext:
seccompProfile:
type: RuntimeDefault | Localhost
=(initContainers):
- securityContext:
seccompProfile:
type: RuntimeDefault | Localhost
containers:
- securityContext:
seccompProfile:
type: RuntimeDefault | Localhost
message: Use of custom Seccomp profiles is disallowed. The fields spec.securityContext.seccompProfile.type,
spec.containers[*].securityContext.seccompProfile.type, spec.initContainers[*].securityContext.seccompProfile.type,
and spec.ephemeralContainers[*].securityContext.seccompProfile.type must be
set to `RuntimeDefault` or `Localhost`.
validationFailureAction: Audit

View File

@@ -0,0 +1,39 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-006
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: Sysctls can disable security mechanisms or affect
all containers on a host, and should be disallowed except for an allowed "safe"
subset. A sysctl is considered safe if it is namespaced in the container or
the Pod, and it is isolated from other Pods or processes on the same Node. This
policy ensures that only those "safe" subsets can be specified in a Pod.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Restrict sysctls
name: restrict-sysctls
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: check-sysctls
validate:
message: Setting additional sysctls above the allowed type is disallowed. The
field spec.securityContext.sysctls must be unset or not use any other names
than kernel.shm_rmid_forced, net.ipv4.ip_local_port_range, net.ipv4.ip_unprivileged_port_start,
net.ipv4.tcp_syncookies and net.ipv4.ping_group_range.
pattern:
spec:
=(securityContext):
=(sysctls):
- =(name): kernel.shm_rmid_forced | net.ipv4.ip_local_port_range | net.ipv4.ip_unprivileged_port_start | net.ipv4.tcp_syncookies | net.ipv4.ping_group_range
validationFailureAction: Audit

View File

@@ -0,0 +1,38 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-007
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: On supported hosts, the 'runtime/default' AppArmor
profile is applied by default. The default policy should prevent overriding
or disabling the policy, or restrict overrides to an allowed set of profiles.
This policy ensures Pods do not specify any other AppArmor profiles than `runtime/default`
or `localhost/*`.
policies.kyverno.io/minversion: 1.3.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod, Annotation
policies.kyverno.io/title: Restrict AppArmor
name: restrict-apparmor-profiles
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: app-armor
validate:
message: Specifying other AppArmor profiles is disallowed. The annotation `container.apparmor.security.beta.kubernetes.io`
if defined must not be set to anything other than `runtime/default` or `localhost/*`.
pattern:
=(metadata):
=(annotations):
=(container.apparmor.security.beta.kubernetes.io/*): runtime/default |
localhost/*
validationFailureAction: Audit

View File

@@ -0,0 +1,84 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-008
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: SELinux options can be used to escalate privileges
and should not be allowed. This policy ensures that the `seLinuxOptions` field
is undefined.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow SELinux
name: disallow-selinux
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: selinux-type
validate:
message: Setting the SELinux type is restricted. The fields spec.securityContext.seLinuxOptions.type,
spec.containers[*].securityContext.seLinuxOptions.type, , spec.initContainers[*].securityContext.seLinuxOptions,
and spec.ephemeralContainers[*].securityContext.seLinuxOptions.type must either
be unset or set to one of the allowed values (container_t, container_init_t,
or container_kvm_t).
pattern:
spec:
=(ephemeralContainers):
- =(securityContext):
=(seLinuxOptions):
=(type): container_t | container_init_t | container_kvm_t
=(initContainers):
- =(securityContext):
=(seLinuxOptions):
=(type): container_t | container_init_t | container_kvm_t
=(securityContext):
=(seLinuxOptions):
=(type): container_t | container_init_t | container_kvm_t
containers:
- =(securityContext):
=(seLinuxOptions):
=(type): container_t | container_init_t | container_kvm_t
- match:
any:
- resources:
kinds:
- Pod
name: selinux-user-role
validate:
message: Setting the SELinux user or role is forbidden. The fields spec.securityContext.seLinuxOptions.user,
spec.securityContext.seLinuxOptions.role, spec.containers[*].securityContext.seLinuxOptions.user,
spec.containers[*].securityContext.seLinuxOptions.role, spec.initContainers[*].securityContext.seLinuxOptions.user,
spec.initContainers[*].securityContext.seLinuxOptions.role, spec.ephemeralContainers[*].securityContext.seLinuxOptions.user,
and spec.ephemeralContainers[*].securityContext.seLinuxOptions.role must be
unset.
pattern:
spec:
=(ephemeralContainers):
- =(securityContext):
=(seLinuxOptions):
X(role): "null"
X(user): "null"
=(initContainers):
- =(securityContext):
=(seLinuxOptions):
X(role): "null"
X(user): "null"
=(securityContext):
=(seLinuxOptions):
X(role): "null"
X(user): "null"
containers:
- =(securityContext):
=(seLinuxOptions):
X(role): "null"
X(user): "null"
validationFailureAction: Audit

View File

@@ -0,0 +1,44 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-009
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: The default /proc masks are set up to reduce
attack surface and should be required. This policy ensures nothing but the default
procMount can be specified. Note that in order for users to deviate from the
`Default` procMount requires setting a feature gate at the API server.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow procMount
name: disallow-proc-mount
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: check-proc-mount
validate:
message: Changing the proc mount from the default is not allowed. The fields
spec.containers[*].securityContext.procMount, spec.initContainers[*].securityContext.procMount,
and spec.ephemeralContainers[*].securityContext.procMount must be unset or
set to `Default`.
pattern:
spec:
=(ephemeralContainers):
- =(securityContext):
=(procMount): Default
=(initContainers):
- =(securityContext):
=(procMount): Default
containers:
- =(securityContext):
=(procMount): Default
validationFailureAction: Audit

View File

@@ -0,0 +1,42 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: sec-ctx-010
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/description: Privilege escalation, such as via set-user-ID
or set-group-ID file mode, should not be allowed. This policy ensures the `allowPrivilegeEscalation`
field is set to `false`.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow Privilege Escalation
name: disallow-privilege-escalation
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: privilege-escalation
validate:
message: Privilege escalation is disallowed. The fields spec.containers[*].securityContext.allowPrivilegeEscalation,
spec.initContainers[*].securityContext.allowPrivilegeEscalation, and spec.ephemeralContainers[*].securityContext.allowPrivilegeEscalation
must be set to `false`.
pattern:
spec:
=(ephemeralContainers):
- securityContext:
allowPrivilegeEscalation: "false"
=(initContainers):
- securityContext:
allowPrivilegeEscalation: "false"
containers:
- securityContext:
allowPrivilegeEscalation: "false"
validationFailureAction: Audit

View File

@@ -0,0 +1,18 @@
## Pod & Container Security Context
| ID | Description | References |
|---|---|---|
| SEC-CTX-001 | Pods must run non **privileged** only to prevent excessive rights and to make persistence and further escalation more difficult. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-002 | All Containers of a pod (containers, Init-Containers and Epehmeral-Containers) must run as non-root user (**runAsNonRoot**) to make persistence and further escalation more difficult. Given a justification and only if the necessary containers of the pod set this setting to false, while all other containers keep this setting set to true, this requirement may be violated. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-003 | All containers of a pod (containers, init-containers and ephemeral-containers) must not explicitly set runAsUser to 0 (root). The **runAsUser** field must either be undefined/null or set to a non-zero UID to ensure containers run with non-root privileges and reduce the risk of privilege escalation attacks. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-004 | All containers of a pod (containers, init-containers and ephemeral-containers) must drop `ALL` **capabilities** and may only add back the `NET_BIND_SERVICE` capability to follow the principle of least privilege and minimize the attack surface. This supports preventing containers from performing privileged system operations that could lead to container escape or host compromise. Given a justification, it is tolerated to add back the followingcapabilities: `AUDIT_WRITE`, `CHOWN`, `DAC_OVERRIDE`, `FOWNER`, `FSETID`, `KILL`, `MKNOD`, `SETFCAP`, `SETGID`, `SETPCAP`, `SETUID`, `SYS_CHROOT` | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-005 | All containers of a pod (containers, init-containers and ephemeral-containers) must have a **Seccomp** profile explicitly set to either `RuntimeDefault` or `Localhost` to restrict system calls and reduce the kernel attack surface. The Unconfined profile and absence of a profile are prohibited. Container-level `seccompProfile.type` fields may be undefined only if the pod-level `seccompProfile.type` is set appropriately, and conversely, the pod-level field may be undefined only if all container-level fields are set. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-006 | Pods must only use sysctls from an allowed safe list that are namespaced and isolated from other pods and processes on the same node. Only the following **sysctls** are permitted: `kernel.shm_rmid_forced`, `net.ipv4.ip_local_port_range`, `net.ipv4.ip_unprivileged_port_start`, `net.ipv4.tcp_syncookies`, `net.ipv4.ping_group_range`, `net.ipv4.ip_local_reserved_ports`, `net.ipv4.tcp_keepalive_time`, `net.ipv4.tcp_fin_timeout`, `net.ipv4.tcp_keepalive_intvl`, and `net.ipv4.tcp_keepalive_probes`. All other sysctls are prohibited as they can disable security mechanisms or affect all containers on the host. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-007 | On **AppArmor**-supported hosts, all containers of a pod (containers, init-containers and ephemeral-containers) must use the `RuntimeDefault` AppArmor profile or a locally defined profile (`Localhost`). The Unconfined profile is prohibited. Containers may only override the default AppArmor profile with `RuntimeDefault` or `Localhost` profiles. Undefined/nil values are permitted to inherit the runtimes default behavior. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-008 | On **SELinux**-enabled hosts, all containers of a pod (containers, init-containers and ephemeral-containers) must only use approved SELinux types (`container_t`, `container_init_t`, `container_kvm_t`, or `container_engine_t`) and are prohibited from setting custom SELinux users or roles. The `seLinux-Options.user` and `seLinuxOptions.role` fields must remain undefined or empty to prevent privilege escalation through SELinux context manipulation. This ensures containers operate within predefined SELinux security boundaries. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-009 | All containers of a pod (containers, init-containers and ephemeral-containers) must use the default **`/proc`** mount type with standard masking to reduce the kernel attack surface. The `procMount` field must be either undefined/nil or explicitly set to `Default`. The Unmasked option is prohibited to prevent containers from accessing sensitive kernel information through `/proc` that could be used for container escape or information disclosure attacks. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| SEC-CTX-010 | All containers of a pod (containers, init-containers and ephemeral-containers) must set **`allowPrivilegeEscalation`** to false to prevent privilege escalation through setuid or setgid binaries. This blocks containers from gaining more privileges than their parent process and prevents exploitation of setuid/setgid executables that could lead to container escape or unauthorized privilege elevation. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
### Status
{{ .sec-ctx.status }}

View File

@@ -0,0 +1,77 @@
apiVersion: cli.kyverno.io/v1alpha1
kind: Test
metadata:
name: wld-iso
policies:
- wld-iso-001_host-namespaces.yaml
- wld-iso-002_hostpath-volumes.yaml
- wld-iso-003_host-ports.yaml
- wld-iso-004_host-probes.yaml
- wld-iso-005_volume-types.yaml
- wld-iso-006_cri-socket-mount.yaml
- wld-iso-007_resource-requests-limits.yaml
- wld-iso-008_emptydir-sizelimit.yaml
- wld-iso-009_secrets-from-envs.yaml
- wld-iso-010_controlplane-scheduling.yaml
resources:
- ../../../rendered.yaml
exceptions: []
results:
# wld-iso-001
- policy: disallow-host-namespaces
rule: host-namespaces
result: pass
# wld-iso-002
- policy: disallow-host-path
rule: host-path
result: pass
# wld-iso-003
- policy: disallow-host-ports
rule: host-ports-none
result: pass
# wld-iso-004
- policy: disallow-host-probes-lifecycle
rule: host-probes-lifecycle
result: pass
# wld-iso-005
- policy: restrict-volume-types
rule: restricted-volumes
result: pass
# wld-iso-006
- policy: disallow-container-sock-mounts
rule: validate-docker-sock-mount
result: pass
- policy: disallow-container-sock-mounts
rule: validate-containerd-sock-mount
result: pass
- policy: disallow-container-sock-mounts
rule: validate-crio-sock-mount
result: pass
- policy: disallow-container-sock-mounts
rule: validate-dockerd-sock-mount
result: pass
- policy: disallow-container-sock-mounts
rule: validate-var-mount
result: pass
- policy: disallow-container-sock-mounts
rule: validate-var-run-mount
result: pass
# wld-iso-007
- policy: require-requests-limits
rule: validate-resources
result: pass
# wld-iso-008
- policy: require-emptydir-sizelimit
rule: require-emptydir-sizelimit
result: pass
# wld-iso-009
- policy: secrets-not-from-env-vars
rule: secrets-not-from-env-vars
result: pass
# wld-iso-010
- policy: restrict-controlplane-scheduling
rule: restrict-controlplane-scheduling-master
result: pass
- policy: restrict-controlplane-scheduling
rule: restrict-controlplane-scheduling-control-plane
result: pass

View File

@@ -0,0 +1,37 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: wld-iso-001
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: Host namespaces (Process ID namespace, Inter-Process
Communication namespace, and network namespace) allow access to shared information
and can be used to elevate privileges. Pods should not be allowed access to
host namespaces. This policy ensures fields which make use of these host namespaces
are unset or set to `false`.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow Host Namespaces
name: disallow-host-namespaces
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: host-namespaces
validate:
message: Sharing the host namespaces is disallowed. The fields spec.hostNetwork,
spec.hostIPC, and spec.hostPID must be unset or set to `false`.
pattern:
spec:
=(hostIPC): "false"
=(hostNetwork): "false"
=(hostPID): "false"
validationFailureAction: Audit

View File

@@ -0,0 +1,35 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: wld-iso-002
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: HostPath volumes let Pods use host directories
and volumes in containers. Using host resources can be used to access shared
data or escalate privileges and should not be allowed. This policy ensures no
hostPath volumes are in use.
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod,Volume
policies.kyverno.io/title: Disallow hostPath
name: disallow-host-path
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: host-path
validate:
message: HostPath volumes are forbidden. The field spec.volumes[*].hostPath
must be unset.
pattern:
spec:
=(volumes):
- X(hostPath): "null"
validationFailureAction: Audit

View File

@@ -0,0 +1,42 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: wld-iso-003
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Baseline)
policies.kyverno.io/description: 'Access to host ports allows potential snooping
of network traffic and should not be allowed, or at minimum restricted to a
known list. This policy ensures the `hostPort` field is unset or set to `0`. '
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/title: Disallow hostPorts
name: disallow-host-ports
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: host-ports-none
validate:
message: Use of host ports is disallowed. The fields spec.containers[*].ports[*].hostPort
, spec.initContainers[*].ports[*].hostPort, and spec.ephemeralContainers[*].ports[*].hostPort
must either be unset or set to `0`.
pattern:
spec:
=(ephemeralContainers):
- =(ports):
- =(hostPort): 0
=(initContainers):
- =(ports):
- =(hostPort): 0
containers:
- =(ports):
- =(hostPort): 0
validationFailureAction: Audit

View File

@@ -0,0 +1,115 @@
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-host-probes-lifecycle
labels:
opendesk.eu/security-id: wld-iso-004
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/title: Disallow Host in Probes and Lifecycle Hooks
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/description: >-
The host field in probes and lifecycle hooks allows bypassing network
policies by directing traffic to arbitrary hosts. This policy ensures
that the host field in livenessProbe, readinessProbe, startupProbe,
and lifecycle hooks (postStart/preStop) is either undefined or empty
for both containers and initContainers.
spec:
validationFailureAction: Audit
background: true
rules:
- name: host-probes-lifecycle
match:
any:
- resources:
kinds:
- Pod
validate:
message: >-
The host field in probes and lifecycle hooks must be undefined or empty.
pattern:
spec:
=(initContainers):
- =(livenessProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(readinessProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(startupProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(lifecycle):
=(postStart):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(preStop):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(ephemeralContainers):
- =(livenessProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(readinessProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(startupProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(lifecycle):
=(postStart):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(preStop):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(containers):
- =(livenessProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(readinessProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(startupProbe):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(lifecycle):
=(postStart):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""
=(preStop):
=(httpGet):
=(host): ""
=(tcpSocket):
=(host): ""

View File

@@ -0,0 +1,53 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
labels:
opendesk.eu/security-id: wld-iso-005
annotations:
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/category: Pod Security Standards (Restricted)
policies.kyverno.io/description: In addition to restricting HostPath volumes,
the restricted pod security profile limits usage of non-core volume types to
those defined through PersistentVolumes. This policy blocks any other type of
volume other than those in the allow list.
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod,Volume
policies.kyverno.io/title: Restrict Volume Types
name: restrict-volume-types
spec:
background: true
rules:
- match:
any:
- resources:
kinds:
- Pod
name: restricted-volumes
preconditions:
all:
- key: '{{ request.operation || ''BACKGROUND'' }}'
operator: NotEquals
value: DELETE
validate:
deny:
conditions:
all:
- key: '{{ request.object.spec.volumes[].keys(@)[] || '''' }}'
operator: AnyNotIn
value:
- name
- configMap
- csi
- downwardAPI
- emptyDir
- ephemeral
- persistentVolumeClaim
- projected
- secret
- ""
message: 'Only the following types of volumes may be used: configMap, csi, downwardAPI,
emptyDir, ephemeral, persistentVolumeClaim, projected, and secret.'
validationFailureAction: Audit

View File

@@ -0,0 +1,101 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-container-sock-mounts
labels:
opendesk.eu/security-id: wld-iso-006
annotations:
policies.kyverno.io/title: Disallow CRI socket mounts
policies.kyverno.io/category: Best Practices, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/description: >-
Container daemon socket bind mounts allows access to the container engine on the
node. This access can be used for privilege escalation and to manage containers
outside of Kubernetes, and hence should not be allowed. This policy validates that
the sockets used for CRI engines Docker, Containerd, and CRI-O are not used.
spec:
validationFailureAction: Audit
background: true
rules:
- name: validate-docker-sock-mount
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Use of the Docker Unix socket is not allowed."
pattern:
spec:
=(volumes):
- =(hostPath):
path: "!/var/run/docker.sock"
- name: validate-containerd-sock-mount
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Use of the Containerd Unix socket is not allowed."
pattern:
spec:
=(volumes):
- =(hostPath):
path: "!/var/run/containerd/containerd.sock"
- name: validate-crio-sock-mount
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Use of the CRI-O Unix socket is not allowed."
pattern:
spec:
=(volumes):
- =(hostPath):
path: "!/var/run/crio/crio.sock"
- name: validate-dockerd-sock-mount
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Use of the Docker CRI socket is not allowed."
pattern:
spec:
=(volumes):
- =(hostPath):
path: "!/var/run/cri-dockerd.sock"
- name: validate-var-mount
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Mounting /var is not allowed."
pattern:
spec:
=(volumes):
- =(hostPath):
path: "!/var"
- name: validate-var-run-mount
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Mounting /var/run is not allowed."
pattern:
spec:
=(volumes):
- =(hostPath):
path: "!/var/run"

View File

@@ -0,0 +1,56 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-requests-limits
labels:
opendesk.eu/security-id: wld-iso-007
annotations:
policies.kyverno.io/title: Require Limits and Requests
policies.kyverno.io/category: Best Practices, EKS Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/description: >-
As application workloads share cluster resources, it is important to limit resources
requested and consumed by each Pod. It is recommended to require resource requests and
limits per Pod, especially for memory and CPU. If a Namespace level request or limit is specified,
defaults will automatically be applied to each Pod based on the LimitRange configuration.
This policy validates that all containers have something specified for memory and CPU
requests and memory limits.
spec:
validationFailureAction: Audit
background: true
rules:
- name: validate-resources
match:
any:
- resources:
kinds:
- Pod
validate:
message: "CPU and memory resource requests and memory limits are required for containers."
pattern:
spec:
containers:
- resources:
requests:
memory: "?*"
cpu: "?*"
limits:
memory: "?*"
=(initContainers):
- resources:
requests:
memory: "?*"
cpu: "?*"
limits:
memory: "?*"
=(ephemeralContainers):
- resources:
requests:
memory: "?*"
cpu: "?*"
limits:
memory: "?*"

View File

@@ -0,0 +1,36 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: require-emptydir-sizelimit
labels:
opendesk.eu/security-id: wld-iso-008
annotations:
policies.kyverno.io/title: Require emptyDir sizeLimit
policies.kyverno.io/category: Best Practices
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod, Volume
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/description: >-
When a Pod requests an emptyDir, by default it does not have a size limit which
may allow it to consume excess or all of the space in the medium backing the volume.
This can quickly overrun a Node and may result in a denial of service for other
workloads. This policy requires that all emptyDir volumes have a sizeLimit set.
spec:
validationFailureAction: Audit
background: true
rules:
- name: require-emptydir-sizelimit
match:
any:
- resources:
kinds:
- Pod
validate:
message: "All emptyDir volumes must have a sizeLimit set."
pattern:
spec:
=(volumes):
- =(emptyDir):
sizeLimit: "?*"

View File

@@ -0,0 +1,50 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: secrets-not-from-env-vars
labels:
opendesk.eu/security-id: wld-iso-009
annotations:
policies.kyverno.io/title: Disallow Secrets from Env Vars
policies.kyverno.io/severity: medium
policies.kyverno.io/subject: Pod, Secret
kyverno.io/kyverno-version: 1.6.0
policies.kyverno.io/description: >-
Secrets used as environment variables containing sensitive information may, if not carefully controlled,
be printed in log output which could be visible to unauthorized people and captured in forwarding
applications. This policy disallows using Secrets as environment variables.
spec:
validationFailureAction: Audit
background: true
rules:
- name: secrets-not-from-env-vars
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Secrets must be mounted as volumes, not as environment variables."
pattern:
spec:
containers:
- name: "*"
=(env):
- =(valueFrom):
X(secretKeyRef): "null"
- name: secrets-not-from-envfrom
match:
any:
- resources:
kinds:
- Pod
validate:
message: "Secrets must not come from envFrom statements."
pattern:
spec:
containers:
- name: "*"
=(envFrom):
- X(secretRef): "null"

View File

@@ -0,0 +1,46 @@
# Source: https://github.com/kyverno/policies/tree/main/pod-security
# License: Apache-2.0
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: restrict-controlplane-scheduling
labels:
opendesk.eu/security-id: wld-iso-010
annotations:
policies.kyverno.io/title: Restrict control plane scheduling
policies.kyverno.io/subject: Pod
policies.kyverno.io/minversion: 1.6.0
policies.kyverno.io/description: >-
Scheduling non-system Pods to control plane nodes (which run kubelet) is often undesirable
because it takes away resources from the control plane components and can represent
a possible security threat vector. This policy prevents users from setting a toleration
in a Pod spec which allows running on control plane nodes
with the taint key `node-role.kubernetes.io/master`.
spec:
validationFailureAction: Audit
background: true
rules:
- name: restrict-controlplane-scheduling-master
match:
any:
- resources:
kinds:
- Pod
validate:
message: Pods may not use tolerations which schedule on control plane nodes.
pattern:
spec:
=(tolerations):
- key: "!node-role.kubernetes.io/master"
- name: restrict-controlplane-scheduling-control-plane
match:
any:
- resources:
kinds:
- Pod
validate:
message: Pods may not use tolerations which schedule on control plane nodes.
pattern:
spec:
=(tolerations):
- key: "!node-role.kubernetes.io/control-plane"

View File

@@ -0,0 +1,14 @@
## Workload Isolation and Configuration
| ID | Description | References |
|---|---|---|
| WLD-ISO-001 | Pods must not share **host namespaces** (`hostNetwork`, `hostPID`, `hostIPC`). These fields must be undefined/nil or explicitly set to false to prevent containers from accessing host network interfaces, process trees, or inter-process communication mechanisms, which could lead to container escape or unauthorized access to host resources. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| WLD-ISO-002 | **HostPath volumes** must be forbidden (`spec.volumes[*].hostPath` must be undefined/nil) to prevent containers from mounting directories from the host filesystem, which could enable unauthorized access to sensitive host files, container escape, or persistence mechanisms on the node. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| WLD-ISO-003 | **Host ports** must be disallowed. The `hostPort` field in all containers (containers, init-containers, and ephemeral-containers) must be undefined/nil or set to 0 to prevent bypassing network policies and exposing services directly on the host network interface, which could lead to unauthorized access or port conflicts. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| WLD-ISO-004 | The **host field in probes and lifecycle hooks** must be undefined/nil or empty string for all containers (containers and init-containers). This prevents probes and hooks from targeting the host network directly, maintaining proper network isolation between containers and the host system. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
| WLD-VOL-001 | Pods must only use **approved volume types** that maintain security boundaries. Permitted volume types are: `configMap`, `csi`, `downwardAPI`, `emptyDir`, `ephemeral`, `persistentVolumeClaim`, `projected`, and `secret`. All other volume types, particularly those that break isolation boundaries (`hostPath`, etc.), are prohibited to prevent unauthorized access to host resources or external systems. | K8s-PSS, BSI-SYS-1-6, OWASP-K8s, NIST-SP, NSA-Hardening |
### Status
{{ .wld-iso.status }}

View File

@@ -20,9 +20,9 @@ Please review the default configuration that is applied to understand your custo
You can just update the files in [helmfile/files/theme](../helmfile/files/theme) to change logos, favicons etc. Note that the `.svg` versions of the favicons are also used for the portal tiles.
> **Note**<br>
> Theming focuses on colors, iconography and imagery. If you like to adapt the default links in the portal pointing to external
> resources (like "Support", "Legal Notice") please check the `functional.portal` section
> [!note]
> Theming focuses on colors, iconography and imagery. If you like to adapt the default links in the portal
> pointing to external resources (like "Support", "Legal Notice") please check the `functional.portal` section
> in [`functional.yaml.gotmpl`](../helmfile/environments/default/functional.yaml.gotmpl)
# Known limitations

View File

@@ -47,7 +47,10 @@ ingress:
- "{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}"
podAnnotations:
{{ .Values.annotations.coco.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "collabora-controller"
{{- with .Values.annotations.coco.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
securityContext:
allowPrivilegeEscalation: false

View File

@@ -35,7 +35,7 @@ collabora:
{{- end }}
{{- if .Values.apps.collaboraController.enabled }}
--o:indirection_endpoint.url=https://{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}/controller/routeToken
--o:monitors.monitor[0]=ws://collabora-controller-cool-controller:9000/controller/ws
--o:monitors.monitor[0]=ws://collabora-controller-cool-controller.{{ .Release.Namespace }}.svc.{{ .Values.cluster.networking.domain }}:9000/controller/ws
--o:monitors.monitor[0][@retryInterval]=5
{{- end }}
username: "collabora-internal-admin"
@@ -110,7 +110,10 @@ ingress:
- "{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}"
podAnnotations:
{{ .Values.annotations.collabora.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "collabora"
{{- with .Values.annotations.collabora.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
fsGroup: 1001

View File

@@ -55,7 +55,10 @@ persistence:
enabled: false
podAnnotations:
{{ .Values.annotations.cryptpad.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "cryptpad"
{{- with .Values.annotations.cryptpad.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
fsGroup: 4001

View File

@@ -143,7 +143,10 @@ ingress:
{{ .Values.annotations.element.ingress | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.element.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "opendesk-element"
{{- with .Values.annotations.element.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -44,7 +44,10 @@ ingress:
{{ .Values.annotations.elementMatrixNeoboardWidget.ingress | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementMatrixNeoboardWidget.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "matrix-neoboard-widget"
{{- with .Values.annotations.elementMatrixNeoboardWidget.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -44,7 +44,10 @@ ingress:
{{ .Values.annotations.elementMatrixNeochoiceWidget.ingress | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementMatrixNeochoiceWidget.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "matrix-neochoice-widget"
{{- with .Values.annotations.elementMatrixNeochoiceWidget.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -25,7 +25,10 @@ image:
fullnameOverride: "matrix-neodatefix-bot-bootstrap"
podAnnotations:
{{ .Values.annotations.elementMatrixNeodatefixBotBootstrap.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "values-matrix-neodatefix-bot-bootstrap"
{{- with .Values.annotations.elementMatrixNeodatefixBotBootstrap.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
securityContext:
allowPrivilegeEscalation: false
@@ -42,7 +45,7 @@ securityContext:
seLinuxOptions:
{{ .Values.seLinuxOptions.synapseCreateUser | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementMatrixNeodatefixBotBootstrap.serviceAccount | toYaml | nindent 2 }}
serviceAccount:
annotations:
{{ .Values.annotations.elementMatrixNeodatefixBotBootstrap.serviceAccount | toYaml | nindent 4 }}
...

View File

@@ -90,7 +90,10 @@ persistence:
{{ .Values.annotations.elementMatrixNeodatefixBot.persistence | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementMatrixNeodatefixBot.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "matrix-neodatefix-bot"
{{- with .Values.annotations.elementMatrixNeodatefixBot.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -49,7 +49,10 @@ ingress:
{{ .Values.annotations.elementMatrixNeodatefixWidget.ingress | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementMatrixNeodatefixWidget.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "matrix-neodatefix-widget"
{{- with .Values.annotations.elementMatrixNeodatefixWidget.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -25,7 +25,10 @@ image:
fullnameOverride: "opendesk-matrix-user-verification-service-bootstrap"
podAnnotations:
{{ .Values.annotations.elementMatrixUserVerificationServiceBootstrap.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "opendesk-matrix-user-verification-service-bootstrap"
{{- with .Values.annotations.elementMatrixUserVerificationServiceBootstrap.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
securityContext:
allowPrivilegeEscalation: false

View File

@@ -44,7 +44,10 @@ image:
tag: {{ .Values.images.matrixUserVerificationService.tag | quote }}
podAnnotations:
{{ .Values.annotations.elementMatrixUserVerificationService.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "opendesk-matrix-user-verification-service"
{{- with .Values.annotations.elementMatrixUserVerificationService.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -56,7 +56,12 @@ cron:
repository: {{ .Values.images.elementSyncAdmins.repository | quote }}
tag: {{ .Values.images.elementSyncAdmins.tag | quote }}
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
podAnnotations:
intents.otterize.com/service-name: "opendesk-synapse-admin-cron"
#fullnameOverride: "opendesk-synapse-admin"
podAnnotations:
intents.otterize.com/service-name: "opendesk-synapse-admin"
image:
registry: {{ coalesce .Values.repositories.image.registryOpencodeDeEnterprise .Values.global.imageRegistry .Values.images.elementSynapseAdmin.registry | quote }}
repository: {{ .Values.images.elementSynapseAdmin.repository | quote }}

View File

@@ -16,4 +16,6 @@ image:
tag: {{ .Values.images.elementPipe.tag | quote }}
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
fullnameOverride: "opendesk-synapse-adminbot-pipe"
podAnnotations:
intents.otterize.com/service-name: "opendesk-synapse-adminbot-pipe"
...

View File

@@ -20,4 +20,6 @@ ingress:
enabled: {{ .Values.ingress.enabled }}
tls:
secretName: {{ .Values.ingress.tls.secretName | quote }}
podAnnotations:
intents.otterize.com/service-name: "opendesk-synapse-adminbot-web"
...

View File

@@ -16,4 +16,6 @@ image:
tag: {{ .Values.images.elementPipe.tag | quote }}
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
fullnameOverride: "opendesk-synapse-auditbot-pipe"
podAnnotations:
intents.otterize.com/service-name: "opendesk-synapse-auditbot-pipe"
...

View File

@@ -51,4 +51,6 @@ image:
url: {{ .Values.images.elementGroupsync.repository | quote }}
tag: {{ .Values.images.elementGroupsync.tag | quote }}
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
podAnnotations:
intents.otterize.com/service-name: "opendesk-synapse-groupsync"
...

View File

@@ -56,7 +56,10 @@ ingress:
secretName: {{ .Values.ingress.tls.secretName | quote }}
podAnnotations:
{{ .Values.annotations.elementSynapseWeb.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "opendesk-synapse-web"
{{- with .Values.annotations.elementSynapseWeb.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -25,6 +25,14 @@ configuration:
address:
per_second: 2
burst_count: 12
# Set higher limits for messages and media due to non-chat Matrix apps and widgets (such as NeoBoard)
# https://github.com/nordeck/matrix-neoboard/blob/main/docs/configuration.md#rate-limiting-settings
rc_message:
per_second: 5
burst_count: 25
rc_media_create:
per_second: 20
burst_count: 100
database:
host: {{ .Values.databases.synapse.host | quote }}
@@ -242,7 +250,10 @@ persistence:
{{ .Values.annotations.elementSynapse.persistence | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementSynapse.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "opendesk-synapse"
{{- with .Values.annotations.elementSynapse.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -49,7 +49,10 @@ ingress:
{{ .Values.annotations.elementWellKnown.ingress | toYaml | nindent 4 }}
podAnnotations:
{{ .Values.annotations.elementWellKnown.pod | toYaml | nindent 2 }}
intents.otterize.com/service-name: "opendesk-well-known"
{{- with .Values.annotations.elementWellKnown.pod }}
{{ . | toYaml | nindent 2 }}
{{- end }}
podSecurityContext:
enabled: true

View File

@@ -111,10 +111,11 @@ jitsi:
type: "RuntimeDefault"
seLinuxOptions:
{{ .Values.seLinuxOptions.jitsi | toYaml | nindent 8 }}
{{- if .Values.annotations.jitsiWeb.pod }}
podAnnotations:
{{ .Values.annotations.jitsiWeb.pod | toYaml | nindent 6 }}
{{- end }}
intents.otterize.com/service-name: "jitsi-web"
{{- with .Values.annotations.jitsiWeb.pod }}
{{ . | toYaml | nindent 6 }}
{{- end }}
prosody:
image:
repository: "{{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.prosody.registry }}/{{ .Values.images.prosody.repository }}"
@@ -164,10 +165,11 @@ jitsi:
type: "RuntimeDefault"
seLinuxOptions:
{{ .Values.seLinuxOptions.prosody | toYaml | nindent 8 }}
{{- if .Values.annotations.jitsiProsody.pod }}
podAnnotations:
{{ .Values.annotations.jitsiProsody.pod | toYaml | nindent 6 }}
{{- end }}
intents.otterize.com/service-name: "jitsi-prosody"
{{- with .Values.annotations.jitsiProsody.pod }}
{{ . | toYaml | nindent 6 }}
{{- end }}
jicofo:
replicaCount: {{ .Values.replicas.jicofo }}
image:
@@ -191,10 +193,11 @@ jitsi:
type: "RuntimeDefault"
seLinuxOptions:
{{ .Values.seLinuxOptions.jicofo | toYaml | nindent 8 }}
{{- if .Values.annotations.jitsiJicofo.pod }}
podAnnotations:
{{ .Values.annotations.jitsiJicofo.pod | toYaml | nindent 6 }}
{{- end }}
intents.otterize.com/service-name: "jitsi-jicofo"
{{- with .Values.annotations.jitsiJicofo.pod }}
{{ . | toYaml | nindent 6 }}
{{- end }}
jigasi:
replicaCount: {{ .Values.replicas.jigasi }}
enabled: {{ .Values.sip.jigasi.enabled }}
@@ -224,10 +227,11 @@ jitsi:
type: "RuntimeDefault"
seLinuxOptions:
{{ .Values.seLinuxOptions.jigasi | toYaml | nindent 8 }}
{{- if .Values.annotations.jitsiJigasi.pod }}
podAnnotations:
{{ .Values.annotations.jitsiJigasi.pod | toYaml | nindent 6 }}
{{- end }}
intents.otterize.com/service-name: "jitsi-jigasi"
{{- with .Values.annotations.jitsiJigasi.pod }}
{{ . | toYaml | nindent 6 }}
{{- end }}
jvb:
replicaCount: {{ .Values.replicas.jvb }}
# The `useNodeIP` option provided by the upstream charts does not support all relevant scenarios, but since
@@ -260,10 +264,11 @@ jitsi:
type: "RuntimeDefault"
seLinuxOptions:
{{ .Values.seLinuxOptions.jvb | toYaml | nindent 8 }}
{{- if .Values.annotations.jitsiJvb.pod }}
podAnnotations:
{{ .Values.annotations.jitsiJvb.pod | toYaml | nindent 6 }}
{{- end }}
intents.otterize.com/service-name: "jitsi-jvb"
{{- with .Values.annotations.jitsiJvb.pod }}
{{ . | toYaml | nindent 6 }}
{{- end }}
metrics:
prometheusAnnotations:
{{ .Values.annotations.jitsiJvb.metricsPrometheus | toYaml | nindent 8 }}
@@ -288,10 +293,11 @@ jitsi:
# Chart does not allow to template more
capabilities:
add: ["SYS_ADMIN"]
{{- if .Values.annotations.jitsiJibri.pod }}
podAnnotations:
{{ .Values.annotations.jitsiJibri.pod | toYaml | nindent 6 }}
{{- end }}
intents.otterize.com/service-name: "jitsi-jibri"
{{- with .Values.annotations.jitsiJibri.pod }}
{{ . | toYaml | nindent 6 }}
{{- end }}
imagePullSecrets:
{{- range .Values.global.imagePullSecrets }}
- name: {{ . | quote }}

Some files were not shown because too many files have changed in this diff Show More