mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 09:48:58 -04:00
[8.x] Authorized route migration for routes owned by security-threat-hunting-investigations (#198387) (#200753)
# Backport This will backport the following commits from `main` to `8.x`: - [Authorized route migration for routes owned by security-threat-hunting-investigations (#198387)](https://github.com/elastic/kibana/pull/198387) <!--- Backport version: 9.4.3 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sqren/backport) <!--BACKPORT [{"author":{"name":"Kibana Machine","email":"42973632+kibanamachine@users.noreply.github.com"},"sourceCommit":{"committedDate":"2024-11-19T14:43:16Z","message":"Authorized route migration for routes owned by security-threat-hunting-investigations (#198387)\n\n### Authz API migration for authorized routes\r\n\r\nThis PR migrates `access:<privilege>` tags used in route definitions to\r\nnew security configuration.\r\nPlease refer to the documentation for more information: [Authorization\r\nAPI](https://docs.elastic.dev/kibana-dev-docs/key-concepts/security-api-authorization)\r\n\r\n### **Before migration:**\r\nAccess control tags were defined in the `options` object of the route:\r\n\r\n```ts\r\nrouter.get({\r\n path: '/api/path',\r\n options: {\r\n tags: ['access:<privilege_1>', 'access:<privilege_2>'],\r\n },\r\n ...\r\n}, handler);\r\n```\r\n\r\n### **After migration:**\r\nTags have been replaced with the more robust\r\n`security.authz.requiredPrivileges` field under `security`:\r\n\r\n```ts\r\nrouter.get({\r\n path: '/api/path',\r\n security: {\r\n authz: {\r\n requiredPrivileges: ['<privilege_1>', '<privilege_2>'],\r\n },\r\n },\r\n ...\r\n}, handler);\r\n```\r\n\r\n### What to do next?\r\n1. Review the changes in this PR.\r\n2. You might need to update your tests to reflect the new security\r\nconfiguration:\r\n - If you have tests that rely on checking `access` tags.\r\n - If you have snapshot tests that include the route definition.\r\n- If you have FTR tests that rely on checking unauthorized error\r\nmessage. The error message changed to also include missing privileges.\r\n\r\n## Any questions?\r\nIf you have any questions or need help with API authorization, please\r\nreach out to the `@elastic/kibana-security` team.","sha":"b3f27a9a46a2a0e092b520d5e1f636c981e36a2d","branchLabelMapping":{"^v9.0.0$":"main","^v8.17.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["enhancement","release_note:skip","Feature:Security/Authorization","v9.0.0","Team:Threat Hunting:Investigations","backport:prev-minor","Authz: API migration"],"title":"Authorized route migration for routes owned by security-threat-hunting-investigations","number":198387,"url":"https://github.com/elastic/kibana/pull/198387","mergeCommit":{"message":"Authorized route migration for routes owned by security-threat-hunting-investigations (#198387)\n\n### Authz API migration for authorized routes\r\n\r\nThis PR migrates `access:<privilege>` tags used in route definitions to\r\nnew security configuration.\r\nPlease refer to the documentation for more information: [Authorization\r\nAPI](https://docs.elastic.dev/kibana-dev-docs/key-concepts/security-api-authorization)\r\n\r\n### **Before migration:**\r\nAccess control tags were defined in the `options` object of the route:\r\n\r\n```ts\r\nrouter.get({\r\n path: '/api/path',\r\n options: {\r\n tags: ['access:<privilege_1>', 'access:<privilege_2>'],\r\n },\r\n ...\r\n}, handler);\r\n```\r\n\r\n### **After migration:**\r\nTags have been replaced with the more robust\r\n`security.authz.requiredPrivileges` field under `security`:\r\n\r\n```ts\r\nrouter.get({\r\n path: '/api/path',\r\n security: {\r\n authz: {\r\n requiredPrivileges: ['<privilege_1>', '<privilege_2>'],\r\n },\r\n },\r\n ...\r\n}, handler);\r\n```\r\n\r\n### What to do next?\r\n1. Review the changes in this PR.\r\n2. You might need to update your tests to reflect the new security\r\nconfiguration:\r\n - If you have tests that rely on checking `access` tags.\r\n - If you have snapshot tests that include the route definition.\r\n- If you have FTR tests that rely on checking unauthorized error\r\nmessage. The error message changed to also include missing privileges.\r\n\r\n## Any questions?\r\nIf you have any questions or need help with API authorization, please\r\nreach out to the `@elastic/kibana-security` team.","sha":"b3f27a9a46a2a0e092b520d5e1f636c981e36a2d"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.0.0","branchLabelMappingKey":"^v9.0.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/198387","number":198387,"mergeCommit":{"message":"Authorized route migration for routes owned by security-threat-hunting-investigations (#198387)\n\n### Authz API migration for authorized routes\r\n\r\nThis PR migrates `access:<privilege>` tags used in route definitions to\r\nnew security configuration.\r\nPlease refer to the documentation for more information: [Authorization\r\nAPI](https://docs.elastic.dev/kibana-dev-docs/key-concepts/security-api-authorization)\r\n\r\n### **Before migration:**\r\nAccess control tags were defined in the `options` object of the route:\r\n\r\n```ts\r\nrouter.get({\r\n path: '/api/path',\r\n options: {\r\n tags: ['access:<privilege_1>', 'access:<privilege_2>'],\r\n },\r\n ...\r\n}, handler);\r\n```\r\n\r\n### **After migration:**\r\nTags have been replaced with the more robust\r\n`security.authz.requiredPrivileges` field under `security`:\r\n\r\n```ts\r\nrouter.get({\r\n path: '/api/path',\r\n security: {\r\n authz: {\r\n requiredPrivileges: ['<privilege_1>', '<privilege_2>'],\r\n },\r\n },\r\n ...\r\n}, handler);\r\n```\r\n\r\n### What to do next?\r\n1. Review the changes in this PR.\r\n2. You might need to update your tests to reflect the new security\r\nconfiguration:\r\n - If you have tests that rely on checking `access` tags.\r\n - If you have snapshot tests that include the route definition.\r\n- If you have FTR tests that rely on checking unauthorized error\r\nmessage. The error message changed to also include missing privileges.\r\n\r\n## Any questions?\r\nIf you have any questions or need help with API authorization, please\r\nreach out to the `@elastic/kibana-security` team.","sha":"b3f27a9a46a2a0e092b520d5e1f636c981e36a2d"}}]}] BACKPORT-->
This commit is contained in:
parent
59e8006048
commit
d2f38b9db8
17 changed files with 70 additions and 32 deletions
|
@ -31,8 +31,10 @@ export const cleanDraftTimelinesRoute = (router: SecuritySolutionPluginRouter) =
|
|||
router.versioned
|
||||
.post({
|
||||
path: TIMELINE_DRAFT_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -24,8 +24,10 @@ export const getDraftTimelinesRoute = (router: SecuritySolutionPluginRouter) =>
|
|||
router.versioned
|
||||
.get({
|
||||
path: TIMELINE_DRAFT_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -22,8 +22,10 @@ export const deleteNoteRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.delete({
|
||||
path: NOTE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -37,8 +37,10 @@ export const getNotesRoute = (
|
|||
router.versioned
|
||||
.get({
|
||||
path: NOTE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -25,8 +25,10 @@ export const persistNoteRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.patch({
|
||||
path: NOTE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -26,8 +26,10 @@ export const persistPinnedEventRoute = (router: SecuritySolutionPluginRouter) =>
|
|||
router.versioned
|
||||
.patch({
|
||||
path: PINNED_EVENT_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -34,8 +34,12 @@ export const installPrepackedTimelinesRoute = (
|
|||
router.versioned
|
||||
.post({
|
||||
path: `${TIMELINE_PREPACKAGED_URL}`,
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
body: {
|
||||
maxBytes: config.maxTimelineImportPayloadBytes,
|
||||
output: 'stream',
|
||||
|
|
|
@ -23,8 +23,10 @@ export const copyTimelineRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.post({
|
||||
path: TIMELINE_COPY_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'internal',
|
||||
})
|
||||
|
|
|
@ -32,8 +32,10 @@ export const createTimelinesRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.post({
|
||||
path: TIMELINE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -23,8 +23,10 @@ export const deleteTimelinesRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.delete({
|
||||
path: TIMELINE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -26,8 +26,10 @@ export const exportTimelinesRoute = (router: SecuritySolutionPluginRouter, confi
|
|||
router.versioned
|
||||
.post({
|
||||
path: TIMELINE_EXPORT_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -26,8 +26,10 @@ export const getTimelineRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.get({
|
||||
path: TIMELINE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -25,8 +25,10 @@ export const getTimelinesRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.get({
|
||||
path: TIMELINES_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -32,8 +32,12 @@ export const importTimelinesRoute = (router: SecuritySolutionPluginRouter, confi
|
|||
router.versioned
|
||||
.post({
|
||||
path: `${TIMELINE_IMPORT_URL}`,
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
body: {
|
||||
maxBytes: config.maxTimelineImportPayloadBytes,
|
||||
output: 'stream',
|
||||
|
|
|
@ -26,8 +26,10 @@ export const patchTimelinesRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.patch({
|
||||
path: TIMELINE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -26,8 +26,10 @@ export const persistFavoriteRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.patch({
|
||||
path: TIMELINE_FAVORITE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
|
@ -27,8 +27,10 @@ export const resolveTimelineRoute = (router: SecuritySolutionPluginRouter) => {
|
|||
router.versioned
|
||||
.get({
|
||||
path: TIMELINE_RESOLVE_URL,
|
||||
options: {
|
||||
tags: ['access:securitySolution'],
|
||||
security: {
|
||||
authz: {
|
||||
requiredPrivileges: ['securitySolution'],
|
||||
},
|
||||
},
|
||||
access: 'public',
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue