Add reporting_user feature for reserved set of privileges#231533
Add reporting_user feature for reserved set of privileges#231533darnautov merged 37 commits intoelastic:mainfrom
reporting_user feature for reserved set of privileges#231533Conversation
nreese
left a comment
There was a problem hiding this comment.
kibana-presentation changes LGTM
code review only
legrego
left a comment
There was a problem hiding this comment.
Thanks for the PR, Tim. If you want to test your changes locally, you can simulate the reserved role by putting this through DevTools, and then assigning a user this test_reporting_user role alongside a custom role:
POST /_security/role/test_reporting_user
{
"cluster": [],
"indices": [],
"application": [{
"application": "kibana-*",
"privileges": ["reserved_reporting_user"],
"resources": ["*"]
}]
}
.../packages/private/kbn-reporting/get_csv_panel_actions/panel_actions/get_csv_panel_action.tsx
Outdated
Show resolved
Hide resolved
…eporting Co-authored-by: Larry Gregory <lgregorydev@gmail.com>
….com:tsullivan/kibana into reporting/reserved-reporting-user-privileges
This reverts commit d5e0126.
48527fe to
acfb1fe
Compare
💚 Build Succeeded
Metrics [docs]Async chunks
Page load bundle
History
cc @tsullivan |
jloleysens
left a comment
There was a problem hiding this comment.
Overall feature changes make sense, did not review in depth seems like Core review was not needed but for some reason is still block, so approving to unblock
|
Starting backport for target branches: 9.0, 9.1 |
💔 All backports failed
Manual backportTo create the backport manually run: Questions ?Please refer to the Backport tool documentation |
…231533) ## Summary We want to switch the reserved `reporting_user` role to use a "reserved privilege definition" and uses just that privilege. This PR satisfies the Kibana requirements. There is a corresponding Elasticsearch PR: elastic/elasticsearch#132766 ## Testing **NOTE: PNG/PDF reporting requires a Trial, or Gold+ license** 1. Create `test_reporting_user` role ``` POST /_security/role/test_reporting_user { "cluster": [], "indices": [], "application": [{ "application": "kibana-*", "privileges": ["reserved_reporting_user"], "resources": ["*"] }] } ``` 2. Create `test_analyst_user` role ``` POST /_security/role/test_analyst_user { "cluster": [], "indices": [ { "names": ["kibana_sample_*"], "privileges": ["all"], "field_security": { "grant": ["*"], "except": [] }, "allow_restricted_indices": false } ], "applications": [ { "application": "kibana-.kibana", "privileges": [ "feature_discover_v2.read", "feature_dashboard_v2.read", "feature_canvas.read", "feature_visualize_v2.read" ], "resources": ["space:default"] } ], "run_as": [], "metadata": {}, "transient_metadata": { "enabled": true } } ``` 3. Create a test user with just those two roles. Install sample data. Log in using the new test user. 4. Test cases | App | Reporting feature |-|- | Dashboard | PDF, PNG, CSV (from saved search panel action) | Discover | CSV | Canvas | PDF | Lens | PDF, PNG | Stack Management | List reports, download reports, view report info, delete reports 6. As admin, create an additional Space which the test user should not have access to. Ensure the test user does not have access to those spaces. 7. Remove the `test_reporting_user` role from the user and ensure they do not see any Reporting controls in the UI, and can not access Stack Management > Reporting. ## Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - ~~[ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~ - ~~[ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials~~ - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - ~~[ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~ - ~~[ ] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations.~~ - ~~[ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed~~ - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) - [x] Review the [backport guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing) and apply applicable `backport:*` labels. --------- Co-authored-by: Larry Gregory <larry.gregory@elastic.co> (cherry picked from commit f9be58b) # Conflicts: # x-pack/platform/test/reporting_api_integration/reporting_and_security/default_reporting_user_role.ts
💚 All backports created successfully
Note: Successful backport PRs will be merged automatically after passing CI. Questions ?Please refer to the Backport tool documentation |
…231533) ## Summary We want to switch the reserved `reporting_user` role to use a "reserved privilege definition" and uses just that privilege. This PR satisfies the Kibana requirements. There is a corresponding Elasticsearch PR: elastic/elasticsearch#132766 ## Testing **NOTE: PNG/PDF reporting requires a Trial, or Gold+ license** 1. Create `test_reporting_user` role ``` POST /_security/role/test_reporting_user { "cluster": [], "indices": [], "application": [{ "application": "kibana-*", "privileges": ["reserved_reporting_user"], "resources": ["*"] }] } ``` 2. Create `test_analyst_user` role ``` POST /_security/role/test_analyst_user { "cluster": [], "indices": [ { "names": ["kibana_sample_*"], "privileges": ["all"], "field_security": { "grant": ["*"], "except": [] }, "allow_restricted_indices": false } ], "applications": [ { "application": "kibana-.kibana", "privileges": [ "feature_discover_v2.read", "feature_dashboard_v2.read", "feature_canvas.read", "feature_visualize_v2.read" ], "resources": ["space:default"] } ], "run_as": [], "metadata": {}, "transient_metadata": { "enabled": true } } ``` 3. Create a test user with just those two roles. Install sample data. Log in using the new test user. 4. Test cases | App | Reporting feature |-|- | Dashboard | PDF, PNG, CSV (from saved search panel action) | Discover | CSV | Canvas | PDF | Lens | PDF, PNG | Stack Management | List reports, download reports, view report info, delete reports 6. As admin, create an additional Space which the test user should not have access to. Ensure the test user does not have access to those spaces. 7. Remove the `test_reporting_user` role from the user and ensure they do not see any Reporting controls in the UI, and can not access Stack Management > Reporting. ## Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - ~~[ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~ - ~~[ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials~~ - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - ~~[ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~ - ~~[ ] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations.~~ - ~~[ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed~~ - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) - [x] Review the [backport guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing) and apply applicable `backport:*` labels. --------- Co-authored-by: Larry Gregory <larry.gregory@elastic.co> (cherry picked from commit f9be58b) # Conflicts: # src/platform/packages/private/kbn-reporting/public/share/share_context_menu/register_csv_modal_reporting.tsx # src/platform/packages/private/kbn-reporting/public/share/share_context_menu/register_pdf_png_modal_reporting.tsx # src/platform/test/functional/page_objects/export_page.ts # x-pack/platform/plugins/private/reporting/server/plugin.test.ts # x-pack/test/api_integration/apis/features/features/features.ts # x-pack/test/reporting_api_integration/reporting_and_security/default_reporting_user_role.ts # x-pack/test/reporting_api_integration/services/scenarios.ts # x-pack/test/reporting_functional/services/scenarios.ts
…31533) (#232384) # Backport This will backport the following commits from `main` to `9.1`: - [Add `reporting_user` feature for reserved set of privileges (#231533)](#231533) <!--- Backport version: 10.0.1 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Tim Sullivan","email":"tsullivan@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-08-20T11:57:52Z","message":"Add `reporting_user` feature for reserved set of privileges (#231533)\n\n## Summary\n\nWe want to switch the reserved `reporting_user` role to use a \"reserved\nprivilege definition\" and uses just that privilege. This PR satisfies\nthe Kibana requirements. There is a corresponding Elasticsearch PR:\nhttps://github.com/elastic/elasticsearch/pull/132766\n\n## Testing\n**NOTE: PNG/PDF reporting requires a Trial, or Gold+ license**\n\n1. Create `test_reporting_user` role\n\n ```\n POST /_security/role/test_reporting_user\n {\n \"cluster\": [],\n \"indices\": [],\n \"application\": [{\n \"application\": \"kibana-*\",\n \"privileges\": [\"reserved_reporting_user\"],\n \"resources\": [\"*\"]\n }]\n }\n ```\n\n2. Create `test_analyst_user` role\n\n ```\n POST /_security/role/test_analyst_user\n {\n \"cluster\": [],\n \"indices\": [\n {\n \"names\": [\"kibana_sample_*\"],\n \"privileges\": [\"all\"],\n \"field_security\": {\n \"grant\": [\"*\"],\n \"except\": []\n },\n \"allow_restricted_indices\": false\n }\n ],\n \"applications\": [\n {\n \"application\": \"kibana-.kibana\",\n \"privileges\": [\n \"feature_discover_v2.read\",\n \"feature_dashboard_v2.read\",\n \"feature_canvas.read\",\n \"feature_visualize_v2.read\"\n ],\n \"resources\": [\"space:default\"]\n }\n ],\n \"run_as\": [],\n \"metadata\": {},\n \"transient_metadata\": {\n \"enabled\": true\n }\n }\n ```\n\n3. Create a test user with just those two roles. Install sample data.\nLog in using the new test user.\n4. Test cases\n\n | App | Reporting feature\n |-|-\n | Dashboard | PDF, PNG, CSV (from saved search panel action)\n | Discover | CSV\n | Canvas | PDF\n | Lens | PDF, PNG\n| Stack Management | List reports, download reports, view report info,\ndelete reports\n\n6. As admin, create an additional Space which the test user should not\nhave access to. Ensure the test user does not have access to those\nspaces.\n7. Remove the `test_reporting_user` role from the user and ensure they\ndo not see any Reporting controls in the UI, and can not access Stack\nManagement > Reporting.\n\n## Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- ~~[ ] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~\n- ~~[ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials~~\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- ~~[ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~\n- ~~[ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.~~\n- ~~[ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed~~\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [x] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n---------\n\nCo-authored-by: Larry Gregory <larry.gregory@elastic.co>","sha":"f9be58be65e59b85dc6c4d8fa74970a4f8c1971e","branchLabelMapping":{"^v9.2.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","backport:version","v9.2.0","v9.1.3","v9.0.6"],"title":"Add `reporting_user` feature for reserved set of privileges","number":231533,"url":"https://github.com/elastic/kibana/pull/231533","mergeCommit":{"message":"Add `reporting_user` feature for reserved set of privileges (#231533)\n\n## Summary\n\nWe want to switch the reserved `reporting_user` role to use a \"reserved\nprivilege definition\" and uses just that privilege. This PR satisfies\nthe Kibana requirements. There is a corresponding Elasticsearch PR:\nhttps://github.com/elastic/elasticsearch/pull/132766\n\n## Testing\n**NOTE: PNG/PDF reporting requires a Trial, or Gold+ license**\n\n1. Create `test_reporting_user` role\n\n ```\n POST /_security/role/test_reporting_user\n {\n \"cluster\": [],\n \"indices\": [],\n \"application\": [{\n \"application\": \"kibana-*\",\n \"privileges\": [\"reserved_reporting_user\"],\n \"resources\": [\"*\"]\n }]\n }\n ```\n\n2. Create `test_analyst_user` role\n\n ```\n POST /_security/role/test_analyst_user\n {\n \"cluster\": [],\n \"indices\": [\n {\n \"names\": [\"kibana_sample_*\"],\n \"privileges\": [\"all\"],\n \"field_security\": {\n \"grant\": [\"*\"],\n \"except\": []\n },\n \"allow_restricted_indices\": false\n }\n ],\n \"applications\": [\n {\n \"application\": \"kibana-.kibana\",\n \"privileges\": [\n \"feature_discover_v2.read\",\n \"feature_dashboard_v2.read\",\n \"feature_canvas.read\",\n \"feature_visualize_v2.read\"\n ],\n \"resources\": [\"space:default\"]\n }\n ],\n \"run_as\": [],\n \"metadata\": {},\n \"transient_metadata\": {\n \"enabled\": true\n }\n }\n ```\n\n3. Create a test user with just those two roles. Install sample data.\nLog in using the new test user.\n4. Test cases\n\n | App | Reporting feature\n |-|-\n | Dashboard | PDF, PNG, CSV (from saved search panel action)\n | Discover | CSV\n | Canvas | PDF\n | Lens | PDF, PNG\n| Stack Management | List reports, download reports, view report info,\ndelete reports\n\n6. As admin, create an additional Space which the test user should not\nhave access to. Ensure the test user does not have access to those\nspaces.\n7. Remove the `test_reporting_user` role from the user and ensure they\ndo not see any Reporting controls in the UI, and can not access Stack\nManagement > Reporting.\n\n## Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- ~~[ ] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~\n- ~~[ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials~~\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- ~~[ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~\n- ~~[ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.~~\n- ~~[ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed~~\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [x] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n---------\n\nCo-authored-by: Larry Gregory <larry.gregory@elastic.co>","sha":"f9be58be65e59b85dc6c4d8fa74970a4f8c1971e"}},"sourceBranch":"main","suggestedTargetBranches":["9.1","9.0"],"targetPullRequestStates":[{"branch":"main","label":"v9.2.0","branchLabelMappingKey":"^v9.2.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/231533","number":231533,"mergeCommit":{"message":"Add `reporting_user` feature for reserved set of privileges (#231533)\n\n## Summary\n\nWe want to switch the reserved `reporting_user` role to use a \"reserved\nprivilege definition\" and uses just that privilege. This PR satisfies\nthe Kibana requirements. There is a corresponding Elasticsearch PR:\nhttps://github.com/elastic/elasticsearch/pull/132766\n\n## Testing\n**NOTE: PNG/PDF reporting requires a Trial, or Gold+ license**\n\n1. Create `test_reporting_user` role\n\n ```\n POST /_security/role/test_reporting_user\n {\n \"cluster\": [],\n \"indices\": [],\n \"application\": [{\n \"application\": \"kibana-*\",\n \"privileges\": [\"reserved_reporting_user\"],\n \"resources\": [\"*\"]\n }]\n }\n ```\n\n2. Create `test_analyst_user` role\n\n ```\n POST /_security/role/test_analyst_user\n {\n \"cluster\": [],\n \"indices\": [\n {\n \"names\": [\"kibana_sample_*\"],\n \"privileges\": [\"all\"],\n \"field_security\": {\n \"grant\": [\"*\"],\n \"except\": []\n },\n \"allow_restricted_indices\": false\n }\n ],\n \"applications\": [\n {\n \"application\": \"kibana-.kibana\",\n \"privileges\": [\n \"feature_discover_v2.read\",\n \"feature_dashboard_v2.read\",\n \"feature_canvas.read\",\n \"feature_visualize_v2.read\"\n ],\n \"resources\": [\"space:default\"]\n }\n ],\n \"run_as\": [],\n \"metadata\": {},\n \"transient_metadata\": {\n \"enabled\": true\n }\n }\n ```\n\n3. Create a test user with just those two roles. Install sample data.\nLog in using the new test user.\n4. Test cases\n\n | App | Reporting feature\n |-|-\n | Dashboard | PDF, PNG, CSV (from saved search panel action)\n | Discover | CSV\n | Canvas | PDF\n | Lens | PDF, PNG\n| Stack Management | List reports, download reports, view report info,\ndelete reports\n\n6. As admin, create an additional Space which the test user should not\nhave access to. Ensure the test user does not have access to those\nspaces.\n7. Remove the `test_reporting_user` role from the user and ensure they\ndo not see any Reporting controls in the UI, and can not access Stack\nManagement > Reporting.\n\n## Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- ~~[ ] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~\n- ~~[ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials~~\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- ~~[ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~\n- ~~[ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.~~\n- ~~[ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed~~\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [x] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n---------\n\nCo-authored-by: Larry Gregory <larry.gregory@elastic.co>","sha":"f9be58be65e59b85dc6c4d8fa74970a4f8c1971e"}},{"branch":"9.1","label":"v9.1.3","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"9.0","label":"v9.0.6","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> Co-authored-by: Tim Sullivan <tsullivan@users.noreply.github.com>
…31533) (#232396) # Backport This will backport the following commits from `main` to `9.0`: - [Add `reporting_user` feature for reserved set of privileges (#231533)](#231533) <!--- Backport version: 10.0.1 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Tim Sullivan","email":"tsullivan@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-08-20T11:57:52Z","message":"Add `reporting_user` feature for reserved set of privileges (#231533)\n\n## Summary\n\nWe want to switch the reserved `reporting_user` role to use a \"reserved\nprivilege definition\" and uses just that privilege. This PR satisfies\nthe Kibana requirements. There is a corresponding Elasticsearch PR:\nhttps://github.com/elastic/elasticsearch/pull/132766\n\n## Testing\n**NOTE: PNG/PDF reporting requires a Trial, or Gold+ license**\n\n1. Create `test_reporting_user` role\n\n ```\n POST /_security/role/test_reporting_user\n {\n \"cluster\": [],\n \"indices\": [],\n \"application\": [{\n \"application\": \"kibana-*\",\n \"privileges\": [\"reserved_reporting_user\"],\n \"resources\": [\"*\"]\n }]\n }\n ```\n\n2. Create `test_analyst_user` role\n\n ```\n POST /_security/role/test_analyst_user\n {\n \"cluster\": [],\n \"indices\": [\n {\n \"names\": [\"kibana_sample_*\"],\n \"privileges\": [\"all\"],\n \"field_security\": {\n \"grant\": [\"*\"],\n \"except\": []\n },\n \"allow_restricted_indices\": false\n }\n ],\n \"applications\": [\n {\n \"application\": \"kibana-.kibana\",\n \"privileges\": [\n \"feature_discover_v2.read\",\n \"feature_dashboard_v2.read\",\n \"feature_canvas.read\",\n \"feature_visualize_v2.read\"\n ],\n \"resources\": [\"space:default\"]\n }\n ],\n \"run_as\": [],\n \"metadata\": {},\n \"transient_metadata\": {\n \"enabled\": true\n }\n }\n ```\n\n3. Create a test user with just those two roles. Install sample data.\nLog in using the new test user.\n4. Test cases\n\n | App | Reporting feature\n |-|-\n | Dashboard | PDF, PNG, CSV (from saved search panel action)\n | Discover | CSV\n | Canvas | PDF\n | Lens | PDF, PNG\n| Stack Management | List reports, download reports, view report info,\ndelete reports\n\n6. As admin, create an additional Space which the test user should not\nhave access to. Ensure the test user does not have access to those\nspaces.\n7. Remove the `test_reporting_user` role from the user and ensure they\ndo not see any Reporting controls in the UI, and can not access Stack\nManagement > Reporting.\n\n## Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- ~~[ ] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~\n- ~~[ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials~~\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- ~~[ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~\n- ~~[ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.~~\n- ~~[ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed~~\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [x] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n---------\n\nCo-authored-by: Larry Gregory <larry.gregory@elastic.co>","sha":"f9be58be65e59b85dc6c4d8fa74970a4f8c1971e","branchLabelMapping":{"^v9.2.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","backport:version","v9.2.0","v9.1.3","v9.0.6"],"title":"Add `reporting_user` feature for reserved set of privileges","number":231533,"url":"https://github.com/elastic/kibana/pull/231533","mergeCommit":{"message":"Add `reporting_user` feature for reserved set of privileges (#231533)\n\n## Summary\n\nWe want to switch the reserved `reporting_user` role to use a \"reserved\nprivilege definition\" and uses just that privilege. This PR satisfies\nthe Kibana requirements. There is a corresponding Elasticsearch PR:\nhttps://github.com/elastic/elasticsearch/pull/132766\n\n## Testing\n**NOTE: PNG/PDF reporting requires a Trial, or Gold+ license**\n\n1. Create `test_reporting_user` role\n\n ```\n POST /_security/role/test_reporting_user\n {\n \"cluster\": [],\n \"indices\": [],\n \"application\": [{\n \"application\": \"kibana-*\",\n \"privileges\": [\"reserved_reporting_user\"],\n \"resources\": [\"*\"]\n }]\n }\n ```\n\n2. Create `test_analyst_user` role\n\n ```\n POST /_security/role/test_analyst_user\n {\n \"cluster\": [],\n \"indices\": [\n {\n \"names\": [\"kibana_sample_*\"],\n \"privileges\": [\"all\"],\n \"field_security\": {\n \"grant\": [\"*\"],\n \"except\": []\n },\n \"allow_restricted_indices\": false\n }\n ],\n \"applications\": [\n {\n \"application\": \"kibana-.kibana\",\n \"privileges\": [\n \"feature_discover_v2.read\",\n \"feature_dashboard_v2.read\",\n \"feature_canvas.read\",\n \"feature_visualize_v2.read\"\n ],\n \"resources\": [\"space:default\"]\n }\n ],\n \"run_as\": [],\n \"metadata\": {},\n \"transient_metadata\": {\n \"enabled\": true\n }\n }\n ```\n\n3. Create a test user with just those two roles. Install sample data.\nLog in using the new test user.\n4. Test cases\n\n | App | Reporting feature\n |-|-\n | Dashboard | PDF, PNG, CSV (from saved search panel action)\n | Discover | CSV\n | Canvas | PDF\n | Lens | PDF, PNG\n| Stack Management | List reports, download reports, view report info,\ndelete reports\n\n6. As admin, create an additional Space which the test user should not\nhave access to. Ensure the test user does not have access to those\nspaces.\n7. Remove the `test_reporting_user` role from the user and ensure they\ndo not see any Reporting controls in the UI, and can not access Stack\nManagement > Reporting.\n\n## Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- ~~[ ] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~\n- ~~[ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials~~\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- ~~[ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~\n- ~~[ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.~~\n- ~~[ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed~~\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [x] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n---------\n\nCo-authored-by: Larry Gregory <larry.gregory@elastic.co>","sha":"f9be58be65e59b85dc6c4d8fa74970a4f8c1971e"}},"sourceBranch":"main","suggestedTargetBranches":["9.1","9.0"],"targetPullRequestStates":[{"branch":"main","label":"v9.2.0","branchLabelMappingKey":"^v9.2.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/231533","number":231533,"mergeCommit":{"message":"Add `reporting_user` feature for reserved set of privileges (#231533)\n\n## Summary\n\nWe want to switch the reserved `reporting_user` role to use a \"reserved\nprivilege definition\" and uses just that privilege. This PR satisfies\nthe Kibana requirements. There is a corresponding Elasticsearch PR:\nhttps://github.com/elastic/elasticsearch/pull/132766\n\n## Testing\n**NOTE: PNG/PDF reporting requires a Trial, or Gold+ license**\n\n1. Create `test_reporting_user` role\n\n ```\n POST /_security/role/test_reporting_user\n {\n \"cluster\": [],\n \"indices\": [],\n \"application\": [{\n \"application\": \"kibana-*\",\n \"privileges\": [\"reserved_reporting_user\"],\n \"resources\": [\"*\"]\n }]\n }\n ```\n\n2. Create `test_analyst_user` role\n\n ```\n POST /_security/role/test_analyst_user\n {\n \"cluster\": [],\n \"indices\": [\n {\n \"names\": [\"kibana_sample_*\"],\n \"privileges\": [\"all\"],\n \"field_security\": {\n \"grant\": [\"*\"],\n \"except\": []\n },\n \"allow_restricted_indices\": false\n }\n ],\n \"applications\": [\n {\n \"application\": \"kibana-.kibana\",\n \"privileges\": [\n \"feature_discover_v2.read\",\n \"feature_dashboard_v2.read\",\n \"feature_canvas.read\",\n \"feature_visualize_v2.read\"\n ],\n \"resources\": [\"space:default\"]\n }\n ],\n \"run_as\": [],\n \"metadata\": {},\n \"transient_metadata\": {\n \"enabled\": true\n }\n }\n ```\n\n3. Create a test user with just those two roles. Install sample data.\nLog in using the new test user.\n4. Test cases\n\n | App | Reporting feature\n |-|-\n | Dashboard | PDF, PNG, CSV (from saved search panel action)\n | Discover | CSV\n | Canvas | PDF\n | Lens | PDF, PNG\n| Stack Management | List reports, download reports, view report info,\ndelete reports\n\n6. As admin, create an additional Space which the test user should not\nhave access to. Ensure the test user does not have access to those\nspaces.\n7. Remove the `test_reporting_user` role from the user and ensure they\ndo not see any Reporting controls in the UI, and can not access Stack\nManagement > Reporting.\n\n## Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers should verify this PR satisfies this list as well.\n\n- ~~[ ] Any text added follows [EUI's writing\nguidelines](https://elastic.github.io/eui/#/guidelines/writing), uses\nsentence case text and includes [i18n\nsupport](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~\n- ~~[ ]\n[Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html)\nwas added for features that require explanation or tutorials~~\n- [x] [Unit or functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere updated or added to match the most common scenarios\n- ~~[ ] If a plugin configuration key changed, check if it needs to be\nallowlisted in the cloud and added to the [docker\nlist](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~\n- ~~[ ] This was checked for breaking HTTP API changes, and any breaking\nchanges have been approved by the breaking-change committee. The\n`release_note:breaking` label should be applied in these situations.~~\n- ~~[ ] [Flaky Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was\nused on any tests changed~~\n- [ ] The PR description includes the appropriate Release Notes section,\nand the correct `release_note:*` label is applied per the\n[guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process)\n- [x] Review the [backport\nguidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing)\nand apply applicable `backport:*` labels.\n\n---------\n\nCo-authored-by: Larry Gregory <larry.gregory@elastic.co>","sha":"f9be58be65e59b85dc6c4d8fa74970a4f8c1971e"}},{"branch":"9.1","label":"v9.1.3","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"9.0","label":"v9.0.6","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT--> --------- Co-authored-by: Tim Sullivan <tsullivan@users.noreply.github.com> Co-authored-by: Brandon Kobel <brandon.kobel@elastic.co>
…lastic#231942) ## Human Summary Kibana privileges with reserved privileges are not having their UI Capabilities correctly toggled based on user permissions. This PR updates the Security plugin's `disable_ui_capabilities` module to respect reserved privileges. Relates: elastic#231533 ## AI Summary This pull request enhances the test coverage and logic for handling Kibana features with reserved privileges in the UI capabilities authorization system. The main focus is on ensuring that features defined with reserved privileges are correctly processed and disabled when appropriate, similar to features with standard privileges. **Reserved privileges support:** * Added a new `reservedKibanaFeature` with reserved privileges to the test suite, including relevant UI and saved object privileges. This ensures the system can handle features defined with reserved privileges. * Updated multiple test cases to include `reservedKibanaFeature` in the list of features being processed, verifying correct handling in both `usingPrivileges` and `all` scenarios. [[1]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306L216-R239) [[2]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306L382-R407) [[3]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306L509-R542) [[4]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306L566-R599) **Authorization logic and expectations:** * Adjusted test expectations to assert that reserved UI capabilities are disabled for users without the required privileges, mirroring behavior for features with standard privileges. [[1]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306R386-R387) [[2]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306R437-R440) [[3]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306R484-R487) [[4]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306R637-R640) [[5]](diffhunk://#diff-0f0c73f0ead4aee434f90fc166fb6d87819149ad515d46d6d27a5a1bac6d8306R674-R678) * Updated comments to clarify that both standard and reserved privilege features are disabled when appropriate. **Core logic update:** * Modified the `disableUICapabilitiesFactory` function to treat features with reserved privileges as subject to the security model, ensuring they are not incorrectly opted out.
…231533) ## Summary We want to switch the reserved `reporting_user` role to use a "reserved privilege definition" and uses just that privilege. This PR satisfies the Kibana requirements. There is a corresponding Elasticsearch PR: elastic/elasticsearch#132766 ## Testing **NOTE: PNG/PDF reporting requires a Trial, or Gold+ license** 1. Create `test_reporting_user` role ``` POST /_security/role/test_reporting_user { "cluster": [], "indices": [], "application": [{ "application": "kibana-*", "privileges": ["reserved_reporting_user"], "resources": ["*"] }] } ``` 2. Create `test_analyst_user` role ``` POST /_security/role/test_analyst_user { "cluster": [], "indices": [ { "names": ["kibana_sample_*"], "privileges": ["all"], "field_security": { "grant": ["*"], "except": [] }, "allow_restricted_indices": false } ], "applications": [ { "application": "kibana-.kibana", "privileges": [ "feature_discover_v2.read", "feature_dashboard_v2.read", "feature_canvas.read", "feature_visualize_v2.read" ], "resources": ["space:default"] } ], "run_as": [], "metadata": {}, "transient_metadata": { "enabled": true } } ``` 3. Create a test user with just those two roles. Install sample data. Log in using the new test user. 4. Test cases | App | Reporting feature |-|- | Dashboard | PDF, PNG, CSV (from saved search panel action) | Discover | CSV | Canvas | PDF | Lens | PDF, PNG | Stack Management | List reports, download reports, view report info, delete reports 6. As admin, create an additional Space which the test user should not have access to. Ensure the test user does not have access to those spaces. 7. Remove the `test_reporting_user` role from the user and ensure they do not see any Reporting controls in the UI, and can not access Stack Management > Reporting. ## Checklist Check the PR satisfies following conditions. Reviewers should verify this PR satisfies this list as well. - ~~[ ] Any text added follows [EUI's writing guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses sentence case text and includes [i18n support](https://github.com/elastic/kibana/blob/main/src/platform/packages/shared/kbn-i18n/README.md)~~ - ~~[ ] [Documentation](https://www.elastic.co/guide/en/kibana/master/development-documentation.html) was added for features that require explanation or tutorials~~ - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios - ~~[ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the [docker list](https://github.com/elastic/kibana/blob/main/src/dev/build/tasks/os_packages/docker_generator/resources/base/bin/kibana-docker)~~ - ~~[ ] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. The `release_note:breaking` label should be applied in these situations.~~ - ~~[ ] [Flaky Test Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was used on any tests changed~~ - [ ] The PR description includes the appropriate Release Notes section, and the correct `release_note:*` label is applied per the [guidelines](https://www.elastic.co/guide/en/kibana/master/contributing.html#kibana-release-notes-process) - [x] Review the [backport guidelines](https://docs.google.com/document/d/1VyN5k91e5OVumlc0Gb9RPa3h1ewuPE705nRtioPiTvY/edit?usp=sharing) and apply applicable `backport:*` labels. --------- Co-authored-by: Larry Gregory <larry.gregory@elastic.co>
Summary
We want to switch the reserved
reporting_userrole to use a "reserved privilege definition" and uses just that privilege. This PR satisfies the Kibana requirements. There is a corresponding Elasticsearch PR: elastic/elasticsearch#132766Testing
NOTE: PNG/PDF reporting requires a Trial, or Gold+ license
Create
test_reporting_userroleCreate
test_analyst_userroleCreate a test user with just those two roles. Install sample data. Log in using the new test user.
Test cases
As admin, create an additional Space which the test user should not have access to. Ensure the test user does not have access to those spaces.
Remove the
test_reporting_userrole from the user and ensure they do not see any Reporting controls in the UI, and can not access Stack Management > Reporting.Checklist
Check the PR satisfies following conditions.
Reviewers should verify this PR satisfies this list as well.
[ ] Any text added follows EUI's writing guidelines, uses sentence case text and includes i18n support[ ] Documentation was added for features that require explanation or tutorials[ ] If a plugin configuration key changed, check if it needs to be allowlisted in the cloud and added to the docker list[ ] This was checked for breaking HTTP API changes, and any breaking changes have been approved by the breaking-change committee. Therelease_note:breakinglabel should be applied in these situations.[ ] Flaky Test Runner was used on any tests changedrelease_note:*label is applied per the guidelinesbackport:*labels.