Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial draft of identity docs #5133

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 22 additions & 22 deletions docs/self-managed/identity/orchestration-identity/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,32 +18,32 @@ The following variables apply globally to all components within the Camunda Orch
<Tabs>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❓ what is the default config we want to refer to here? Because this differs by distribution, whether it's c8run or helm, based on the second tab it seems helm? I can then provide the actual defaults next. Some like SPRING_PROFILES_ACTIVE are also not relevant then as the user can't control them.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see in installation we refer to this as reference from a c8run perspective, I woudl thus suggest to have tabs by distribution c8run and helm. I would omit the ENV variable tab and instead extend the spring boot note by the fact that all properties can be provided as environment variables too, like we do in other places of the docs like here https://docs.camunda.io/docs/next/self-managed/zeebe-deployment/configuration/environment-variables/#environment-variables-for-configuration

Copy link
Contributor Author

@conceptualshark conceptualshark Mar 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ideally I think this guide should reflect Helm (and other production-ready distributions when ready) and not C8Run at all, as C8Run is unique, not for production, and its configuration requirements are largely handled on its own page. I assume that other production-ready distributions, when available, would reflect the same defaults as Helm?

We've historically had difficulty with users converting from Helm config to environment variables, and the docs team has discussed listing them out separately as we can - @akeller do you have any input here? My thinking was to start having this available for Docker and other distributions down the line, to prevent our docs from being as Helm-biased a they are now.

(Edit: Recognizing that Helm isn't ready for prod, either - but it will be!)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My current understanding is C8Run is for onboarding and non-production use cases to get up and running as quickly as possible (and maybe even, ideally, with no configuration?). Since we prioritize the Java Spring dev during onboarding, leading with the Spring configuration makes sense.

Once we start talking about production distributions, things are a bit unclear to me - what's our happy path or recommendation when it comes to config? Default config feels like a PM decision and I would defer to @FarkasRabai and/or @theburi.

I do think we need to be super explicit about Helm config vs. environment variables vs. properties and not expect our users to do the mapping themselves and add _ or . appropriately. We can't just say "follow this pattern" and document the configuration fully in only one way.

🤞 hope this helps. LMK if there if anything else I can clarify.

<TabItem value="env" label="Environment variables" default>

| Environment variable | Description | Default value |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------- |
| `SPRING_PROFILES_ACTIVE` | **Note:** This property will be deprecated as additional authentication methods become available. | `consolidated-auth` |
| `CAMUNDA_SECURITY_AUTHENTICATION_METHOD` | The authentication method to use. | `basic` |
| `CAMUNDA_SECURITY_AUTHENTICATION_UNAUTHENTICATED-API` | If the API is enabled without authentication. | `true` |
| `CAMUNDA_PERSISTENT_SESSIONS_ENABLED` | Enables shared authentication between the Orchestration web applications (Operate and Tasklist). | `true` |
| `CAMUNDA_SECURITY_AUTHORIZATIONS_ENABLED` | If authorizations are enabled. | `true` |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_USERNAME` | The username of the first user. | `demo` |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_PASSWORD` | The password of the first user. | `demo` |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_NAME` | The name of the first user. | Demo |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_EMAIL` | The email address of the first user. | `demo@demo.com` |
| Environment variable | Description | Default value |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------- |
| `SPRING_PROFILES_ACTIVE` | **Note:** This property will be deprecated as additional authentication methods become available. | `consolidated-auth` |
| `CAMUNDA_SECURITY_AUTHENTICATION_METHOD` | The authentication method to use. | `basic` |
| `CAMUNDA_SECURITY_AUTHENTICATION_UNPROTECTED-API` | If the API is enabled without authentication. | `true` |
| `CAMUNDA_PERSISTENT_SESSIONS_ENABLED` | Enables shared authentication between the Orchestration web applications (Operate and Tasklist). | `true` |
| `CAMUNDA_SECURITY_AUTHORIZATIONS_ENABLED` | If authorizations are enabled. | `true` |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_USERNAME` | The username of the first user. | `demo` |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_PASSWORD` | The password of the first user. | `demo` |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_NAME` | The name of the first user. | Demo |
| `CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_EMAIL` | The email address of the first user. | `demo@demo.com` |

</TabItem>
<TabItem value="helm" label="Helm properties" default>

| Helm property | Description | Default value |
| ----------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------- |
| `spring.profiles.active` | **Note:** This property will be deprecated as additional authentication methods become available. | `consolidated-auth` |
| `camunda.security.authentication.method` | The authentication method to use. | `basic` |
| `camunda.security.authentication.unauthenticated-api` | If the API is enabled without authentication. | `true` |
| `camunda.persistent.sessions.enabled` | Enables shared authentication between the Orchestration web applications (Operate and Tasklist). | `true` |
| `camunda.security.authorizations.enabled` | If authorizations are enabled. | `true` |
| `camunda.security.initialization.users[0].username` | The username of the first user. | `demo` |
| `camunda.security.initialization.users[0].password` | The password of the first user. | `demo` |
| `camunda.security.initialization.users[0].name` | The name of the first user. | `Demo` |
| `camunda.security.initialization.users[0].email` | The email address of the first user. | `demo@demo.com` |
| Helm property | Description | Default value |
| --------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------- |
| `spring.profiles.active` | **Note:** This property will be deprecated as additional authentication methods become available. | `consolidated-auth` |
| `camunda.security.authentication.method` | The authentication method to use. | `basic` |
| `camunda.security.authentication.unprotected-api` | If the API is enabled without authentication. | `true` |
| `camunda.persistent.sessions.enabled` | Enables shared authentication between the Orchestration web applications (Operate and Tasklist). | `true` |
| `camunda.security.authorizations.enabled` | If authorizations are enabled. | `true` |
| `camunda.security.initialization.users[0].username` | The username of the first user. | `demo` |
| `camunda.security.initialization.users[0].password` | The password of the first user. | `demo` |
| `camunda.security.initialization.users[0].name` | The name of the first user. | `Demo` |
| `camunda.security.initialization.users[0].email` | The email address of the first user. | `demo@demo.com` |

</TabItem>
</Tabs>
76 changes: 60 additions & 16 deletions docs/self-managed/identity/orchestration-identity/installation.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
---
id: installation
title: Installation
title: Initial setup
description: "Learn how Identity is bundled with your default Orchestration cluster."
---

import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';

Identity is included by default with the deployment of any [Orchestration cluster](/self-managed/reference-architecture/reference-architecture.md#orchestration-cluster). Within an Orchestration cluster, Identity provides unified, cluster-level identity management and authorizations.

Identity for Orchestration clusters is available via [Helm install](/self-managed/setup/install.md), and for local development via [Camunda 8 Run](/self-managed/setup/deploy/local/c8run.md).
Expand All @@ -16,33 +19,74 @@ Following the default installation will result in a cluster with the following:
2. API authentication disabled
3. Authorizations disabled
4. An initial user with the username/password `demo`/`demo`
5. An `admin` role with read, create, update, and delete permissions for other roles

### Configure basic authentication
5. An `admin` role with read, create, update, and delete permissions for other roles, which is applied to the initial `demo` user

To make changes to the initial configuration, add the desired values via your `application.yaml` or environment variables according to the available [configuration properties](./configuration.md).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❌ you would need to use the --config flag of c8run to make use of an own config, see https://github.com/camunda/camunda-docs/pull/5145/files#diff-5f8b726fad04379e6db620802a56d8916fd1fb90956429487f4b16d80b88afcfR133


For example, to enable basic authentication and create an initial user, the following is required:
### Configure an initial user

The initial user created by the application will be assigned the `admin` role, and can be used for authentication to the web applications and additional role management.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 I'm not sure if it should be noted here or not but the admin role is assigned to all users who are set in the camunda.security.initialization.users list, long term we'd want to refine that IMO but for now thats the functionality


To create a unique initial user, the following is required in your `application.yaml` or environment variables:

<Tabs>
<TabItem value="helm" label="Helm properties" default>

```yaml
camunda.security:
authentication.unprotected-api: false
initialization.users[0].username: <Your chosen username>
initialization.users[0].password: <Your chosen password>
initialization.users[0].name: <The name of the first user>
initialization.users[0].email: <The email address of the first user>
camunda:
security:
initialization:
users:
- username: <Your chosen username>
password: <Your chosen password>
name: <The name of the first user>
email: <The email address of the first user>
```

</TabItem>
<TabItem value="env" label="Environment variables" default>

```shell
CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_USERNAME=<Your chosen username>
CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_PASSWORD=<Your chosen password>
CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_NAME=<The name of the first user>
CAMUNDA_SECURITY_INITIALIZATION_USERS[0]_EMAIL=<The email address of the first user>
```

### Enable authorizations
</TabItem>
</Tabs>

To work with authorizations, API authentication and authorization enforcement must be enabled. The following minimal `application.yaml` shows the required configuration for the APIs and authorizations:
### Enable API authentication and authorizations
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 this duplicates pending changes by #5145 shall we link from one to the other instead?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would this differ at all if we look at this guide from a Helm default perspective? Otherwise the C8Run guide can point here, but that can be updated separately.


By default, basic authentication is enabled on the Camunda web applications, but the API is unprotected, and authorizations are disabled. API protection and authorizations can both be enabled by modifying your `application.yaml` or environment variables:

<Tabs>
<TabItem value="helm" label="Helm properties" default>

```yaml
camunda.security:
authentication.unprotected-api: false
authorizations.enabled: true
camunda:
security:
authentication:
unprotected-api: false
authorizations:
enabled: true
```

</TabItem>
<TabItem value="env" label="Environment variables" default>

```shell
CAMUNDA_SECURITY_AUTHENTICATION_UNPROTECTED-API=false
CAMUNDA_SECURITY_AUTHORIZATIONS_ENABLED=true
```

</TabItem>
</Tabs>

:::note
To enable authorizations, API protection must also be enabled.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍🏻 this is a great point to note down, in the future we will look to make the application more defensive during start up but its super important to note this otherwise you can get into a broken state :)

:::

Basic authentication credentials are then required when making API requests, as in the following:

```shell
Expand Down
2 changes: 1 addition & 1 deletion docs/self-managed/identity/what-is-identity.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sidebar_label: "What is Identity?"
description: "Identity is the component within the Camunda 8 stack responsible for authentication and authorization."
---

Identity is the component within the Camunda 8 stack responsible for authentication and authorization. Identity functions differently in Orchestration clusters and in Console and Web Modeler. For more information on these differences, see the Self-Managed [reference architecture](/self-managed/reference-architecture/reference-architecture.md#orchestration-cluster-vs-web-modeler-and-console).
Identity is responsible for authentication and authorization within the Camunda 8 stack. Identity functions differently in Orchestration clusters and in Console and Web Modeler. For more information on these differences, see the Self-Managed [reference architecture](/self-managed/reference-architecture/reference-architecture.md#orchestration-cluster-vs-web-modeler-and-console).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💭 I'm still wondering if this is the right wording but I don't feel strongly enough that we should block the merging. Identity is responsible really for authorization and for managing the assignments to different entities i.e. groups.

The authentication is handled via Spring in the basic setup or via Spring + the provider in cases of OIDC, we do have a new authentication layer/module but its not really exposed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔧 we should indicate these are different identity components indeed

Suggested change
Identity is responsible for authentication and authorization within the Camunda 8 stack. Identity functions differently in Orchestration clusters and in Console and Web Modeler. For more information on these differences, see the Self-Managed [reference architecture](/self-managed/reference-architecture/reference-architecture.md#orchestration-cluster-vs-web-modeler-and-console).
Identity components are responsible for authentication and authorization within the Camunda 8 stack. There are two different identity components in the stack, one as an integral part of the Orchestration cluster and spanning across orchestration clusters used for Console and Web Modeler access management. For more information on these differences, see the Self-Managed [reference architecture](/self-managed/reference-architecture/reference-architecture.md#orchestration-cluster-vs-web-modeler-and-console).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've tried to clarify this further in the latest update! Once there is a place in the docs for Orchestration cluster docs vs Everything else docs, this page will mostly be able to go away, and I hope this distinction will feel much more separate.


## Identity for Orchestration clusters

Expand Down
Loading