mirror of
https://github.com/moghtech/komodo.git
synced 2026-05-03 12:03:21 -05:00
* feat: add maintenance window management to suppress alerts during planned activities (#550) * feat: add scheduled maintenance windows to server configuration - Add maintenance window configuration to server entities - Implement maintenance window UI components with data table layout - Add maintenance tab to server interface - Suppress alerts during maintenance windows * chore: enhance maintenance windows with types and permission improvements - Add chrono dependency to Rust client core for time handling - Add comprehensive TypeScript types for maintenance windows (MaintenanceWindow, MaintenanceScheduleType, MaintenanceTime, DayOfWeek) - Improve maintenance config component to use usePermissions hook for better permission handling - Update package dependencies * feat: restore alert buffer system to prevent noise * fix yarn fe * fix the merge with new alerting changes * move alert buffer handle out of loop * nit * fix server version changes * unneeded buffer clear --------- Co-authored-by: mbecker20 <becker.maxh@gmail.com> * set version 1.18.2 * failed OIDC provider init doesn't cause panic, just error log * OIDC: use userinfo endpoint to get preffered username for user. * add profile to scopes and account for username already taken * search through server docker lists * move maintenance stuff * refactor maintenance schedules to have more toml compatible structure * daily schedule type use struct * add timezone to core info response * frontend can build with new maintenance types * Action monaco expose KomodoClient to init another client * flatten out the nested enum * update maintenance schedule types * dev-3 * implement maintenance windows on alerters * dev-4 * add IanaTimezone enum * typeshare timezone enum * maintenance modes almost done on servers AND alerters * maintenance schedules working * remove mention of migrator * Procedure / Action schedule timezone selector * improve timezone selector to display configure core TZ * dev-5 * refetch core version * add version to server list item info * add periphery version in server table * dev-6 * capitalize Unknown server status in cache * handle unknown version case * set server table sizes * default resource_poll_interval 1-hr * ensure parent folder exists before cloning * document Build Attach permission * git actions return absolute path * stack linked repos * resource toml replace linked_repo id with name * validate incoming linked repo * add linked repo to stack list item info * stack list item info resolved linked repo information * configure linked repo stack * to repo links * dev-7 * sync: replace linked repo with name for execute compare * obscure provider tokens in table view * clean up stack write w/ refactor * Resource Sync / Build start support Repo attach * add stack clone path config * Builds + syncs can link to repos * dev-9 * update ts * fix linked repo not included in resource sync list item info * add linked repo UI for builds / syncs * fix commit linked repo sync * include linked repo syncs * correct Sync / Build config mode * dev-12 fix resource sync inclusion w/ linked_repo * remove unneed sync commit todo!() * fix other config.repo.is_empty issues * replace ids in all to toml exports * Ensure git pull before commit for linear history, add to update logs * fix fe for linked repo cases * consolidate linked repo config component * fix resource sync commit behavior * dev 17 * Build uses Pull or Clone api to setup build source * capitalize Clone Repo stage * mount PullOrCloneRepo * dev-19 * Expand supported container names and also avoid unnecessary name formatting * dev-20 * add periphery /terminal/execute/container api * periphery client execute_container_exec method * implement execute container, deployment, stack exec * gen types * execute container exec method * clean up client / fix fe * enumerate exec ts methods for each resource type * fix and gen ts client * fix FE use connect_exec * add url log when terminal ws fail to connect * ts client server allow terminal.js * FE preload terminal.js / .d.ts * dev-23 fix stack terminal fail to connect when not explicitly setting container name * update docs on attach perms * 1.18.2 --------- Co-authored-by: Samuel Cardoso <R3D2@users.noreply.github.com>
85 lines
5.3 KiB
Markdown
85 lines
5.3 KiB
Markdown
# Permissioning
|
|
|
|
Komodo has a granular, layer-based permissioning system to provide non-admin users access only to intended Resources.
|
|
|
|
## User Groups
|
|
|
|
While Komodo can assign permissions to specific users directly, it is recommended to instead **create User Groups and assign permissions to them**, as if they were a user.
|
|
|
|
Users can then be **added to multiple User Groups** and they **inherit the group's permissions**, similar to linux permissions.
|
|
There is also an `Everyone` mode for User Groups, if this is enabled then **all users implicitly gain the groups permissions**.
|
|
|
|
For permissioning at scale, users can define [**User Groups in Resource Syncs**](/docs/sync-resources#user-group).
|
|
|
|
## Permission Levels
|
|
|
|
There are 4 permission levels a user / group can be given on a Resource:
|
|
|
|
1. **None**. The user will not have any access to the resource. The user **will not see it in the GUI, and it will not show up if the user queries the Komodo API directly**. All attempts to view or update the resource will be blocked. This is the default for non-admins, unless using `KOMODO_TRANSPARENT_MODE=true`.
|
|
|
|
2. **Read**. This is the first permission level that grants any access. It will enable the user to **see the resource in the GUI and read the configuration**. Any attempts to update configuration or trigger any action **will be blocked**. Using `KOMODO_TRANSPARENT_MODE=true` will make this level the base level on all resources, for all users.
|
|
|
|
3. **Execute**. This level will allow the user to execute actions on the resource, **like send a build command** or **trigger a redeploy**. The user will still be blocked from updating configuration on the resource.
|
|
|
|
4. **Write**. The user has full config write access to the resource, **they can execute any actions, update the configuration, and delete the resource**.
|
|
|
|
## Specific Permissions
|
|
|
|
Permission levels alone are not quite enough to provide granular access control.
|
|
Some features are additionally gated behind a specific permission for that feature.
|
|
|
|
- **`Logs`**: User can retrieve docker / docker compose logs on the associated resource.
|
|
- Valid on `Server`, `Stack`, `Deployment`.
|
|
- For admins wanting this permission by default for all users with read permissions, see below on default user groups.
|
|
- **`Inspect`**: User can "inspect" docker containers.
|
|
- Valid on `Server`, `Stack`, `Deployment`.
|
|
- **On Servers**: Access to this api will expose all container environments on the given server,
|
|
and can easily lead to secrets being leaked to unintended users if not protected.
|
|
- **`Terminal`**: User can access the associated resource's terminal.
|
|
- If given on a `Server`, this allows server level terminal access, and all container exec priviledges (Including attached `Stacks` / `Deployments`).
|
|
- If given on a `Stack` or `Deployment`, this allows container exec terminal (even without `Terminal` on `Server`).
|
|
- **`Attach`**: User can "attach" *other resources* to the resource.
|
|
- If given on a `Server`, allows users to attach `Stacks`, `Deployments`, `Repos`, and `Builders`.
|
|
- If given on a `Builder`, allows users to attach `Builds` and `Repos`.
|
|
- If given on a `Build`, allows users to attach it to `Deployments`.
|
|
- If given on a `Repo`, allows users to attach it to `Stacks`, `Builds`, and `Resource Syncs`.
|
|
- **`Processes`**: User can retrieve the full running process list on the `Server`.
|
|
|
|
## Permissioning by Resource Type
|
|
|
|
Users or User Groups can be given a base permission level on all Resources of a particular type, such as Stack.
|
|
In TOML form, this looks like:
|
|
|
|
```toml
|
|
[[user_group]]
|
|
name = "groupo"
|
|
users = ["mbecker20", "karamvirsingh98"]
|
|
all.Build = "Execute" # <- Group members can run all builds (but not update config),
|
|
all.Stack = { level = "Read", specific = ["Logs"] } # <- And see all Stacks / logs (no deploy / update, inspect, or terminal access).
|
|
```
|
|
|
|
A user / group can still be given a greater permission level on select resources:
|
|
|
|
```toml
|
|
permissions = [
|
|
# Grant addition specific permission (Logs are already granted above)
|
|
{ target.type = "Stack", target.id = "my-stack", level = "Execute", specific = ["Inspect", "Terminal"] },
|
|
# Use regex to match multiple resources, for example give john execute on all of their Stacks
|
|
{ target.type = "Stack", target.id = "\\^john-(.+)$\\", level = "Execute" },
|
|
]
|
|
```
|
|
|
|
## Administration
|
|
|
|
Users can be given Admin priviledges by a `Super Admin` (only the first user is given this status, set with `super_admin: true` on a User document in database). Super admins will see the "Make Admin" button when on a User page `/users/${user_id}`.
|
|
|
|
These users have unrestricted access to all Komodo Resources. Additionally, these users can update other (non-admin) user's permissions on resources.
|
|
|
|
Komodo admins are responsible for managing user accounts as well. When a user logs into Komodo for the first time, they will not immediately be granted access (this can changed with `KOMODO_ENABLE_NEW_USERS=true`). An admin must first **enable** the user, which can be done from the `Users` tab on `Settings` page. Users can also be **disabled** by an admin at any time, which blocks all their access to the GUI and API.
|
|
|
|
Users also have some configurable global permissions, these are:
|
|
|
|
- create server permission
|
|
- create build permission
|
|
|
|
Only users with these permissions (as well as admins) can add additional servers to Komodo, and can create additional builds, respectively. |