mirror of
https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk.git
synced 2025-12-06 15:31:38 +01:00
Compare commits
12 Commits
ntretkowsk
...
chore/kyve
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac712f4063 | ||
|
|
56ddb422ca | ||
|
|
7b592a24b0 | ||
|
|
f3f707c9ee | ||
|
|
850761e047 | ||
|
|
12379d67e0 | ||
|
|
d25c95f06b | ||
|
|
8de0f5de72 | ||
|
|
152221fa79 | ||
|
|
7aa717c050 | ||
|
|
19438c0281 | ||
|
|
02a3b77114 |
5
.gitignore
vendored
5
.gitignore
vendored
@@ -28,3 +28,8 @@ logs
|
|||||||
|
|
||||||
# Ignore backup files, e.g. created by the script that eases the local chart development
|
# Ignore backup files, e.g. created by the script that eases the local chart development
|
||||||
*.bak
|
*.bak
|
||||||
|
|
||||||
|
rendered.yaml
|
||||||
|
pol.yaml
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
@@ -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/) |
|
| 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/) |
|
| 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) |
|
| 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) |
|
| 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.5.1](https://www.openproject.org/docs/release-notes/16-5-1/) | [For the most recent release](https://www.openproject.org/docs/user-guide/) |
|
| 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/) |
|
| 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.5](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
|
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.
|
align the applications with best practices regarding container design and operations.
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ An overview of
|
|||||||
- components that consume the LDAP service.
|
- components that consume the LDAP service.
|
||||||
- The components access the LDAP using a component-specific LDAP search account.
|
- The components access the LDAP using a component-specific LDAP search account.
|
||||||
- components using Univention Keycloak as an identity provider (IdP).
|
- 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.
|
- All components have a client configured in Keycloak.
|
||||||
|
|
||||||
Some components trust others to handle authentication for them.
|
Some components trust others to handle authentication for them.
|
||||||
@@ -148,7 +148,7 @@ flowchart TD
|
|||||||
D-->K
|
D-->K
|
||||||
O-->K
|
O-->K
|
||||||
X-->K
|
X-->K
|
||||||
P-->|SAML|K
|
P-->K
|
||||||
E[Element]-->K
|
E[Element]-->K
|
||||||
J[Jitsi]-->K
|
J[Jitsi]-->K
|
||||||
I[IntercomService]-->K
|
I[IntercomService]-->K
|
||||||
@@ -184,11 +184,6 @@ sequenceDiagram
|
|||||||
Note over Browser: User is authenticated
|
Note over Browser: User is authenticated
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!note]
|
|
||||||
> 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
|
||||||
|
|
||||||
[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.
|
[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.
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ XWiki,PersistentVolume,1
|
|||||||
| -------------------- | ------------ | -------- | --------------------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
| -------------------- | ------------ | -------- | --------------------------------------------------------------------------------- | ---------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
|
||||||
| **ClamAV** | PVC | No | ClamAV Database | `clamav-database-clamav-simple-0` | `/var/lib/clamav` |
|
| **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` |
|
| **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` |
|
| | S3 | Yes | openDesk EE only: User mail | `dovecot` | `dovecot` |
|
||||||
| | Cassandra | Yes | openDesk EE only: Metadata and ACLs | `dovecot_dictmap`, `dovecot_acl` | |
|
| | Cassandra | Yes | openDesk EE only: Metadata and ACLs | `dovecot_dictmap`, `dovecot_acl` | |
|
||||||
| **Element/Synapse** | PostgreSQL | Yes | Application's main database | `matrix` | |
|
| **Element/Synapse** | PostgreSQL | Yes | Application's main database | `matrix` | |
|
||||||
|
|||||||
@@ -8,14 +8,19 @@ SPDX-License-Identifier: Apache-2.0
|
|||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
* [Disclaimer](#disclaimer)
|
* [Disclaimer](#disclaimer)
|
||||||
* [Deprecation warnings](#deprecation-warnings)
|
* [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)
|
* [Manual checks/actions](#manual-checksactions)
|
||||||
* [Versions ≥ v1.9.0](#versions--v190)
|
* [Versions ≥ v1.10.0](#versions--v1100)
|
||||||
* [Pre-upgrade to versions ≥ v1.9.0](#pre-upgrade-to-versions--v190)
|
* [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 fix: Cassandra passwords read from `databases.*`](#helmfile-fix-cassandra-passwords-read-from-databases)
|
||||||
* [Helmfile new feature: `functional.groupware.externalClients.*`](#helmfile-new-feature-functionalgroupwareexternalclients)
|
* [Helmfile new feature: `functional.groupware.externalClients.*`](#helmfile-new-feature-functionalgroupwareexternalclients)
|
||||||
* [Versions ≥ v1.8.0](#versions--v180)
|
* [Versions ≥ v1.8.0](#versions--v180)
|
||||||
* [Pre-upgrade to versions ≥ v1.8.0](#pre-upgrade-to-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 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 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)
|
* [New application default: XWiki blocks self-registration of user accounts](#new-application-default-xwiki-blocks-self-registration-of-user-accounts)
|
||||||
@@ -24,39 +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)
|
* [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: 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)
|
* [New application default: Gravatar is switched off for Jitsi and OpenProject](#new-application-default-gravatar-is-switched-off-for-jitsi-and-openproject)
|
||||||
* [Versions ≥ v1.7.0](#versions--v170)
|
* [Versions ≥ v1.7.0](#versions--v170)
|
||||||
* [Pre-upgrade to versions ≥ v1.7.0](#pre-upgrade-to-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)
|
* [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)
|
* [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 versions ≥ v1.7.0](#post-upgrade-to-versions--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)
|
* [Upstream fix: Provisioning of functional mailboxes](#upstream-fix-provisioning-of-functional-mailboxes)
|
||||||
* [Versions ≥ v1.6.0](#versions--v160)
|
* [Versions ≥ v1.6.0](#versions--v160)
|
||||||
* [Pre-upgrade to versions ≥ v1.6.0](#pre-upgrade-to-versions--v160)
|
* [Pre-upgrade to versions ≥ v1.6.0](#pre-upgrade-to-versions--v160)
|
||||||
* [Upstream constraint: Nubus' external secrets](#upstream-constraint-nubus-external-secrets)
|
* [Upstream constraint: Nubus' external secrets](#upstream-constraint-nubus-external-secrets)
|
||||||
* [Helmfile new secret: `secrets.minio.openxchangeUser`](#helmfile-new-secret-secretsminioopenxchangeuser)
|
* [Helmfile new secret: `secrets.minio.openxchangeUser`](#helmfile-new-secret-secretsminioopenxchangeuser)
|
||||||
* [Helmfile new object storage: `objectstores.openxchange.*`](#helmfile-new-object-storage-objectstoresopenxchange)
|
* [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)
|
* [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 versions ≥ v1.6.0](#post-upgrade-to-versions--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)
|
* [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)
|
||||||
* [Versions ≥ v1.4.0](#versions--v140)
|
* [Versions ≥ v1.4.0](#versions--v140)
|
||||||
* [Pre-upgrade to versions ≥ v1.4.0](#pre-upgrade-to-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)
|
* [Helmfile cleanup: `global.additionalMailDomains` as list](#helmfile-cleanup-globaladditionalmaildomains-as-list)
|
||||||
* [Versions ≥ v1.3.0](#versions--v130)
|
* [Versions ≥ v1.3.0](#versions--v130)
|
||||||
* [Pre-upgrade to versions ≥ v1.3.0](#pre-upgrade-to-versions--v130)
|
* [Pre-upgrade to versions ≥ v1.3.0](#pre-upgrade-to-versions--v130)
|
||||||
* [Helmfile new feature: `functional.authentication.ssoFederation`](#helmfile-new-feature-functionalauthenticationssofederation)
|
* [Helmfile new feature: `functional.authentication.ssoFederation`](#helmfile-new-feature-functionalauthenticationssofederation)
|
||||||
* [Versions ≥ v1.2.0](#versions--v120)
|
* [Versions ≥ v1.2.0](#versions--v120)
|
||||||
* [Pre-upgrade to versions ≥ v1.2.0](#pre-upgrade-to-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 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)
|
* [Helmfile new default: PostgreSQL for XWiki and Nextcloud](#helmfile-new-default-postgresql-for-xwiki-and-nextcloud)
|
||||||
* [Versions ≥ v1.1.2](#versions--v112)
|
* [Versions ≥ v1.1.2](#versions--v112)
|
||||||
* [Pre-upgrade to versions ≥ v1.1.2](#pre-upgrade-to-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)
|
* [Helmfile feature update: App settings wrapped in `apps.` element](#helmfile-feature-update-app-settings-wrapped-in-apps-element)
|
||||||
* [Versions ≥ v1.1.1](#versions--v111)
|
* [Versions ≥ v1.1.1](#versions--v111)
|
||||||
* [Pre-upgrade to versions ≥ v1.1.1](#pre-upgrade-to-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 feature update: Component specific `storageClassName`](#helmfile-feature-update-component-specific-storageclassname)
|
||||||
* [Helmfile new secret: `secrets.nubus.masterpassword`](#helmfile-new-secret-secretsnubusmasterpassword)
|
* [Helmfile new secret: `secrets.nubus.masterpassword`](#helmfile-new-secret-secretsnubusmasterpassword)
|
||||||
* [Versions ≥ v1.1.0](#versions--v110)
|
* [Versions ≥ v1.1.0](#versions--v110)
|
||||||
* [Pre-upgrade to versions ≥ v1.1.0](#pre-upgrade-to-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: 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: 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-)
|
* [Helmfile cleanup: Prefixing certain app directories with `opendesk-`](#helmfile-cleanup-prefixing-certain-app-directories-with-opendesk-)
|
||||||
@@ -66,10 +71,10 @@ SPDX-License-Identifier: Apache-2.0
|
|||||||
* [openDesk defaults (new): Enforce login](#opendesk-defaults-new-enforce-login)
|
* [openDesk defaults (new): Enforce login](#opendesk-defaults-new-enforce-login)
|
||||||
* [openDesk defaults (changed): Jitsi room history enabled](#opendesk-defaults-changed-jitsi-room-history-enabled)
|
* [openDesk defaults (changed): Jitsi room history enabled](#opendesk-defaults-changed-jitsi-room-history-enabled)
|
||||||
* [External requirements: Redis 7.4](#external-requirements-redis-74)
|
* [External requirements: Redis 7.4](#external-requirements-redis-74)
|
||||||
* [Post-upgrade to versions ≥ v1.1.0](#post-upgrade-to-versions--v110)
|
* [Post-upgrade to versions ≥ v1.1.0](#post-upgrade-to-versions--v110)
|
||||||
* [XWiki fix-ups](#xwiki-fix-ups)
|
* [XWiki fix-ups](#xwiki-fix-ups)
|
||||||
* [Versions ≥ v1.0.0](#versions--v100)
|
* [Versions ≥ v1.0.0](#versions--v100)
|
||||||
* [Pre-upgrade to versions ≥ v1.0.0](#pre-upgrade-to-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: 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)
|
* [Configuration Cleanup: Updated `global.imagePullSecrets`](#configuration-cleanup-updated-globalimagepullsecrets)
|
||||||
* [Changed openDesk defaults: Matrix presence status disabled](#changed-opendesk-defaults-matrix-presence-status-disabled)
|
* [Changed openDesk defaults: Matrix presence status disabled](#changed-opendesk-defaults-matrix-presence-status-disabled)
|
||||||
@@ -77,17 +82,17 @@ SPDX-License-Identifier: Apache-2.0
|
|||||||
* [Changed openDesk defaults: File-share configurability](#changed-opendesk-defaults-file-share-configurability)
|
* [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: 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)
|
* [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 versions ≥ v1.0.0](#post-upgrade-to-versions--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)
|
* [Configuration Improvement: Separate user permission for using Video Conference component](#configuration-improvement-separate-user-permission-for-using-video-conference-component)
|
||||||
* [Optional Cleanup](#optional-cleanup)
|
* [Optional Cleanup](#optional-cleanup)
|
||||||
* [Automated migrations - Details](#automated-migrations---details)
|
* [Automated migrations - Details](#automated-migrations---details)
|
||||||
* [Versions ≥ v1.6.0 (automated)](#versions--v160-automated)
|
* [Versions ≥ v1.6.0 (automated)](#versions--v160-automated)
|
||||||
* [Versions ≥ v1.6.0 migrations-post](#versions--v160-migrations-post)
|
* [Versions ≥ v1.6.0 migrations-post](#versions--v160-migrations-post)
|
||||||
* [Versions ≥ v1.2.0 (automated)](#versions--v120-automated)
|
* [Versions ≥ v1.2.0 (automated)](#versions--v120-automated)
|
||||||
* [Versions ≥ v1.2.0 migrations-pre](#versions--v120-migrations-pre)
|
* [Versions ≥ v1.2.0 migrations-pre](#versions--v120-migrations-pre)
|
||||||
* [Versions ≥ v1.2.0 migrations-post](#versions--v120-migrations-post)
|
* [Versions ≥ v1.2.0 migrations-post](#versions--v120-migrations-post)
|
||||||
* [Versions ≥ v1.1.0 (automated)](#versions--v110-automated)
|
* [Versions ≥ v1.1.0 (automated)](#versions--v110-automated)
|
||||||
* [Versions ≥ v1.0.0 (automated)](#versions--v100-automated)
|
* [Versions ≥ v1.0.0 (automated)](#versions--v100-automated)
|
||||||
* [Related components and artifacts](#related-components-and-artifacts)
|
* [Related components and artifacts](#related-components-and-artifacts)
|
||||||
* [Development](#development)
|
* [Development](#development)
|
||||||
<!-- TOC -->
|
<!-- TOC -->
|
||||||
@@ -144,7 +149,8 @@ matching that constraint, though our links always point to the newest patch rele
|
|||||||
|
|
||||||
<!-- IMPORTANT: Make sure to mark mandatory releases if an automatic migration requires a previous update to be installed -->
|
<!-- 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 |
|
| 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 ≥ 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 ≥ 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 ≥ 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 ≥ 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 ≥ 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 ≥ 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 ≥ v1.5.0 first |
|
||||||
@@ -171,6 +177,39 @@ If you would like more details about the automated migrations, please read secti
|
|||||||
> listed no extra manual steps are required when upgrading to that version, e.g. in the case of an update from
|
> 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.
|
> version 1.7.0 to version 1.7.1.
|
||||||
|
|
||||||
|
## Versions ≥ v1.10.0
|
||||||
|
|
||||||
|
### Pre-upgrade to versions ≥ 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 ≥ 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 ≥ v1.9.0
|
## Versions ≥ v1.9.0
|
||||||
|
|
||||||
### Pre-upgrade to versions ≥ v1.9.0
|
### Pre-upgrade to versions ≥ v1.9.0
|
||||||
@@ -237,7 +276,7 @@ The portal has been migrated to use OIDC for single sign-on by default. This int
|
|||||||
- `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.
|
- `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]
|
> [!note]
|
||||||
> The SAML Client for the Nubus portal is still preserved in Keycloak and will be removed in one of the next openDesk releases.
|
> 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
|
#### New application default: XWiki blocks self-registration of user accounts
|
||||||
|
|
||||||
|
|||||||
0
docs/security/image-sec/exceptions/.gitkeep
Normal file
0
docs/security/image-sec/exceptions/.gitkeep
Normal file
59
docs/security/image-sec/image-sec-001_latest-tag.yaml
Normal file
59
docs/security/image-sec/image-sec-001_latest-tag.yaml
Normal 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"
|
||||||
40
docs/security/image-sec/image-sec-002_trusted-registry.yaml
Normal file
40
docs/security/image-sec/image-sec-002_trusted-registry.yaml
Normal 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/*"
|
||||||
54
docs/security/image-sec/image-sec-003_digest.yaml
Normal file
54
docs/security/image-sec/image-sec-003_digest.yaml
Normal 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
|
||||||
40
docs/security/image-sec/image-sec-004_signature.yaml
Normal file
40
docs/security/image-sec/image-sec-004_signature.yaml
Normal 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-----
|
||||||
53
docs/security/image-sec/image-sec-005_sbom.yaml
Normal file
53
docs/security/image-sec/image-sec-005_sbom.yaml
Normal 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
|
||||||
56
docs/security/image-sec/image-sec-006_provenance.yaml
Normal file
56
docs/security/image-sec/image-sec-006_provenance.yaml
Normal 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
|
||||||
1
docs/security/image-sec/image-sec-007_vex.yaml
Normal file
1
docs/security/image-sec/image-sec-007_vex.yaml
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# TODO
|
||||||
7
docs/security/image-sec/image-sec.md
Normal file
7
docs/security/image-sec/image-sec.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
## Image Security
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
{{ .image-sec.status }}
|
||||||
42
docs/security/image-sec/kyverno-test.yaml
Normal file
42
docs/security/image-sec/kyverno-test.yaml
Normal 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
|
||||||
0
docs/security/net-mgt/exceptions/.gitkeep
Normal file
0
docs/security/net-mgt/exceptions/.gitkeep
Normal file
24
docs/security/net-mgt/kyverno-test.yaml
Normal file
24
docs/security/net-mgt/kyverno-test.yaml
Normal 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
|
||||||
37
docs/security/net-mgt/net-mgt-001_service-external-ips.yaml
Normal file
37
docs/security/net-mgt/net-mgt-001_service-external-ips.yaml
Normal 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"
|
||||||
35
docs/security/net-mgt/net-mgt-002_service-node-port.yaml
Normal file
35
docs/security/net-mgt/net-mgt-002_service-node-port.yaml
Normal 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"
|
||||||
@@ -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(@) }}"
|
||||||
7
docs/security/net-mgt/net-mgt.md
Normal file
7
docs/security/net-mgt/net-mgt.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
## Network Management
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
{{ .net-mgt.status }}
|
||||||
0
docs/security/rbac-mgt/exceptions/.gitkeep
Normal file
0
docs/security/rbac-mgt/exceptions/.gitkeep
Normal file
49
docs/security/rbac-mgt/kyverno-test.yaml
Normal file
49
docs/security/rbac-mgt/kyverno-test.yaml
Normal 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
|
||||||
@@ -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"
|
||||||
@@ -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"
|
||||||
2
docs/security/rbac-mgt/rbac-mgt-003_clusterrole.yaml
Normal file
2
docs/security/rbac-mgt/rbac-mgt-003_clusterrole.yaml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# No clusterrole allowed
|
||||||
|
# TODO
|
||||||
53
docs/security/rbac-mgt/rbac-mgt-004_escalation-verbs.yaml
Normal file
53
docs/security/rbac-mgt/rbac-mgt-004_escalation-verbs.yaml
Normal 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
|
||||||
@@ -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
|
||||||
42
docs/security/rbac-mgt/rbac-mgt-006_secret-verbs.yaml
Normal file
42
docs/security/rbac-mgt/rbac-mgt-006_secret-verbs.yaml
Normal 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[] }}"
|
||||||
41
docs/security/rbac-mgt/rbac-mgt-007_wildcard-verbs.yaml
Normal file
41
docs/security/rbac-mgt/rbac-mgt-007_wildcard-verbs.yaml
Normal 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
|
||||||
41
docs/security/rbac-mgt/rbac-mgt-008_wildcard-resources.yaml
Normal file
41
docs/security/rbac-mgt/rbac-mgt-008_wildcard-resources.yaml
Normal 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
|
||||||
7
docs/security/rbac-mgt/rbac-mgt.md
Normal file
7
docs/security/rbac-mgt/rbac-mgt.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
## Role Based Access Control (RBAC) Management
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
### Status
|
||||||
|
|
||||||
|
{{ .rbac-mgt.status }}
|
||||||
0
docs/security/sec-ctx/exceptions/.gitkeep
Normal file
0
docs/security/sec-ctx/exceptions/.gitkeep
Normal file
20
docs/security/sec-ctx/exceptions/postfix-exception.yaml
Normal file
20
docs/security/sec-ctx/exceptions/postfix-exception.yaml
Normal 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
|
||||||
66
docs/security/sec-ctx/kyverno-test.yaml
Normal file
66
docs/security/sec-ctx/kyverno-test.yaml
Normal 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
|
||||||
@@ -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
|
||||||
56
docs/security/sec-ctx/sec-ctx-002_require-as-non-root.yaml
Normal file
56
docs/security/sec-ctx/sec-ctx-002_require-as-non-root.yaml
Normal 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
|
||||||
45
docs/security/sec-ctx/sec-ctx-003_run-as-user.yaml
Normal file
45
docs/security/sec-ctx/sec-ctx-003_run-as-user.yaml
Normal 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
|
||||||
120
docs/security/sec-ctx/sec-ctx-004_capabilities.yaml
Normal file
120
docs/security/sec-ctx/sec-ctx-004_capabilities.yaml
Normal 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
|
||||||
113
docs/security/sec-ctx/sec-ctx-005_seccomp.yaml
Normal file
113
docs/security/sec-ctx/sec-ctx-005_seccomp.yaml
Normal 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
|
||||||
39
docs/security/sec-ctx/sec-ctx-006_sysctl.yaml
Normal file
39
docs/security/sec-ctx/sec-ctx-006_sysctl.yaml
Normal 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
|
||||||
38
docs/security/sec-ctx/sec-ctx-007_apparmor.yaml
Normal file
38
docs/security/sec-ctx/sec-ctx-007_apparmor.yaml
Normal 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
|
||||||
84
docs/security/sec-ctx/sec-ctx-008_selinux.yaml
Normal file
84
docs/security/sec-ctx/sec-ctx-008_selinux.yaml
Normal 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
|
||||||
44
docs/security/sec-ctx/sec-ctx-009_proc-mount.yaml
Normal file
44
docs/security/sec-ctx/sec-ctx-009_proc-mount.yaml
Normal 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
|
||||||
42
docs/security/sec-ctx/sec-ctx-010_privilege-escalation.yaml
Normal file
42
docs/security/sec-ctx/sec-ctx-010_privilege-escalation.yaml
Normal 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
|
||||||
18
docs/security/sec-ctx/sec-ctx.md
Normal file
18
docs/security/sec-ctx/sec-ctx.md
Normal 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 runtime’s 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 }}
|
||||||
0
docs/security/wld-iso/exceptions/.gitkeep
Normal file
0
docs/security/wld-iso/exceptions/.gitkeep
Normal file
77
docs/security/wld-iso/kyverno-test.yaml
Normal file
77
docs/security/wld-iso/kyverno-test.yaml
Normal 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
|
||||||
37
docs/security/wld-iso/wld-iso-001_host-namespaces.yaml
Normal file
37
docs/security/wld-iso/wld-iso-001_host-namespaces.yaml
Normal 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
|
||||||
35
docs/security/wld-iso/wld-iso-002_hostpath-volumes.yaml
Normal file
35
docs/security/wld-iso/wld-iso-002_hostpath-volumes.yaml
Normal 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
|
||||||
42
docs/security/wld-iso/wld-iso-003_host-ports.yaml
Normal file
42
docs/security/wld-iso/wld-iso-003_host-ports.yaml
Normal 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
|
||||||
115
docs/security/wld-iso/wld-iso-004_host-probes.yaml
Normal file
115
docs/security/wld-iso/wld-iso-004_host-probes.yaml
Normal 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): ""
|
||||||
53
docs/security/wld-iso/wld-iso-005_volume-types.yaml
Normal file
53
docs/security/wld-iso/wld-iso-005_volume-types.yaml
Normal 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
|
||||||
101
docs/security/wld-iso/wld-iso-006_cri-socket-mount.yaml
Normal file
101
docs/security/wld-iso/wld-iso-006_cri-socket-mount.yaml
Normal 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"
|
||||||
@@ -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: "?*"
|
||||||
36
docs/security/wld-iso/wld-iso-008_emptydir-sizelimit.yaml
Normal file
36
docs/security/wld-iso/wld-iso-008_emptydir-sizelimit.yaml
Normal 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: "?*"
|
||||||
50
docs/security/wld-iso/wld-iso-009_secrets-from-envs.yaml
Normal file
50
docs/security/wld-iso/wld-iso-009_secrets-from-envs.yaml
Normal 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"
|
||||||
@@ -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"
|
||||||
14
docs/security/wld-iso/wld-iso.md
Normal file
14
docs/security/wld-iso/wld-iso.md
Normal 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 }}
|
||||||
@@ -47,7 +47,10 @@ ingress:
|
|||||||
- "{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}"
|
- "{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}"
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ collabora:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.apps.collaboraController.enabled }}
|
{{- if .Values.apps.collaboraController.enabled }}
|
||||||
--o:indirection_endpoint.url=https://{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}/controller/routeToken
|
--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
|
--o:monitors.monitor[0][@retryInterval]=5
|
||||||
{{- end }}
|
{{- end }}
|
||||||
username: "collabora-internal-admin"
|
username: "collabora-internal-admin"
|
||||||
@@ -110,7 +110,10 @@ ingress:
|
|||||||
- "{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}"
|
- "{{ .Values.global.hosts.collabora }}.{{ .Values.global.domain }}"
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.collabora.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "collabora"
|
||||||
|
{{- with .Values.annotations.collabora.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
fsGroup: 1001
|
fsGroup: 1001
|
||||||
|
|||||||
@@ -55,7 +55,10 @@ persistence:
|
|||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.cryptpad.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "cryptpad"
|
||||||
|
{{- with .Values.annotations.cryptpad.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
fsGroup: 4001
|
fsGroup: 4001
|
||||||
|
|||||||
@@ -143,7 +143,10 @@ ingress:
|
|||||||
{{ .Values.annotations.element.ingress | toYaml | nindent 4 }}
|
{{ .Values.annotations.element.ingress | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -44,7 +44,10 @@ ingress:
|
|||||||
{{ .Values.annotations.elementMatrixNeoboardWidget.ingress | toYaml | nindent 4 }}
|
{{ .Values.annotations.elementMatrixNeoboardWidget.ingress | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -44,7 +44,10 @@ ingress:
|
|||||||
{{ .Values.annotations.elementMatrixNeochoiceWidget.ingress | toYaml | nindent 4 }}
|
{{ .Values.annotations.elementMatrixNeochoiceWidget.ingress | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ image:
|
|||||||
fullnameOverride: "matrix-neodatefix-bot-bootstrap"
|
fullnameOverride: "matrix-neodatefix-bot-bootstrap"
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
@@ -42,7 +45,7 @@ securityContext:
|
|||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.synapseCreateUser | toYaml | nindent 4 }}
|
{{ .Values.seLinuxOptions.synapseCreateUser | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
serviceAccount:
|
||||||
{{ .Values.annotations.elementMatrixNeodatefixBotBootstrap.serviceAccount | toYaml | nindent 2 }}
|
annotations:
|
||||||
|
{{ .Values.annotations.elementMatrixNeodatefixBotBootstrap.serviceAccount | toYaml | nindent 4 }}
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -90,7 +90,10 @@ persistence:
|
|||||||
{{ .Values.annotations.elementMatrixNeodatefixBot.persistence | toYaml | nindent 4 }}
|
{{ .Values.annotations.elementMatrixNeodatefixBot.persistence | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -49,7 +49,10 @@ ingress:
|
|||||||
{{ .Values.annotations.elementMatrixNeodatefixWidget.ingress | toYaml | nindent 4 }}
|
{{ .Values.annotations.elementMatrixNeodatefixWidget.ingress | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -25,7 +25,10 @@ image:
|
|||||||
fullnameOverride: "opendesk-matrix-user-verification-service-bootstrap"
|
fullnameOverride: "opendesk-matrix-user-verification-service-bootstrap"
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
|
|||||||
@@ -44,7 +44,10 @@ image:
|
|||||||
tag: {{ .Values.images.matrixUserVerificationService.tag | quote }}
|
tag: {{ .Values.images.matrixUserVerificationService.tag | quote }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -56,7 +56,12 @@ cron:
|
|||||||
repository: {{ .Values.images.elementSyncAdmins.repository | quote }}
|
repository: {{ .Values.images.elementSyncAdmins.repository | quote }}
|
||||||
tag: {{ .Values.images.elementSyncAdmins.tag | quote }}
|
tag: {{ .Values.images.elementSyncAdmins.tag | quote }}
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "opendesk-synapse-admin-cron"
|
||||||
#fullnameOverride: "opendesk-synapse-admin"
|
#fullnameOverride: "opendesk-synapse-admin"
|
||||||
|
|
||||||
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "opendesk-synapse-admin"
|
||||||
image:
|
image:
|
||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDeEnterprise .Values.global.imageRegistry .Values.images.elementSynapseAdmin.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDeEnterprise .Values.global.imageRegistry .Values.images.elementSynapseAdmin.registry | quote }}
|
||||||
repository: {{ .Values.images.elementSynapseAdmin.repository | quote }}
|
repository: {{ .Values.images.elementSynapseAdmin.repository | quote }}
|
||||||
|
|||||||
@@ -16,4 +16,6 @@ image:
|
|||||||
tag: {{ .Values.images.elementPipe.tag | quote }}
|
tag: {{ .Values.images.elementPipe.tag | quote }}
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
fullnameOverride: "opendesk-synapse-adminbot-pipe"
|
fullnameOverride: "opendesk-synapse-adminbot-pipe"
|
||||||
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "opendesk-synapse-adminbot-pipe"
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -20,4 +20,6 @@ ingress:
|
|||||||
enabled: {{ .Values.ingress.enabled }}
|
enabled: {{ .Values.ingress.enabled }}
|
||||||
tls:
|
tls:
|
||||||
secretName: {{ .Values.ingress.tls.secretName | quote }}
|
secretName: {{ .Values.ingress.tls.secretName | quote }}
|
||||||
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "opendesk-synapse-adminbot-web"
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -16,4 +16,6 @@ image:
|
|||||||
tag: {{ .Values.images.elementPipe.tag | quote }}
|
tag: {{ .Values.images.elementPipe.tag | quote }}
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
fullnameOverride: "opendesk-synapse-auditbot-pipe"
|
fullnameOverride: "opendesk-synapse-auditbot-pipe"
|
||||||
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "opendesk-synapse-auditbot-pipe"
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -51,4 +51,6 @@ image:
|
|||||||
url: {{ .Values.images.elementGroupsync.repository | quote }}
|
url: {{ .Values.images.elementGroupsync.repository | quote }}
|
||||||
tag: {{ .Values.images.elementGroupsync.tag | quote }}
|
tag: {{ .Values.images.elementGroupsync.tag | quote }}
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "opendesk-synapse-groupsync"
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -56,7 +56,10 @@ ingress:
|
|||||||
secretName: {{ .Values.ingress.tls.secretName | quote }}
|
secretName: {{ .Values.ingress.tls.secretName | quote }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -250,7 +250,10 @@ persistence:
|
|||||||
{{ .Values.annotations.elementSynapse.persistence | toYaml | nindent 4 }}
|
{{ .Values.annotations.elementSynapse.persistence | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -49,7 +49,10 @@ ingress:
|
|||||||
{{ .Values.annotations.elementWellKnown.ingress | toYaml | nindent 4 }}
|
{{ .Values.annotations.elementWellKnown.ingress | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
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:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -111,9 +111,10 @@ jitsi:
|
|||||||
type: "RuntimeDefault"
|
type: "RuntimeDefault"
|
||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.jitsi | toYaml | nindent 8 }}
|
{{ .Values.seLinuxOptions.jitsi | toYaml | nindent 8 }}
|
||||||
{{- if .Values.annotations.jitsiWeb.pod }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.jitsiWeb.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "jitsi-web"
|
||||||
|
{{- with .Values.annotations.jitsiWeb.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
prosody:
|
prosody:
|
||||||
image:
|
image:
|
||||||
@@ -164,9 +165,10 @@ jitsi:
|
|||||||
type: "RuntimeDefault"
|
type: "RuntimeDefault"
|
||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.prosody | toYaml | nindent 8 }}
|
{{ .Values.seLinuxOptions.prosody | toYaml | nindent 8 }}
|
||||||
{{- if .Values.annotations.jitsiProsody.pod }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.jitsiProsody.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "jitsi-prosody"
|
||||||
|
{{- with .Values.annotations.jitsiProsody.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
jicofo:
|
jicofo:
|
||||||
replicaCount: {{ .Values.replicas.jicofo }}
|
replicaCount: {{ .Values.replicas.jicofo }}
|
||||||
@@ -191,9 +193,10 @@ jitsi:
|
|||||||
type: "RuntimeDefault"
|
type: "RuntimeDefault"
|
||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.jicofo | toYaml | nindent 8 }}
|
{{ .Values.seLinuxOptions.jicofo | toYaml | nindent 8 }}
|
||||||
{{- if .Values.annotations.jitsiJicofo.pod }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.jitsiJicofo.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "jitsi-jicofo"
|
||||||
|
{{- with .Values.annotations.jitsiJicofo.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
jigasi:
|
jigasi:
|
||||||
replicaCount: {{ .Values.replicas.jigasi }}
|
replicaCount: {{ .Values.replicas.jigasi }}
|
||||||
@@ -224,9 +227,10 @@ jitsi:
|
|||||||
type: "RuntimeDefault"
|
type: "RuntimeDefault"
|
||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.jigasi | toYaml | nindent 8 }}
|
{{ .Values.seLinuxOptions.jigasi | toYaml | nindent 8 }}
|
||||||
{{- if .Values.annotations.jitsiJigasi.pod }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.jitsiJigasi.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "jitsi-jigasi"
|
||||||
|
{{- with .Values.annotations.jitsiJigasi.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
jvb:
|
jvb:
|
||||||
replicaCount: {{ .Values.replicas.jvb }}
|
replicaCount: {{ .Values.replicas.jvb }}
|
||||||
@@ -260,9 +264,10 @@ jitsi:
|
|||||||
type: "RuntimeDefault"
|
type: "RuntimeDefault"
|
||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.jvb | toYaml | nindent 8 }}
|
{{ .Values.seLinuxOptions.jvb | toYaml | nindent 8 }}
|
||||||
{{- if .Values.annotations.jitsiJvb.pod }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.jitsiJvb.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "jitsi-jvb"
|
||||||
|
{{- with .Values.annotations.jitsiJvb.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
metrics:
|
metrics:
|
||||||
prometheusAnnotations:
|
prometheusAnnotations:
|
||||||
@@ -288,9 +293,10 @@ jitsi:
|
|||||||
# Chart does not allow to template more
|
# Chart does not allow to template more
|
||||||
capabilities:
|
capabilities:
|
||||||
add: ["SYS_ADMIN"]
|
add: ["SYS_ADMIN"]
|
||||||
{{- if .Values.annotations.jitsiJibri.pod }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.jitsiJibri.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "jitsi-jibri"
|
||||||
|
{{- with .Values.annotations.jitsiJibri.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
imagePullSecrets:
|
imagePullSecrets:
|
||||||
{{- range .Values.global.imagePullSecrets }}
|
{{- range .Values.global.imagePullSecrets }}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ global:
|
|||||||
{{ .Values.global.imagePullSecrets | toYaml | nindent 4 }}
|
{{ .Values.global.imagePullSecrets | toYaml | nindent 4 }}
|
||||||
|
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "opendesk-nextcloud-php"
|
intents.otterize.com/service-name: "opendesk-nextcloud-management"
|
||||||
{{- with .Values.annotations.nextcloudNextcloudMgmt.additional }}
|
{{- with .Values.annotations.nextcloudNextcloudMgmt.additional }}
|
||||||
{{ . | toYaml | nindent 2}}
|
{{ . | toYaml | nindent 2}}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ global:
|
|||||||
{{ .Values.global.imagePullSecrets | toYaml | nindent 4 }}
|
{{ .Values.global.imagePullSecrets | toYaml | nindent 4 }}
|
||||||
|
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "opendesk-nextcloud-notifypush"
|
|
||||||
{{- with .Values.annotations.nextcloudNotifyPush.additional }}
|
{{- with .Values.annotations.nextcloudNotifyPush.additional }}
|
||||||
{{ . | toYaml | nindent 4 }}
|
{{ . | toYaml | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -114,7 +113,10 @@ metrics:
|
|||||||
{{ .Values.annotations.nextcloudNotifyPush.serviceMetrics | toYaml | nindent 6 }}
|
{{ .Values.annotations.nextcloudNotifyPush.serviceMetrics | toYaml | nindent 6 }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nextcloudNotifyPush.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "opendesk-nextcloud-notifypush"
|
||||||
|
{{- with .Values.annotations.nextcloudNotifyPush.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
fsGroup: 101
|
fsGroup: 101
|
||||||
# prometheus:
|
# prometheus:
|
||||||
|
|||||||
@@ -39,7 +39,10 @@ exporter:
|
|||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
tag: {{ .Values.images.nextcloudExporter.tag | quote }}
|
tag: {{ .Values.images.nextcloudExporter.tag | quote }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nextcloudExporter.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "opendesk-nextcloud-exporter"
|
||||||
|
{{- with .Values.annotations.nextcloudExporter.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
prometheus:
|
prometheus:
|
||||||
serviceMonitor:
|
serviceMonitor:
|
||||||
enabled: {{ .Values.monitoring.prometheus.serviceMonitors.enabled }}
|
enabled: {{ .Values.monitoring.prometheus.serviceMonitors.enabled }}
|
||||||
@@ -76,7 +79,7 @@ aio:
|
|||||||
topologyKey: "kubernetes.io/hostname"
|
topologyKey: "kubernetes.io/hostname"
|
||||||
|
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "opendesk-nextcloud-aio"
|
intents.otterize.com/service-name: "opendesk-nextcloud-aio-cron"
|
||||||
{{- with .Values.annotations.nextcloudAio.additional }}
|
{{- with .Values.annotations.nextcloudAio.additional }}
|
||||||
{{ . | toYaml | nindent 4 }}
|
{{ . | toYaml | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -177,7 +180,10 @@ aio:
|
|||||||
tls:
|
tls:
|
||||||
secretName: {{ .Values.ingress.tls.secretName | quote }}
|
secretName: {{ .Values.ingress.tls.secretName | quote }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nextcloudAio.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "opendesk-nextcloud-aio"
|
||||||
|
{{- with .Values.annotations.nextcloudAio.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
fsGroup: 101
|
fsGroup: 101
|
||||||
prometheus:
|
prometheus:
|
||||||
|
|||||||
@@ -117,11 +117,20 @@ backend:
|
|||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.notesBackend | toYaml | nindent 6 }}
|
{{ .Values.seLinuxOptions.notesBackend | toYaml | nindent 6 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.notesBackend.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "impress-backend"
|
||||||
|
{{- with .Values.annotations.notesBackend.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
podAnnotationsCreateUser:
|
podAnnotationsCreateUser:
|
||||||
{{ .Values.annotations.notesBackend.createUserJob | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "impress-create-user"
|
||||||
|
{{- with .Values.annotations.notesBackend.createUserJob }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
podAnnotationsMigrate:
|
podAnnotationsMigrate:
|
||||||
{{ .Values.annotations.notesBackend.migrateJob | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "impress-migrate"
|
||||||
|
{{- with .Values.annotations.notesBackend.migrateJob }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
fsGroup: 1000
|
fsGroup: 1000
|
||||||
@@ -189,7 +198,10 @@ frontend:
|
|||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
{{ .Values.seLinuxOptions.notesFrontend | toYaml | nindent 6 }}
|
{{ .Values.seLinuxOptions.notesFrontend | toYaml | nindent 6 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.notesFrontend.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "impress-frontend"
|
||||||
|
{{- with .Values.annotations.notesFrontend.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
fsGroup: 1000
|
fsGroup: 1000
|
||||||
@@ -257,7 +269,10 @@ y-provider:
|
|||||||
{{ .Values.annotations.notesYProvider.ingressCollaborationWS | toYaml | nindent 6 }}
|
{{ .Values.annotations.notesYProvider.ingressCollaborationWS | toYaml | nindent 6 }}
|
||||||
ingressClassName: {{ .Values.ingress.ingressClassName }}
|
ingressClassName: {{ .Values.ingress.ingressClassName }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.notesYProvider.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "impress-y-provider"
|
||||||
|
{{- with .Values.annotations.notesYProvider.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
fsGroup: 1001
|
fsGroup: 1001
|
||||||
|
|||||||
@@ -109,7 +109,10 @@ ingress:
|
|||||||
{{ .Values.annotations.nubusIntercomService.ingress | toYaml | nindent 4 }}
|
{{ .Values.annotations.nubusIntercomService.ingress | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusIntercomService.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "intercom-service"
|
||||||
|
{{- with .Values.annotations.nubusIntercomService.pod }}
|
||||||
|
{{ . | toYaml | nindent 2}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -42,7 +42,10 @@ configuration:
|
|||||||
value: {{ .Values.objectstores.nubus.secretKey | default .Values.secrets.minio.umsUser | quote }}
|
value: {{ .Values.objectstores.nubus.secretKey | default .Values.secrets.minio.umsUser | quote }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusNginxS3Gateway.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "nubus-nginx-s3-gateway"
|
||||||
|
{{- with .Values.annotations.nubusNginxS3Gateway.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.nginxS3Gateway | toYaml | nindent 2 }}
|
{{ .Values.resources.nginxS3Gateway | toYaml | nindent 2 }}
|
||||||
|
|||||||
@@ -183,20 +183,12 @@ keycloak:
|
|||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloak.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloak.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusKeycloak.repository }}
|
repository: {{ .Values.images.nubusKeycloak.repository }}
|
||||||
tag: {{ .Values.images.nubusKeycloak.tag }}
|
tag: {{ .Values.images.nubusKeycloak.tag }}
|
||||||
# NOTE: The subchart "keycloak" does not yet support
|
|
||||||
# "global.imagePullPolicy". The local configuration can be removed once it
|
|
||||||
# does have this feature.
|
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
|
||||||
ingress:
|
ingress:
|
||||||
enabled: false
|
enabled: false
|
||||||
keycloak:
|
keycloak:
|
||||||
auth:
|
auth:
|
||||||
username: "kcadmin"
|
username: "kcadmin"
|
||||||
# TODO: Pending secrets refactoring to be able to provide the value directly
|
password: {{ .Values.secrets.keycloak.adminPassword | quote }}
|
||||||
existingSecret:
|
|
||||||
name: "ums-opendesk-keycloak-credentials"
|
|
||||||
keyMapping:
|
|
||||||
adminPassword: "admin_password"
|
|
||||||
login:
|
login:
|
||||||
messages:
|
messages:
|
||||||
de:
|
de:
|
||||||
@@ -274,7 +266,6 @@ nubusTwofaHelpdesk:
|
|||||||
nubusNotificationsApi:
|
nubusNotificationsApi:
|
||||||
enabled: false
|
enabled: false
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-notifications-api"
|
|
||||||
{{- with .Values.annotations.nubusNotificationsApi.additional }}
|
{{- with .Values.annotations.nubusNotificationsApi.additional }}
|
||||||
{{ . | toYaml | nindent 4 }}
|
{{ . | toYaml | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -312,7 +303,10 @@ nubusNotificationsApi:
|
|||||||
annotations:
|
annotations:
|
||||||
{{ .Values.annotations.nubusNotificationsApi.persistence | toYaml | nindent 6 }}
|
{{ .Values.annotations.nubusNotificationsApi.persistence | toYaml | nindent 6 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusNotificationsApi.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-notifications-api"
|
||||||
|
{{- with .Values.annotations.nubusNotificationsApi.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
postgresql:
|
postgresql:
|
||||||
connection:
|
connection:
|
||||||
host: {{ .Values.databases.umsNotificationsApi.host | quote }}
|
host: {{ .Values.databases.umsNotificationsApi.host | quote }}
|
||||||
@@ -339,7 +333,6 @@ nubusNotificationsApi:
|
|||||||
|
|
||||||
nubusPortalFrontend:
|
nubusPortalFrontend:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-portal-frontend"
|
|
||||||
{{- with .Values.annotations.nubusPortalFrontend.additional }}
|
{{- with .Values.annotations.nubusPortalFrontend.additional }}
|
||||||
{{ . | toYaml | nindent 4 }}
|
{{ . | toYaml | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -415,7 +408,10 @@ nubusPortalFrontend:
|
|||||||
annotations:
|
annotations:
|
||||||
{{ .Values.annotations.nubusPortalFrontend.persistence | toYaml | nindent 6 }}
|
{{ .Values.annotations.nubusPortalFrontend.persistence | toYaml | nindent 6 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusPortalFrontend.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-portal-frontend"
|
||||||
|
{{- with .Values.annotations.nubusPortalFrontend.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
portalFrontend:
|
portalFrontend:
|
||||||
branding:
|
branding:
|
||||||
css: {{ .Values.theme.styles.portal.main | toJson }}
|
css: {{ .Values.theme.styles.portal.main | toJson }}
|
||||||
@@ -444,12 +440,6 @@ nubusKeycloakExtensions:
|
|||||||
keycloak:
|
keycloak:
|
||||||
auth:
|
auth:
|
||||||
username: "kcadmin"
|
username: "kcadmin"
|
||||||
# TODO: Pending secrets refactoring in component chart. This will refer to
|
|
||||||
# the secret generated by the keycloak subchart.
|
|
||||||
existingSecret:
|
|
||||||
name: "ums-opendesk-keycloak-credentials"
|
|
||||||
keyMapping:
|
|
||||||
adminPassword: "admin_password"
|
|
||||||
proxy:
|
proxy:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
{{ .Values.annotations.nubusKeycloakExtensions.proxyAdditional | toYaml | nindent 6 }}
|
{{ .Values.annotations.nubusKeycloakExtensions.proxyAdditional | toYaml | nindent 6 }}
|
||||||
@@ -457,13 +447,6 @@ nubusKeycloakExtensions:
|
|||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloakExtensionProxy.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloakExtensionProxy.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusKeycloakExtensionProxy.repository }}
|
repository: {{ .Values.images.nubusKeycloakExtensionProxy.repository }}
|
||||||
tag: {{ .Values.images.nubusKeycloakExtensionProxy.tag }}
|
tag: {{ .Values.images.nubusKeycloakExtensionProxy.tag }}
|
||||||
# NOTE: The subchart "keycloak-extensions" does not yet support
|
|
||||||
# "global.imagePullPolicy".
|
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
|
||||||
# NOTE: Remove once the keycloak-extensions subchart respects
|
|
||||||
# "global.imagePullSecrets".
|
|
||||||
imagePullSecrets:
|
|
||||||
{{ .Values.global.imagePullSecrets | toYaml | nindent 6 }}
|
|
||||||
ingress:
|
ingress:
|
||||||
annotations:
|
annotations:
|
||||||
nginx.org/proxy-buffer-size: "8k"
|
nginx.org/proxy-buffer-size: "8k"
|
||||||
@@ -559,13 +542,6 @@ nubusKeycloakExtensions:
|
|||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloakExtensionHandler.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloakExtensionHandler.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusKeycloakExtensionHandler.repository }}
|
repository: {{ .Values.images.nubusKeycloakExtensionHandler.repository }}
|
||||||
tag: {{ .Values.images.nubusKeycloakExtensionHandler.tag }}
|
tag: {{ .Values.images.nubusKeycloakExtensionHandler.tag }}
|
||||||
# NOTE: The subchart "keycloak-extensions" does not yet support
|
|
||||||
# "global.imagePullPolicy".
|
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
|
||||||
# NOTE: Remove once the keycloak-extensions subchart respects
|
|
||||||
# "global.imagePullSecrets".
|
|
||||||
imagePullSecrets:
|
|
||||||
{{ .Values.global.imagePullSecrets | toYaml | nindent 6 }}
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-keycloak-extensions-handler"
|
intents.otterize.com/service-name: "ums-keycloak-extensions-handler"
|
||||||
{{- with .Values.annotations.nubusKeycloakExtensions.handlerPod }}
|
{{- with .Values.annotations.nubusKeycloakExtensions.handlerPod }}
|
||||||
@@ -618,7 +594,7 @@ nubusPortalConsumer:
|
|||||||
replicaCount: {{ .Values.replicas.umsPortalConsumer }}
|
replicaCount: {{ .Values.replicas.umsPortalConsumer }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsPortalConsumer | toYaml | nindent 4 }}
|
{{ .Values.resources.umsPortalConsumer | toYaml | nindent 4 }}
|
||||||
resourcesWaitForDependency:
|
initResources:
|
||||||
{{ .Values.resources.umsPortalConsumerDependencies | toYaml | nindent 4 }}
|
{{ .Values.resources.umsPortalConsumerDependencies | toYaml | nindent 4 }}
|
||||||
containerSecurityContext:
|
containerSecurityContext:
|
||||||
seccompProfile:
|
seccompProfile:
|
||||||
@@ -666,7 +642,6 @@ nubusPortalConsumer:
|
|||||||
|
|
||||||
nubusPortalServer:
|
nubusPortalServer:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-portal-server"
|
|
||||||
{{- with .Values.annotations.nubusPortalServer.additional }}
|
{{- with .Values.annotations.nubusPortalServer.additional }}
|
||||||
{{ . | toYaml | nindent 4 }}
|
{{ . | toYaml | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -711,7 +686,10 @@ nubusPortalServer:
|
|||||||
annotations:
|
annotations:
|
||||||
{{ .Values.annotations.nubusPortalServer.persistence | toYaml | nindent 6 }}
|
{{ .Values.annotations.nubusPortalServer.persistence | toYaml | nindent 6 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusPortalServer.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-portal-server"
|
||||||
|
{{- with .Values.annotations.nubusPortalServer.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
portalServer:
|
portalServer:
|
||||||
centralNavigation:
|
centralNavigation:
|
||||||
enabled: true
|
enabled: true
|
||||||
@@ -839,7 +817,10 @@ nubusUdmRestApi:
|
|||||||
annotations:
|
annotations:
|
||||||
{{ .Values.annotations.nubusUdmRestApi.persistence | toYaml | nindent 6 }}
|
{{ .Values.annotations.nubusUdmRestApi.persistence | toYaml | nindent 6 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusUdmRestApi.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-udm-rest-api"
|
||||||
|
{{- with .Values.annotations.nubusUdmRestApi.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end}}
|
||||||
replicaCount: {{ .Values.replicas.umsUdmRestApi }}
|
replicaCount: {{ .Values.replicas.umsUdmRestApi }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsUdmRestApi | toYaml | nindent 4 }}
|
{{ .Values.resources.umsUdmRestApi | toYaml | nindent 4 }}
|
||||||
@@ -898,7 +879,7 @@ nubusLdapServer:
|
|||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
{{ .Values.annotations.nubusLdapServer.additional | toYaml | nindent 4 }}
|
{{ .Values.annotations.nubusLdapServer.additional | toYaml | nindent 4 }}
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-ldap-server"
|
{{ .Values.annotations.nubusLdapServer.additional | toYaml | nindent 4 }}
|
||||||
dhInitcontainer:
|
dhInitcontainer:
|
||||||
image:
|
image:
|
||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusLdapServerDhInitContainer.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusLdapServerDhInitContainer.registry | quote }}
|
||||||
@@ -921,7 +902,10 @@ nubusLdapServer:
|
|||||||
size: {{ .Values.persistence.storages.nubusLdapServerData.size | quote }}
|
size: {{ .Values.persistence.storages.nubusLdapServerData.size | quote }}
|
||||||
storageClass: {{ coalesce .Values.persistence.storages.nubusLdapServerData.storageClassName .Values.persistence.storageClassNames.RWO | quote }}
|
storageClass: {{ coalesce .Values.persistence.storages.nubusLdapServerData.storageClassName .Values.persistence.storageClassNames.RWO | quote }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusLdapServer.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-ldap-server"
|
||||||
|
{{- with .Values.annotations.nubusLdapServer.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
replicaCountPrimary: {{ .Values.replicas.umsLdapServerPrimary }}
|
replicaCountPrimary: {{ .Values.replicas.umsLdapServerPrimary }}
|
||||||
replicaCountSecondary: {{ .Values.replicas.umsLdapServerSecondary }}
|
replicaCountSecondary: {{ .Values.replicas.umsLdapServerSecondary }}
|
||||||
replicaCountProxy: {{ .Values.replicas.umsLdapServerProxy }}
|
replicaCountProxy: {{ .Values.replicas.umsLdapServerProxy }}
|
||||||
@@ -947,7 +931,6 @@ nubusProvisioning:
|
|||||||
{{ .Values.annotations.nubusProvisioning.additional | toYaml | nindent 4 }}
|
{{ .Values.annotations.nubusProvisioning.additional | toYaml | nindent 4 }}
|
||||||
api:
|
api:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-provisioning-api"
|
|
||||||
{{- with .Values.annotations.nubusProvisioning.apiAdditional }}
|
{{- with .Values.annotations.nubusProvisioning.apiAdditional }}
|
||||||
{{ . | toYaml | nindent 6 }}
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -966,7 +949,10 @@ nubusProvisioning:
|
|||||||
auth:
|
auth:
|
||||||
password: {{ .Values.secrets.nubus.provisioning.api.natsPassword | quote}}
|
password: {{ .Values.secrets.nubus.provisioning.api.natsPassword | quote}}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusProvisioning.apiPod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "ums-provisioning-api"
|
||||||
|
{{- with .Values.annotations.nubusProvisioning.apiPod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsProvisioningApi | toYaml | nindent 6 }}
|
{{ .Values.resources.umsProvisioningApi | toYaml | nindent 6 }}
|
||||||
containerSecurityContext:
|
containerSecurityContext:
|
||||||
@@ -985,7 +971,6 @@ nubusProvisioning:
|
|||||||
{{ .Values.seLinuxOptions.umsProvisioning | toYaml | nindent 6 }}
|
{{ .Values.seLinuxOptions.umsProvisioning | toYaml | nindent 6 }}
|
||||||
dispatcher:
|
dispatcher:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-provisioning-dispatcher"
|
|
||||||
{{- with .Values.annotations.nubusProvisioning.dispatcherAdditional }}
|
{{- with .Values.annotations.nubusProvisioning.dispatcherAdditional }}
|
||||||
{{ . | toYaml | nindent 6 }}
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -997,20 +982,24 @@ nubusProvisioning:
|
|||||||
auth:
|
auth:
|
||||||
password: {{ .Values.secrets.nubus.provisioning.dispatcherNatsPassword | quote}}
|
password: {{ .Values.secrets.nubus.provisioning.dispatcherNatsPassword | quote}}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusProvisioning.dispatcherPod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "ums-provisioning-dispatcher"
|
||||||
|
{{- with .Values.annotations.nubusProvisioning.dispatcherPod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsProvisioningDispatcher | toYaml | nindent 6 }}
|
{{ .Values.resources.umsProvisioningDispatcher | toYaml | nindent 6 }}
|
||||||
nats:
|
nats:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-provisioning-nats"
|
|
||||||
{{- with .Values.annotations.nubusProvisioning.natsAdditional }}
|
{{- with .Values.annotations.nubusProvisioning.natsAdditional }}
|
||||||
{{ . | toYaml | nindent 6 }}
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
auth:
|
|
||||||
adminPassword: {{ .Values.secrets.nats.natsAdminPassword | quote }}
|
|
||||||
config:
|
config:
|
||||||
cluster:
|
cluster:
|
||||||
replicas: {{ .Values.replicas.umsProvisioningNats }}
|
replicas: {{ .Values.replicas.umsProvisioningNats }}
|
||||||
|
createUsers:
|
||||||
|
adminUser:
|
||||||
|
auth:
|
||||||
|
password: {{ .Values.secrets.nats.natsAdminPassword | quote }}
|
||||||
containerSecurityContext:
|
containerSecurityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
capabilities:
|
capabilities:
|
||||||
@@ -1030,19 +1019,12 @@ nubusProvisioning:
|
|||||||
registry: {{ coalesce .Values.repositories.image.dockerHub .Values.global.imageRegistry .Values.images.nubusNats.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.dockerHub .Values.global.imageRegistry .Values.images.nubusNats.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusNats.repository }}
|
repository: {{ .Values.images.nubusNats.repository }}
|
||||||
tag: {{ .Values.images.nubusNats.tag }}
|
tag: {{ .Values.images.nubusNats.tag }}
|
||||||
# NOTE: The subchart does not yet fully support
|
|
||||||
# "global.imagePullPolicy". This can be removed once the subchart has
|
|
||||||
# been adjusted.
|
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
|
||||||
natsBox:
|
natsBox:
|
||||||
|
enabled: {{ or .Values.technical.nubus.provisioning.nats.natsBox.enabled .Values.debug.enabled }}
|
||||||
image:
|
image:
|
||||||
registry: {{ coalesce .Values.repositories.image.dockerHub .Values.global.imageRegistry .Values.images.nubusNatsBox.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.dockerHub .Values.global.imageRegistry .Values.images.nubusNatsBox.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusNatsBox.repository }}
|
repository: {{ .Values.images.nubusNatsBox.repository }}
|
||||||
tag: {{ .Values.images.nubusNatsBox.tag }}
|
tag: {{ .Values.images.nubusNatsBox.tag }}
|
||||||
# NOTE: The subchart does not yet fully support
|
|
||||||
# "global.imagePullPolicy". This can be removed once the subchart has
|
|
||||||
# been adjusted.
|
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
|
||||||
persistence:
|
persistence:
|
||||||
size: {{ .Values.persistence.storages.nubusProvisioningNats.size }}
|
size: {{ .Values.persistence.storages.nubusProvisioningNats.size }}
|
||||||
# storageClassName: -- coalesce .Values.persistence.storages.nubusProvisioningNats.storageClassName .Values.persistence.storageClassNames.RWO | quote --
|
# storageClassName: -- coalesce .Values.persistence.storages.nubusProvisioningNats.storageClassName .Values.persistence.storageClassNames.RWO | quote --
|
||||||
@@ -1060,10 +1042,12 @@ nubusProvisioning:
|
|||||||
serviceAccount:
|
serviceAccount:
|
||||||
create: true
|
create: true
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusProvisioning.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-provisioning-nats"
|
||||||
|
{{- with .Values.annotations.nubusProvisioning.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
prefill:
|
prefill:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-provisioning-prefill"
|
|
||||||
{{- with .Values.annotations.nubusProvisioning.prefillAdditional }}
|
{{- with .Values.annotations.nubusProvisioning.prefillAdditional }}
|
||||||
{{ . | toYaml | nindent 6 }}
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -1075,12 +1059,14 @@ nubusProvisioning:
|
|||||||
auth:
|
auth:
|
||||||
password: {{ .Values.secrets.nubus.provisioning.prefillNatsPassword | quote}}
|
password: {{ .Values.secrets.nubus.provisioning.prefillNatsPassword | quote}}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusProvisioning.prefillPod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "ums-provisioning-prefill"
|
||||||
|
{{- with .Values.annotations.nubusProvisioning.prefillPod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsProvisioningPrefill | toYaml | nindent 6 }}
|
{{ .Values.resources.umsProvisioningPrefill | toYaml | nindent 6 }}
|
||||||
udmTransformer:
|
udmTransformer:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-provisioning-udm-transformer"
|
|
||||||
{{- with .Values.annotations.nubusProvisioning.udmTransformerAdditional }}
|
{{- with .Values.annotations.nubusProvisioning.udmTransformerAdditional }}
|
||||||
{{ . | toYaml | nindent 6 }}
|
{{ . | toYaml | nindent 6 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -1092,7 +1078,10 @@ nubusProvisioning:
|
|||||||
auth:
|
auth:
|
||||||
password: {{ .Values.secrets.nubus.provisioning.udmTransformerNatsPassword | quote}}
|
password: {{ .Values.secrets.nubus.provisioning.udmTransformerNatsPassword | quote}}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusProvisioning.udmTransformerPod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "ums-provisioning-udm-transformer"
|
||||||
|
{{- with .Values.annotations.nubusProvisioning.udmTransformerPod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsProvisioningUdmTransformer | toYaml | nindent 6 }}
|
{{ .Values.resources.umsProvisioningUdmTransformer | toYaml | nindent 6 }}
|
||||||
replicaCount:
|
replicaCount:
|
||||||
@@ -1163,7 +1152,10 @@ nubusUdmListener:
|
|||||||
size: {{ .Values.persistence.storages.nubusUdmListener.size | quote }}
|
size: {{ .Values.persistence.storages.nubusUdmListener.size | quote }}
|
||||||
# storageClass: -- coalesce .Values.persistence.storages.nubusUdmListener.storageClassName .Values.persistence.storageClassNames.RWO | quote --
|
# storageClass: -- coalesce .Values.persistence.storages.nubusUdmListener.storageClassName .Values.persistence.storageClassNames.RWO | quote --
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusUdmListener.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-provisioning-udm-listener"
|
||||||
|
{{- with .Values.annotations.nubusUdmListener.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
replicaCount: {{ .Values.replicas.umsUdmListener }}
|
replicaCount: {{ .Values.replicas.umsUdmListener }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsUdmListener | toYaml | nindent 4 }}
|
{{ .Values.resources.umsUdmListener | toYaml | nindent 4 }}
|
||||||
@@ -1194,6 +1186,8 @@ nubusSelfServiceConsumer:
|
|||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusSelfServiceConsumer.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusSelfServiceConsumer.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusSelfServiceConsumer.repository }}
|
repository: {{ .Values.images.nubusSelfServiceConsumer.repository }}
|
||||||
tag: {{ .Values.images.nubusSelfServiceConsumer.tag }}
|
tag: {{ .Values.images.nubusSelfServiceConsumer.tag }}
|
||||||
|
initResources:
|
||||||
|
{{ .Values.resources.umsSelfserviceConsumer | toYaml | nindent 4 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
intents.otterize.com/service-name: "ums-selfservice-listener"
|
intents.otterize.com/service-name: "ums-selfservice-listener"
|
||||||
{{- with .Values.annotations.nubusSelfserviceConsumer.pod }}
|
{{- with .Values.annotations.nubusSelfserviceConsumer.pod }}
|
||||||
@@ -1204,8 +1198,6 @@ nubusSelfServiceConsumer:
|
|||||||
password: {{ .Values.secrets.nubus.selfserviceConsumer.provisioningApiPassword | quote}}
|
password: {{ .Values.secrets.nubus.selfserviceConsumer.provisioningApiPassword | quote}}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsSelfserviceConsumer | toYaml | nindent 4 }}
|
{{ .Values.resources.umsSelfserviceConsumer | toYaml | nindent 4 }}
|
||||||
resourcesWaitForDependency:
|
|
||||||
{{ .Values.resources.umsSelfserviceConsumer | toYaml | nindent 4 }}
|
|
||||||
replicaCount: {{ .Values.replicas.umsSelfserviceConsumer }}
|
replicaCount: {{ .Values.replicas.umsSelfserviceConsumer }}
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
annotations:
|
annotations:
|
||||||
@@ -1219,9 +1211,9 @@ nubusSelfServiceConsumer:
|
|||||||
# Nubus services
|
# Nubus services
|
||||||
nubusStackDataUms:
|
nubusStackDataUms:
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
|
intents.otterize.com/service-name: "ums-stack-data-ums"
|
||||||
argocd.argoproj.io/hook: "Sync"
|
argocd.argoproj.io/hook: "Sync"
|
||||||
argocd.argoproj.io/hook-delete-policy: "BeforeHookCreation"
|
argocd.argoproj.io/hook-delete-policy: "BeforeHookCreation"
|
||||||
intents.otterize.com/service-name: "ums-stack-data-ums"
|
|
||||||
{{- with .Values.annotations.nubusStackDataUms.additional }}
|
{{- with .Values.annotations.nubusStackDataUms.additional }}
|
||||||
{{ . | toYaml | nindent 4 }}
|
{{ . | toYaml | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
@@ -1266,11 +1258,15 @@ nubusStackDataUms:
|
|||||||
host: {{ .Values.cache.umsSelfservice.host | quote }}
|
host: {{ .Values.cache.umsSelfservice.host | quote }}
|
||||||
postgresql:
|
postgresql:
|
||||||
auth:
|
auth:
|
||||||
|
database: {{ .Values.databases.umsSelfservice.name | quote }}
|
||||||
username: {{ .Values.databases.umsSelfservice.username | quote }}
|
username: {{ .Values.databases.umsSelfservice.username | quote }}
|
||||||
connection:
|
connection:
|
||||||
host: {{ .Values.databases.umsSelfservice.host | quote }}
|
host: {{ .Values.databases.umsSelfservice.host | quote }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusStackDataUms.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-stack-data-ums"
|
||||||
|
{{- with .Values.annotations.nubusStackDataUms.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.umsStackDataUms | toYaml | nindent 4 }}
|
{{ .Values.resources.umsStackDataUms | toYaml | nindent 4 }}
|
||||||
stackDataContext:
|
stackDataContext:
|
||||||
@@ -1457,9 +1453,14 @@ nubusUmcServer:
|
|||||||
bundled: false
|
bundled: false
|
||||||
server: {{ .Values.cache.umsSelfservice.host | quote }}
|
server: {{ .Values.cache.umsSelfservice.host | quote }}
|
||||||
auth:
|
auth:
|
||||||
password: ""
|
# The memcached connection is not authenticated in openDesk but the umc-server pod needs a secret it can mount.
|
||||||
|
password: "stub-value"
|
||||||
|
existingSecret: null
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusUmcServer.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-umc-server"
|
||||||
|
{{- with .Values.annotations.nubusUmcServer.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
# Ref.: https://docs.software-univention.de/nubus-kubernetes-operation/1.x/en/reference.html#envvar-nubusUmcServer.podManagementPolicy
|
# Ref.: https://docs.software-univention.de/nubus-kubernetes-operation/1.x/en/reference.html#envvar-nubusUmcServer.podManagementPolicy
|
||||||
podManagementPolicy: "{{ if gt .Values.replicas.umsUmcServer 4 }}Parallel{{ else }}OrderedReady{{ end }}"
|
podManagementPolicy: "{{ if gt .Values.replicas.umsUmcServer 4 }}Parallel{{ else }}OrderedReady{{ end }}"
|
||||||
postgresql:
|
postgresql:
|
||||||
@@ -1555,7 +1556,10 @@ nubusUmcGateway:
|
|||||||
initResources:
|
initResources:
|
||||||
{{ .Values.resources.umsUmcGateway | toYaml | nindent 4 }}
|
{{ .Values.resources.umsUmcGateway | toYaml | nindent 4 }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusUmcGateway.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "ums-umc-gateway"
|
||||||
|
{{- with .Values.annotations.nubusUmcGateway.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
replicaCount: {{ .Values.replicas.umsUmcGateway }}
|
replicaCount: {{ .Values.replicas.umsUmcGateway }}
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
annotations:
|
annotations:
|
||||||
@@ -1597,15 +1601,9 @@ nubusKeycloakBootstrap:
|
|||||||
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloakBootstrap.registry | quote }}
|
registry: {{ coalesce .Values.repositories.image.registryOpencodeDe .Values.global.imageRegistry .Values.images.nubusKeycloakBootstrap.registry | quote }}
|
||||||
repository: {{ .Values.images.nubusKeycloakBootstrap.repository }}
|
repository: {{ .Values.images.nubusKeycloakBootstrap.repository }}
|
||||||
tag: {{ .Values.images.nubusKeycloakBootstrap.tag }}
|
tag: {{ .Values.images.nubusKeycloakBootstrap.tag }}
|
||||||
# NOTE: The subchart does not yet fully support
|
|
||||||
# "global.imagePullPolicy". This can be removed once the subchart has
|
|
||||||
# been adjusted.
|
|
||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
|
||||||
keycloak:
|
keycloak:
|
||||||
auth:
|
auth:
|
||||||
username: "kcadmin"
|
username: "kcadmin"
|
||||||
existingSecret:
|
|
||||||
name: "ums-opendesk-keycloak-credentials"
|
|
||||||
ldap:
|
ldap:
|
||||||
auth:
|
auth:
|
||||||
bindDn: {{ printf "uid=ldapsearch_keycloak,cn=users,%s" .Values.ldap.baseDn }}
|
bindDn: {{ printf "uid=ldapsearch_keycloak,cn=users,%s" .Values.ldap.baseDn }}
|
||||||
@@ -1640,9 +1638,6 @@ extraSecrets:
|
|||||||
- name: "ums-opendesk-guardian-client-secret"
|
- name: "ums-opendesk-guardian-client-secret"
|
||||||
stringData:
|
stringData:
|
||||||
managementApiClientSecret: {{ .Values.secrets.keycloak.clientSecret.guardian | quote }}
|
managementApiClientSecret: {{ .Values.secrets.keycloak.clientSecret.guardian | quote }}
|
||||||
- name: "ums-opendesk-keycloak-credentials"
|
|
||||||
stringData:
|
|
||||||
admin_password: {{ .Values.secrets.keycloak.adminPassword | quote }}
|
|
||||||
- name: "ums-keycloak-postgresql-opendesk-credentials"
|
- name: "ums-keycloak-postgresql-opendesk-credentials"
|
||||||
stringData:
|
stringData:
|
||||||
keycloakDatabasePassword: {{ .Values.databases.keycloak.password | default .Values.secrets.postgresql.keycloakUser | quote }}
|
keycloakDatabasePassword: {{ .Values.databases.keycloak.password | default .Values.secrets.postgresql.keycloakUser | quote }}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ config:
|
|||||||
managed:
|
managed:
|
||||||
clientScopes: [ 'acr', 'web-origins', 'email', 'profile', 'microprofile-jwt', 'role_list',
|
clientScopes: [ 'acr', 'web-origins', 'email', 'profile', 'microprofile-jwt', 'role_list',
|
||||||
'offline_access', 'roles', 'address', 'phone' ]
|
'offline_access', 'roles', 'address', 'phone' ]
|
||||||
clients: [ 'guardian-management-api', 'guardian-scripts', 'guardian-ui', 'UMC', 'UMC OIDC', '${client_account}',
|
clients: [ 'guardian-management-api', 'guardian-scripts', 'guardian-ui', 'UMC OIDC', '${client_account}',
|
||||||
'${client_account-console}', '${client_admin-cli}', '${client_broker}', '${client_realm-management}',
|
'${client_account-console}', '${client_admin-cli}', '${client_broker}', '${client_realm-management}',
|
||||||
'${client_security-admin-console}' ]
|
'${client_security-admin-console}' ]
|
||||||
keycloak:
|
keycloak:
|
||||||
|
|||||||
@@ -33,13 +33,18 @@ dovecot:
|
|||||||
password:
|
password:
|
||||||
value: {{ .Values.databases.dovecotACL.password | default .Values.secrets.cassandra.dovecotACLUser | quote }}
|
value: {{ .Values.databases.dovecotACL.password | default .Values.secrets.cassandra.dovecotACLUser | quote }}
|
||||||
keyspace: {{ .Values.databases.dovecotACL.name | quote }}
|
keyspace: {{ .Values.databases.dovecotACL.name | quote }}
|
||||||
|
masterPassword:
|
||||||
|
value: {{ .Values.secrets.dovecot.sharedMailboxesMasterPassword | quote }}
|
||||||
objectStorage:
|
objectStorage:
|
||||||
bucket: {{ .Values.objectstores.dovecot.bucket | quote }}
|
bucket: {{ .Values.objectstores.dovecot.bucket | quote }}
|
||||||
|
cacheTmpfs: {{ if .Values.technical.dovecot.objectStorage.cacheTmpfs }}true{{ else }}false{{ end }}
|
||||||
encryption:
|
encryption:
|
||||||
privateKey:
|
privateKey:
|
||||||
value: {{ requiredEnv "DOVECOT_CRYPT_PRIVATE_KEY" | quote }}
|
value: {{ requiredEnv "DOVECOT_CRYPT_PRIVATE_KEY" | quote }}
|
||||||
publicKey:
|
publicKey:
|
||||||
value: {{ requiredEnv "DOVECOT_CRYPT_PUBLIC_KEY" | quote }}
|
value: {{ requiredEnv "DOVECOT_CRYPT_PUBLIC_KEY" | quote }}
|
||||||
|
fsCacheSize: {{ .Values.technical.dovecot.objectStorage.fsCacheSize | quote }}
|
||||||
|
ftsCacheSize: {{ .Values.technical.dovecot.objectStorage.ftsCacheSize | quote }}
|
||||||
fqdn: {{ .Values.objectstores.dovecot.endpoint | default (printf "%s.%s" .Values.global.hosts.minioApi .Values.global.domain) | quote }}
|
fqdn: {{ .Values.objectstores.dovecot.endpoint | default (printf "%s.%s" .Values.global.hosts.minioApi .Values.global.domain) | quote }}
|
||||||
username: {{ .Values.objectstores.dovecot.username | quote }}
|
username: {{ .Values.objectstores.dovecot.username | quote }}
|
||||||
password:
|
password:
|
||||||
|
|||||||
@@ -126,7 +126,10 @@ persistence:
|
|||||||
{{ .Values.annotations.openxchangeDovecot.persistence | toYaml | nindent 4 }}
|
{{ .Values.annotations.openxchangeDovecot.persistence | toYaml | nindent 4 }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeDovecot.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "open-xchange-dovecot"
|
||||||
|
{{- with .Values.annotations.openxchangeDovecot.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.dovecot | toYaml | nindent 2 }}
|
{{ .Values.resources.dovecot | toYaml | nindent 2 }}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
---
|
---
|
||||||
additionalAnnotations:
|
additionalAnnotations:
|
||||||
|
intents.otterize.com/service-name: "open-xchange-bootstrap"
|
||||||
argocd.argoproj.io/hook: "Sync"
|
argocd.argoproj.io/hook: "Sync"
|
||||||
argocd.argoproj.io/hook-delete-policy: "HookSucceeded"
|
argocd.argoproj.io/hook-delete-policy: "HookSucceeded"
|
||||||
{{- with .Values.annotations.openxchangeBootstrap.additional }}
|
{{- with .Values.annotations.openxchangeBootstrap.additional }}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
appsuite:
|
appsuite:
|
||||||
core-mw:
|
core-mw:
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "open-xchange-core-mw"
|
||||||
logging.open-xchange.com/format: "appsuite-json"
|
logging.open-xchange.com/format: "appsuite-json"
|
||||||
{{- with .Values.annotations.openxchangeEnterpriseContactPicker.appsuiteCoreMwPod }}
|
{{- with .Values.annotations.openxchangeEnterpriseContactPicker.appsuiteCoreMwPod }}
|
||||||
{{ . | toYaml | nindent 6 }}
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
|||||||
@@ -31,7 +31,10 @@ nextcloud-integration-ui:
|
|||||||
- name: {{ . | quote }}
|
- name: {{ . | quote }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeNextcloudIntegrationUi.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "open-xchange-nextcloud-integration-ui"
|
||||||
|
{{- with .Values.annotations.openxchangeNextcloudIntegrationUi.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
replicaCount: {{ .Values.replicas.openxchangeNextcloudIntegrationUI }}
|
replicaCount: {{ .Values.replicas.openxchangeNextcloudIntegrationUI }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.openxchangeNextcloudIntegrationUI | toYaml | nindent 4 }}
|
{{ .Values.resources.openxchangeNextcloudIntegrationUI | toYaml | nindent 4 }}
|
||||||
@@ -66,7 +69,10 @@ public-sector-ui:
|
|||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
replicaCount: {{ .Values.replicas.openxchangePublicSectorUI }}
|
replicaCount: {{ .Values.replicas.openxchangePublicSectorUI }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangePublicSectorUi.pod | toYaml | nindent 4 }}
|
intents.otterize.com/service-name: "open-xchange-public-sector-ui"
|
||||||
|
{{- with .Values.annotations.openxchangePublicSectorUi.pod }}
|
||||||
|
{{ . | toYaml | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.openxchangePublicSectorUI | toYaml | nindent 4 }}
|
{{ .Values.resources.openxchangePublicSectorUI | toYaml | nindent 4 }}
|
||||||
securityContext:
|
securityContext:
|
||||||
@@ -311,7 +317,10 @@ appsuite:
|
|||||||
jolokiaPassword: {{ .Values.secrets.oxAppSuite.jolokiaPassword | quote }}
|
jolokiaPassword: {{ .Values.secrets.oxAppSuite.jolokiaPassword | quote }}
|
||||||
hostname: "{{ .Values.global.hosts.openxchange }}.{{ .Values.global.domain }}"
|
hostname: "{{ .Values.global.hosts.openxchange }}.{{ .Values.global.domain }}"
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreMw.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-core-mw"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreMw.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
annotations:
|
annotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreMw.serviceAccount | toYaml | nindent 8 }}
|
{{ .Values.annotations.openxchangeAppsuiteCoreMw.serviceAccount | toYaml | nindent 8 }}
|
||||||
@@ -338,7 +347,10 @@ appsuite:
|
|||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
replicaCount: {{ .Values.replicas.openxchangeGotenberg }}
|
replicaCount: {{ .Values.replicas.openxchangeGotenberg }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreMw.gotenbergPod | toYaml | nindent 8 }}
|
intents.otterize.com/service-name: "open-xchange-gotenberg"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreMw.gotenbergPod }}
|
||||||
|
{{ . | toYaml | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.openxchangeGotenberg | toYaml | nindent 8 }}
|
{{ .Values.resources.openxchangeGotenberg | toYaml | nindent 8 }}
|
||||||
securityContext:
|
securityContext:
|
||||||
@@ -351,7 +363,6 @@ appsuite:
|
|||||||
runAsNonRoot: true
|
runAsNonRoot: true
|
||||||
runAsUser: 1001
|
runAsUser: 1001
|
||||||
runAsGroup: 1001
|
runAsGroup: 1001
|
||||||
privileged: false
|
|
||||||
seccompProfile:
|
seccompProfile:
|
||||||
type: "RuntimeDefault"
|
type: "RuntimeDefault"
|
||||||
seLinuxOptions:
|
seLinuxOptions:
|
||||||
@@ -769,7 +780,10 @@ appsuite:
|
|||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
replicaCount: {{ .Values.replicas.openxchangeCoreUI }}
|
replicaCount: {{ .Values.replicas.openxchangeCoreUI }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreUi.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-core-ui"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreUi.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
resources:
|
resources:
|
||||||
{{ .Values.resources.openxchangeCoreUI | toYaml | nindent 6 }}
|
{{ .Values.resources.openxchangeCoreUI | toYaml | nindent 6 }}
|
||||||
securityContext:
|
securityContext:
|
||||||
@@ -806,7 +820,10 @@ appsuite:
|
|||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
overrides: {}
|
overrides: {}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreUiMiddleware.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-core-ui-middleware"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreUiMiddleware.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
redis: *redisConfiguration
|
redis: *redisConfiguration
|
||||||
replicaCount: {{ .Values.replicas.openxchangeCoreUIMiddleware }}
|
replicaCount: {{ .Values.replicas.openxchangeCoreUIMiddleware }}
|
||||||
resources:
|
resources:
|
||||||
@@ -855,7 +872,10 @@ appsuite:
|
|||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
{{- if .Values.annotations.openxchangeAppsuiteCoreDocumentconverter.pod }}
|
{{- if .Values.annotations.openxchangeAppsuiteCoreDocumentconverter.pod }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreDocumentconverter.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-core-documentconverter"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreDocumentconverter.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
redis: *redisConfiguration
|
redis: *redisConfiguration
|
||||||
replicaCount: {{ .Values.replicas.openxchangeCoreDocumentConverter }}
|
replicaCount: {{ .Values.replicas.openxchangeCoreDocumentConverter }}
|
||||||
@@ -907,7 +927,10 @@ appsuite:
|
|||||||
tag: {{ .Values.images.openxchangeCoreGuidedtours.tag | quote }}
|
tag: {{ .Values.images.openxchangeCoreGuidedtours.tag | quote }}
|
||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreGuidedtours.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-guidedtours"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreGuidedtours.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
replicaCount: {{ .Values.replicas.openxchangeCoreGuidedtours }}
|
replicaCount: {{ .Values.replicas.openxchangeCoreGuidedtours }}
|
||||||
resources:
|
resources:
|
||||||
{{- .Values.resources.openxchangeCoreGuidedtours | toYaml | nindent 6 }}
|
{{- .Values.resources.openxchangeCoreGuidedtours | toYaml | nindent 6 }}
|
||||||
@@ -951,7 +974,10 @@ appsuite:
|
|||||||
secretKey: "."
|
secretKey: "."
|
||||||
{{- if .Values.annotations.openxchangeAppsuiteCoreImageconverter.pod }}
|
{{- if .Values.annotations.openxchangeAppsuiteCoreImageconverter.pod }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreImageconverter.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-core-imageconverter"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreImageconverter.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
redis: *redisConfiguration
|
redis: *redisConfiguration
|
||||||
replicaCount: {{ .Values.replicas.openxchangeCoreImageConverter }}
|
replicaCount: {{ .Values.replicas.openxchangeCoreImageConverter }}
|
||||||
@@ -987,7 +1013,8 @@ appsuite:
|
|||||||
repository: {{ .Values.images.openxchangeGuardUI.repository | quote }}
|
repository: {{ .Values.images.openxchangeGuardUI.repository | quote }}
|
||||||
tag: {{ .Values.images.openxchangeGuardUI.tag | quote }}
|
tag: {{ .Values.images.openxchangeGuardUI.tag | quote }}
|
||||||
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
pullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
podAnnotations: {}
|
podAnnotations:
|
||||||
|
intents.otterize.com/service-name: "open-xchange-guard-ui"
|
||||||
replicaCount: {{ .Values.replicas.openxchangeGuardUI }}
|
replicaCount: {{ .Values.replicas.openxchangeGuardUI }}
|
||||||
resources:
|
resources:
|
||||||
{{- .Values.resources.openxchangeGuardUI | toYaml | nindent 6 }}
|
{{- .Values.resources.openxchangeGuardUI | toYaml | nindent 6 }}
|
||||||
@@ -1023,7 +1050,10 @@ appsuite:
|
|||||||
- name: {{ . | quote }}
|
- name: {{ . | quote }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangeAppsuiteCoreUserGuide.pod | toYaml | nindent 6 }}
|
intents.otterize.com/service-name: "open-xchange-core-user-guide"
|
||||||
|
{{- with .Values.annotations.openxchangeAppsuiteCoreUserGuide.pod }}
|
||||||
|
{{ . | toYaml | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
replicaCount: {{ .Values.replicas.openxchangeCoreUserGuide }}
|
replicaCount: {{ .Values.replicas.openxchangeCoreUserGuide }}
|
||||||
resources:
|
resources:
|
||||||
{{- .Values.resources.openxchangeCoreUserGuide | toYaml | nindent 6 }}
|
{{- .Values.resources.openxchangeCoreUserGuide | toYaml | nindent 6 }}
|
||||||
|
|||||||
@@ -68,7 +68,10 @@ persistence:
|
|||||||
#storageClass: {{ coalesce .Values.persistence.storages.oxConnector.storageClassName .Values.persistence.storageClassNames.RWO | quote }}
|
#storageClass: {{ coalesce .Values.persistence.storages.oxConnector.storageClassName .Values.persistence.storageClassNames.RWO | quote }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.nubusOxConnector.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "open-xchange-connector"
|
||||||
|
{{- with .Values.annotations.nubusOxConnector.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
replicaCount: {{ .Values.replicas.oxConnector }}
|
replicaCount: {{ .Values.replicas.oxConnector }}
|
||||||
|
|
||||||
|
|||||||
@@ -91,7 +91,10 @@ postfix:
|
|||||||
virtualTransport: "lmtps:dovecot:24"
|
virtualTransport: "lmtps:dovecot:24"
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openxchangePostfix.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "open-xchange-postfix"
|
||||||
|
{{- with .Values.annotations.openxchangePostfix.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
replicaCount: {{ .Values.replicas.postfix }}
|
replicaCount: {{ .Values.replicas.postfix }}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,10 @@ additionalAnnotations:
|
|||||||
{{ .Values.annotations.opendeskMigrationsPost.additional | toYaml | nindent 2 }}
|
{{ .Values.annotations.opendeskMigrationsPost.additional | toYaml | nindent 2 }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.opendeskMigrationsPost.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "opendesk-migrations-post"
|
||||||
|
{{- with .Values.annotations.opendeskMigrationsPost.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
serviceAccount:
|
serviceAccount:
|
||||||
annotations:
|
annotations:
|
||||||
|
|||||||
@@ -74,7 +74,10 @@ job:
|
|||||||
enabled: true
|
enabled: true
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openprojectBootstrap.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "opendesk-openproject-bootstrap"
|
||||||
|
{{- with .Values.annotations.openprojectBootstrap.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -116,7 +116,10 @@ image:
|
|||||||
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
imagePullPolicy: {{ .Values.global.imagePullPolicy | quote }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.opendeskServicesStaticFiles.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "opendesk-static-files"
|
||||||
|
{{- with .Values.annotations.opendeskServicesStaticFiles.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
|
|||||||
@@ -10,12 +10,18 @@ additionalAnnotations:
|
|||||||
{{ .Values.annotations.opendeskServicesOtterize.additional | toYaml | nindent 2 }}
|
{{ .Values.annotations.opendeskServicesOtterize.additional | toYaml | nindent 2 }}
|
||||||
|
|
||||||
apps:
|
apps:
|
||||||
|
cassandra:
|
||||||
|
enabled: {{ .Values.apps.cassandra.enabled }}
|
||||||
|
certificates:
|
||||||
|
enabled: {{ .Values.apps.certificates.enabled }}
|
||||||
clamavDistributed:
|
clamavDistributed:
|
||||||
enabled: {{ .Values.apps.clamavDistributed.enabled }}
|
enabled: {{ .Values.apps.clamavDistributed.enabled }}
|
||||||
clamavSimple:
|
clamavSimple:
|
||||||
enabled: {{ .Values.apps.clamavSimple.enabled }}
|
enabled: {{ .Values.apps.clamavSimple.enabled }}
|
||||||
collabora:
|
collabora:
|
||||||
enabled: {{ .Values.apps.collabora.enabled }}
|
enabled: {{ .Values.apps.collabora.enabled }}
|
||||||
|
collaboraController:
|
||||||
|
enabled: {{ .Values.apps.collaboraController.enabled }}
|
||||||
cryptpad:
|
cryptpad:
|
||||||
enabled: {{ .Values.apps.cryptpad.enabled }}
|
enabled: {{ .Values.apps.cryptpad.enabled }}
|
||||||
dkimpy:
|
dkimpy:
|
||||||
@@ -24,6 +30,12 @@ apps:
|
|||||||
enabled: {{ .Values.apps.dovecot.enabled }}
|
enabled: {{ .Values.apps.dovecot.enabled }}
|
||||||
element:
|
element:
|
||||||
enabled: {{ .Values.apps.element.enabled }}
|
enabled: {{ .Values.apps.element.enabled }}
|
||||||
|
elementAdmin:
|
||||||
|
enabled: {{ .Values.apps.elementAdmin.enabled }}
|
||||||
|
elementGroupsync:
|
||||||
|
enabled: {{ .Values.apps.elementGroupsync.enabled }}
|
||||||
|
home:
|
||||||
|
enabled: {{ .Values.apps.home.enabled }}
|
||||||
jitsi:
|
jitsi:
|
||||||
enabled: {{ .Values.apps.jitsi.enabled }}
|
enabled: {{ .Values.apps.jitsi.enabled }}
|
||||||
mariadb:
|
mariadb:
|
||||||
@@ -42,7 +54,7 @@ apps:
|
|||||||
enabled: {{ .Values.apps.nubus.enabled }}
|
enabled: {{ .Values.apps.nubus.enabled }}
|
||||||
openproject:
|
openproject:
|
||||||
enabled: {{ .Values.apps.openproject.enabled }}
|
enabled: {{ .Values.apps.openproject.enabled }}
|
||||||
oxAppsuite:
|
oxAppSuite:
|
||||||
enabled: {{ .Values.apps.oxAppSuite.enabled }}
|
enabled: {{ .Values.apps.oxAppSuite.enabled }}
|
||||||
postfix:
|
postfix:
|
||||||
enabled: {{ .Values.apps.postfix.enabled }}
|
enabled: {{ .Values.apps.postfix.enabled }}
|
||||||
@@ -50,6 +62,8 @@ apps:
|
|||||||
enabled: {{ .Values.apps.postgresql.enabled }}
|
enabled: {{ .Values.apps.postgresql.enabled }}
|
||||||
redis:
|
redis:
|
||||||
enabled: {{ .Values.apps.redis.enabled }}
|
enabled: {{ .Values.apps.redis.enabled }}
|
||||||
|
staticFiles:
|
||||||
|
enabled: {{ .Values.apps.staticFiles.enabled }}
|
||||||
xwiki:
|
xwiki:
|
||||||
enabled: {{ .Values.apps.xwiki.enabled }}
|
enabled: {{ .Values.apps.xwiki.enabled }}
|
||||||
|
|
||||||
|
|||||||
@@ -131,7 +131,10 @@ persistence:
|
|||||||
enabled: false
|
enabled: false
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.openproject.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "openproject"
|
||||||
|
{{- with .Values.annotations.openproject.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
postgresql:
|
postgresql:
|
||||||
bundled: false
|
bundled: false
|
||||||
|
|||||||
@@ -73,8 +73,10 @@ persistence:
|
|||||||
storageClass: {{ coalesce .Values.persistence.storages.cassandra.storageClassName .Values.persistence.storageClassNames.RWO | quote }}
|
storageClass: {{ coalesce .Values.persistence.storages.cassandra.storageClassName .Values.persistence.storageClassNames.RWO | quote }}
|
||||||
|
|
||||||
podAnnotations:
|
podAnnotations:
|
||||||
{{ .Values.annotations.cassandra.pod | toYaml | nindent 2 }}
|
intents.otterize.com/service-name: "cassandra"
|
||||||
|
{{- with .Values.annotations.cassandra.pod }}
|
||||||
|
{{ . | toYaml | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
podSecurityContext:
|
podSecurityContext:
|
||||||
enabled: true
|
enabled: true
|
||||||
fsGroup: 1001
|
fsGroup: 1001
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user