-
Notifications
You must be signed in to change notification settings - Fork 8.3k
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
RBAC - SecurityAuditLogger #19571
RBAC - SecurityAuditLogger #19571
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Overall I like this! A couple thoughts:
- Since RBAC is opt-in for the remainder of 6.x, and RBAC is the only supported feature for audit logging, I think it'd be worthwhile to add a log message on startup that warns if
xpack.security.audit.enabled
is true, butxpack.security.rbac.enabled
is set to false. That configuration is effectively a no-op, and might not do what people expect. - Also around setting user expectations, we should add documentation for this new feature, explaining exactly what it will and won't do.
const securityAuditLogger = new SecurityAuditLogger(config, auditLogger); | ||
securityAuditLogger.savedObjectsAuthorizationFailure(); | ||
|
||
expect(auditLogger.log).toHaveBeenCalledTimes(0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This feels fragile to me. I think it's strange that we have to rely on the securityAuditLogger
using a dependency in a very particular way in order to verify that the securityAuditLogger
works as intended.
I don't have any recommendations here, but what's your take? Am I overthinking this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, I've always struggled with this when it comes to writing "unit tests". In this situation, the "unit under test" is specifically the SecurityAuditLogger, so we're mocking out the AuditLogger itself, so we're forced to write the current style of tests where we ensure the security audit logger is calling the correct methods on the audit logger.
The other approach that I've taken before is to test the security audit logger and the audit logger as the "unit under test" and expand the boundaries so we'd be stubbing out the Kibana server itself and ensuring we're calling the appropriate "log" functions on the server itself. If we we were to do this, we'd have duplicate code between each of the implementations of the plugin specific audit loggers that ensure the appropriate tags are added, etc. and when we changed the internal implementation of the base AuditLogger in accordance with the new platform we'd have to rework a lot more tests.
Given the intent of the introduction of the base AuditLogger abstracting away the internal way that tags are used, I think the current approach is the best, but it definitely leaves something to be desired.
this._auditLogger = auditLogger; | ||
} | ||
|
||
savedObjectsAuthorizationFailure(username, action, types, missing) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is args
intentionally omitted from the failure case?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was intentional, but it might not be what we really want. My reasoning was that in the case where we're denying the user from performing an action, the specifics of that action aren't relevant if they weren't able to perform it. So we're only logging the information that we used to deny the request.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's a fair argument. My counter-argument is:
- Adding
args
will make parsing the failure entries more consistent with thesuccess
entries - For investigating incidents, it could be useful to know what saved objects (or request payloads) the user was attempting to send, malicious or otherwise.
I don't have a strong opinion either way here, so I'm fine with whatever you decide. This is something that's easily added later on if we want it.
edit: I missed an args
/argument
pun opportunity here
We could do that for the time being, but there are likely additional audit entries that we'll be making in 6.x that would remove this, so I put off doing so or making the config schema only allow you to specify this when
Completely agree with regard to the documentation. I was hoping to address the documentation as a separate PR after getting the RBAC PR ready (so we can start to get feedback on it as soon as possible) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! Tested this locally
f043655
to
a2b51b5
Compare
* Manually porting over the AuditLogger for use within the security audit logger * HasPrivileges now returns the user from the request * Has privileges returns username from privilegeCheck * Adding first eventType to the security audit logger * Adding authorization success message * Logging arguments when authorization success * Fixing test description * Logging args during audit failures
@joshbressers this PR introduced the base "audit logger" in Kibana, it's relying upon the current Kibana logging infrastructure. There's some "structure" to the logs themselves, but they aren't using ECS or anything like that. |
* partial implementation for OLS Phase 1 * Allow Saved Objects Client to be wrapped * Add placeholder "kibana.namespace" configuration property * revert changes to saved objects client * Remove circular dependency * Removing namespace setting, we're using xpack.security.rbac.application * Adding config.getDefault * Expose SavedObjectsClientProvider on the server for easy plugin consumption * migrate x-pack changes into kibana * Beginning to use the ES APIs to insert/check privileges (#18645) * Beginning to use the ES APIs to insert/check privileges * Removing todo comment, I think we're good with the current check * Adding ability to edit kibana application privileges * Introducing DEFAULT_RESOURCE constant * Removing unused arguments when performing saved objects auth check * Performing bulkCreate auth more efficiently * Throwing error in SavedObjectClient.find if type isn't provided * Fixing Reporting and removing errant console.log * Introducing a separate hasPrivileges "service" * Adding tests and fleshing out the has privileges "service" * Fixing error message * You can now edit whatever roles you want * We're gonna throw the find error in another PR * Changing conflicting version detection to work when user has no application privileges * Throwing correct error when user is forbidden * Removing unused interceptor * Adding warning if they're editing a role with application privileges we can't edit * Fixing filter... * Beginning to only update privileges when they need to be * More tests * One more test... * Restricting the rbac application name that can be chosen * Removing DEFAULT_RESOURCE check * Supporting 1024 characters for the role name * Renaming some variables, fixing issue with role w/ no kibana privileges * Throwing decorated general error when appropriate * Fixing test description * Dedent does nothing... * Renaming some functions * Adding built-in types and alphabetizing (#19306) * Filtering out non-default resource Kibana privileges (#19321) * Removing unused file * Adding kibana_rbac_dashboard_only_user to dashboard only mode roles (#19511) * Adding create default roles test (#19505) * RBAC - SecurityAuditLogger (#19571) * Manually porting over the AuditLogger for use within the security audit logger * HasPrivileges now returns the user from the request * Has privileges returns username from privilegeCheck * Adding first eventType to the security audit logger * Adding authorization success message * Logging arguments when authorization success * Fixing test description * Logging args during audit failures * RBAC Integration Tests (#19647) * Porting over the saved objects tests, a bunch are failing, I believe because security is preventing the requests * Running saved objects tests with rbac and xsrf disabled * Adding users * BulkGet now tests under 3 users * Adding create tests * Adding delete tests * Adding find tests * Adding get tests * Adding bulkGet forbidden tests * Adding not a kibana user tests * Update tests * Renaming the actions/privileges to be closer to the functions on the saved object client itself * Cleaning up tests and removing without index tests I'm considering the without index tests to be out of scope for the RBAC API testing, and we already have unit coverage for these and integration coverage via the OSS Saved Objects API tests. * Fixing misspelling * Fixing "conflicts" after merging master * Removing some white-space differences * Deleting files that got left behind in a merge * Adding the RBAC API Integration Tests * SavedObjectClient.find filtering (#19708) * Adding ability to specify filters when calling the repository * Implementing find filtering * Revert "Adding ability to specify filters when calling the repository" This reverts commit 9da30a1. * Adding integration tests for find filtering * Adding forbidden auth logging * Adding asserts to make sure some audit log isn't used * Adding more audit log specific tests * Necessarly is not a work, unfortunately * Fixing test * More descriptive name than "result" * Better unauthorized find message? * Adding getTypes tests * Trying to isolate cause of rbac test failures * Adding .toLowerCase() to work around capitalization issue * No longer exposing the auditLogger, we don't need it like that right now * Removing some unused code * Removing defaultSettings from test that doesn't utilize them * Fixing misspelling * Don't need an explicit login privilege when we have them all * Removing unused code, fixing misspelling, adding comment * Putting a file back * No longer creating the roles on start-up (#19799) * Removing kibana_rbac_dashboard_only_user from dashboard only role defaults * Fixing small issue with editing Kibana privileges * [RBAC Phase 1] - Update application privileges when XPack license changes (#19839) * Adding start to supporting basic license and switching to plat/gold * Initialize application privilages on XPack license change * restore mirror_status_and_initialize * additional tests and peer review updates * Introducing watchStatusAndLicenseToInitialize * Adding some tests * One more test * Even better tests * Removing unused mirrorStatusAndInitialize * Throwing an error if the wrong status function is called * RBAC Legacy Fallback (#19818) * Basic implementation, rather sloppy * Cleaning stuff up a bit * Beginning to write tests, going to refactor how we build the privileges * Making the buildPrivilegesMap no longer return application name as the main key * Using real privileges since we need to use them for the legacy fallback * Adding more tests * Fixing spelling * Fixing test description * Fixing comment description * Adding similar line breaks in the has privilege calls * No more settings * No more rbac enabled setting, we just do RBAC * Using describe to cleanup the test cases * Logging deprecations when using the legacy fallback * Cleaning up a bit... * Using the privilegeMap for the legacy fallback tests * Now with even less duplication * Removing stray `rbacEnabled` from angularjs * Fixing checkLicenses tests since we added RBAC * [Flaky Test] - wait for page load to complete (#19895) @kobelb this seems unrelated to our RBAC Phase 1 work, but I was able to consistently reproduce this on my machine. * [Flaky Test] Fixes flaky role test (#19899) Here's a fix for the latest flaky test @kobelb * Now with even easier repository access * Sample was including login/version privileges, which was occasionally (#19915) causing issues that were really hard to replicate * Dynamic types (#19925) No more hard-coded types! This will make it so that plugins that register their own mappings just transparently work. * start to address feedback * Fix RBAC Phase 1 merge from master (#20226) This updates RBAC Phase 1 to work against the latest master. Specifically: 1. Removes `xpack_main`'s `registerLicenseChangeCallback`, which we introduced in `security-app-privs`, in favor of `onLicenseInfoChange`, which was recently added to master 2. Updated `x-pack/plugins/security/server/lib/watch_status_and_license_to_initialize.js` to be compliant with rxjs v6 * Retrying initialize 20 times with a scaling backoff (#20297) * Retrying initialize 20 times with a scaling backoff * Logging error when we are registering the privileges * Alternate legacy fallback (#20322) * Beginning to use alternate callWithRequest fallback * Only use legacy fallback when user has "some" privileges on index * Logging useLegacyFallback when there's an authorization failure * Adding tests, logging failure during find no types fallback * Switching to using an enum instead of success/useLegacyFallback * Using _execute to share some of the structure * Moving comment to where it belongs * No longer audit logging when we use the legacy fallback * Setting the status to red on the first error then continually (#20343) initializing * Renaming get*Privilege to get*Action * Adding "instance" to alert about other application privileges * Revising some of the naming for the edit roles screen * One more edit role variable renamed * hasPrivileges is now checkPrivileges * Revising check_license tests * Adding 2 more privileges tests * Moving the other _find method to be near his friend * Spelling "returning" correctly, whoops * Adding Privileges tests * tests for Elasticsearch's privileges APIs * Switching the hard-coded resource from 'default' to * * Throw error before we execute a POST privilege call that won't work * Resolving issue when initially registering privileges * Logging legacy fallback deprecation warning on login (#20493) * Logging legacy fallback deprecation on login * Consolidation the privileges/authorization folder * Exposing rudimentary authorization service and fixing authenticate tests * Moving authorization services configuration to initAuthorization * Adding "actions" service exposed by the authorization * Fixing misspelling * Removing invalid and unused exports * Adding note about only adding privileges * Calling it initAuthorizationService * Throwing explicit validation error in actions.getSavedObjectAction * Deep freezing authorization service * Adding deepFreeze tests * Checking privileges in one call and cleaning up tests * Deriving application from Kibana index (#20614) * Specifying the application on the "authorization service" * Moving watchStatusAndLicenseToInitialize to be below initAuthorizationService * Using short-hand propery assignment * Validate ES has_privileges response before trusting it (#20682) * validate elasticsearch has_privileges response before trusting it * address feedback * Removing unused setting * Public Role APIs (#20732) * Beginning to work on external role management APIs * Refactoring GET tests and adding more permutations * Adding test for excluding other resources * Adding get role tests * Splitting out the endpoints, or else it's gonna get overwhelming * Splitting out the post and delete actions * Beginning to work on POST and the tests * Posting the updated role * Adding update tests * Modifying the UI to use the new public APIs * Removing internal roles API * Moving the rbac api integration setup tests to use the public role apis * Testing field_security and query * Adding create role tests * We can't update the transient_metadata... * Removing debugger * Update and delete tests * Returning a 204 when POSTing a Role. * Switching POST to PUT and roles to role * We don't need the rbacApplication client-side anymore * Adding delete route tests * Using not found instead of not acceptable, as that's more likely * Only allowing us to PUT known Kibana privileges * Removing transient_metadata * Removing one letter variable names * Using PUT instead of POST when saving roles * Fixing broken tests * Adding setting to allow the user to turn off the legacy fallback (#20766) * Pulling the version from the kibana server * Deleting unused file * Add API integration tests for roles with index and app privileges (#21033) * Rbac phase1 functional UI tests (#20949) * rbac functional tests * changes to the test file * RBAC_functional test * incorporating review feedback * slight modification to the addPriv() to cover all tests * removed the @ in secure roles and perm file in the describe block and made it look more relevant * Fixing role management API from users * Set a timeout when we try/catch a find, so it doesn't pause a long time * Changing the way we detect if a user is reserved for the ftr * Skipping flaky test
* partial implementation for OLS Phase 1 * Allow Saved Objects Client to be wrapped * Add placeholder "kibana.namespace" configuration property * revert changes to saved objects client * Remove circular dependency * Removing namespace setting, we're using xpack.security.rbac.application * Adding config.getDefault * Expose SavedObjectsClientProvider on the server for easy plugin consumption * migrate x-pack changes into kibana * Beginning to use the ES APIs to insert/check privileges (elastic#18645) * Beginning to use the ES APIs to insert/check privileges * Removing todo comment, I think we're good with the current check * Adding ability to edit kibana application privileges * Introducing DEFAULT_RESOURCE constant * Removing unused arguments when performing saved objects auth check * Performing bulkCreate auth more efficiently * Throwing error in SavedObjectClient.find if type isn't provided * Fixing Reporting and removing errant console.log * Introducing a separate hasPrivileges "service" * Adding tests and fleshing out the has privileges "service" * Fixing error message * You can now edit whatever roles you want * We're gonna throw the find error in another PR * Changing conflicting version detection to work when user has no application privileges * Throwing correct error when user is forbidden * Removing unused interceptor * Adding warning if they're editing a role with application privileges we can't edit * Fixing filter... * Beginning to only update privileges when they need to be * More tests * One more test... * Restricting the rbac application name that can be chosen * Removing DEFAULT_RESOURCE check * Supporting 1024 characters for the role name * Renaming some variables, fixing issue with role w/ no kibana privileges * Throwing decorated general error when appropriate * Fixing test description * Dedent does nothing... * Renaming some functions * Adding built-in types and alphabetizing (elastic#19306) * Filtering out non-default resource Kibana privileges (elastic#19321) * Removing unused file * Adding kibana_rbac_dashboard_only_user to dashboard only mode roles (elastic#19511) * Adding create default roles test (elastic#19505) * RBAC - SecurityAuditLogger (elastic#19571) * Manually porting over the AuditLogger for use within the security audit logger * HasPrivileges now returns the user from the request * Has privileges returns username from privilegeCheck * Adding first eventType to the security audit logger * Adding authorization success message * Logging arguments when authorization success * Fixing test description * Logging args during audit failures * RBAC Integration Tests (elastic#19647) * Porting over the saved objects tests, a bunch are failing, I believe because security is preventing the requests * Running saved objects tests with rbac and xsrf disabled * Adding users * BulkGet now tests under 3 users * Adding create tests * Adding delete tests * Adding find tests * Adding get tests * Adding bulkGet forbidden tests * Adding not a kibana user tests * Update tests * Renaming the actions/privileges to be closer to the functions on the saved object client itself * Cleaning up tests and removing without index tests I'm considering the without index tests to be out of scope for the RBAC API testing, and we already have unit coverage for these and integration coverage via the OSS Saved Objects API tests. * Fixing misspelling * Fixing "conflicts" after merging master * Removing some white-space differences * Deleting files that got left behind in a merge * Adding the RBAC API Integration Tests * SavedObjectClient.find filtering (elastic#19708) * Adding ability to specify filters when calling the repository * Implementing find filtering * Revert "Adding ability to specify filters when calling the repository" This reverts commit 9da30a1. * Adding integration tests for find filtering * Adding forbidden auth logging * Adding asserts to make sure some audit log isn't used * Adding more audit log specific tests * Necessarly is not a work, unfortunately * Fixing test * More descriptive name than "result" * Better unauthorized find message? * Adding getTypes tests * Trying to isolate cause of rbac test failures * Adding .toLowerCase() to work around capitalization issue * No longer exposing the auditLogger, we don't need it like that right now * Removing some unused code * Removing defaultSettings from test that doesn't utilize them * Fixing misspelling * Don't need an explicit login privilege when we have them all * Removing unused code, fixing misspelling, adding comment * Putting a file back * No longer creating the roles on start-up (elastic#19799) * Removing kibana_rbac_dashboard_only_user from dashboard only role defaults * Fixing small issue with editing Kibana privileges * [RBAC Phase 1] - Update application privileges when XPack license changes (elastic#19839) * Adding start to supporting basic license and switching to plat/gold * Initialize application privilages on XPack license change * restore mirror_status_and_initialize * additional tests and peer review updates * Introducing watchStatusAndLicenseToInitialize * Adding some tests * One more test * Even better tests * Removing unused mirrorStatusAndInitialize * Throwing an error if the wrong status function is called * RBAC Legacy Fallback (elastic#19818) * Basic implementation, rather sloppy * Cleaning stuff up a bit * Beginning to write tests, going to refactor how we build the privileges * Making the buildPrivilegesMap no longer return application name as the main key * Using real privileges since we need to use them for the legacy fallback * Adding more tests * Fixing spelling * Fixing test description * Fixing comment description * Adding similar line breaks in the has privilege calls * No more settings * No more rbac enabled setting, we just do RBAC * Using describe to cleanup the test cases * Logging deprecations when using the legacy fallback * Cleaning up a bit... * Using the privilegeMap for the legacy fallback tests * Now with even less duplication * Removing stray `rbacEnabled` from angularjs * Fixing checkLicenses tests since we added RBAC * [Flaky Test] - wait for page load to complete (elastic#19895) @kobelb this seems unrelated to our RBAC Phase 1 work, but I was able to consistently reproduce this on my machine. * [Flaky Test] Fixes flaky role test (elastic#19899) Here's a fix for the latest flaky test @kobelb * Now with even easier repository access * Sample was including login/version privileges, which was occasionally (elastic#19915) causing issues that were really hard to replicate * Dynamic types (elastic#19925) No more hard-coded types! This will make it so that plugins that register their own mappings just transparently work. * start to address feedback * Fix RBAC Phase 1 merge from master (elastic#20226) This updates RBAC Phase 1 to work against the latest master. Specifically: 1. Removes `xpack_main`'s `registerLicenseChangeCallback`, which we introduced in `security-app-privs`, in favor of `onLicenseInfoChange`, which was recently added to master 2. Updated `x-pack/plugins/security/server/lib/watch_status_and_license_to_initialize.js` to be compliant with rxjs v6 * Retrying initialize 20 times with a scaling backoff (elastic#20297) * Retrying initialize 20 times with a scaling backoff * Logging error when we are registering the privileges * Alternate legacy fallback (elastic#20322) * Beginning to use alternate callWithRequest fallback * Only use legacy fallback when user has "some" privileges on index * Logging useLegacyFallback when there's an authorization failure * Adding tests, logging failure during find no types fallback * Switching to using an enum instead of success/useLegacyFallback * Using _execute to share some of the structure * Moving comment to where it belongs * No longer audit logging when we use the legacy fallback * Setting the status to red on the first error then continually (elastic#20343) initializing * Renaming get*Privilege to get*Action * Adding "instance" to alert about other application privileges * Revising some of the naming for the edit roles screen * One more edit role variable renamed * hasPrivileges is now checkPrivileges * Revising check_license tests * Adding 2 more privileges tests * Moving the other _find method to be near his friend * Spelling "returning" correctly, whoops * Adding Privileges tests * tests for Elasticsearch's privileges APIs * Switching the hard-coded resource from 'default' to * * Throw error before we execute a POST privilege call that won't work * Resolving issue when initially registering privileges * Logging legacy fallback deprecation warning on login (elastic#20493) * Logging legacy fallback deprecation on login * Consolidation the privileges/authorization folder * Exposing rudimentary authorization service and fixing authenticate tests * Moving authorization services configuration to initAuthorization * Adding "actions" service exposed by the authorization * Fixing misspelling * Removing invalid and unused exports * Adding note about only adding privileges * Calling it initAuthorizationService * Throwing explicit validation error in actions.getSavedObjectAction * Deep freezing authorization service * Adding deepFreeze tests * Checking privileges in one call and cleaning up tests * Deriving application from Kibana index (elastic#20614) * Specifying the application on the "authorization service" * Moving watchStatusAndLicenseToInitialize to be below initAuthorizationService * Using short-hand propery assignment * Validate ES has_privileges response before trusting it (elastic#20682) * validate elasticsearch has_privileges response before trusting it * address feedback * Removing unused setting * Public Role APIs (elastic#20732) * Beginning to work on external role management APIs * Refactoring GET tests and adding more permutations * Adding test for excluding other resources * Adding get role tests * Splitting out the endpoints, or else it's gonna get overwhelming * Splitting out the post and delete actions * Beginning to work on POST and the tests * Posting the updated role * Adding update tests * Modifying the UI to use the new public APIs * Removing internal roles API * Moving the rbac api integration setup tests to use the public role apis * Testing field_security and query * Adding create role tests * We can't update the transient_metadata... * Removing debugger * Update and delete tests * Returning a 204 when POSTing a Role. * Switching POST to PUT and roles to role * We don't need the rbacApplication client-side anymore * Adding delete route tests * Using not found instead of not acceptable, as that's more likely * Only allowing us to PUT known Kibana privileges * Removing transient_metadata * Removing one letter variable names * Using PUT instead of POST when saving roles * Fixing broken tests * Adding setting to allow the user to turn off the legacy fallback (elastic#20766) * Pulling the version from the kibana server * Deleting unused file * Add API integration tests for roles with index and app privileges (elastic#21033) * Rbac phase1 functional UI tests (elastic#20949) * rbac functional tests * changes to the test file * RBAC_functional test * incorporating review feedback * slight modification to the addPriv() to cover all tests * removed the @ in secure roles and perm file in the describe block and made it look more relevant * Fixing role management API from users * Set a timeout when we try/catch a find, so it doesn't pause a long time * Changing the way we detect if a user is reserved for the ftr * Skipping flaky test
* partial implementation for OLS Phase 1 * Allow Saved Objects Client to be wrapped * Add placeholder "kibana.namespace" configuration property * revert changes to saved objects client * Remove circular dependency * Removing namespace setting, we're using xpack.security.rbac.application * Adding config.getDefault * Expose SavedObjectsClientProvider on the server for easy plugin consumption * migrate x-pack changes into kibana * Beginning to use the ES APIs to insert/check privileges (#18645) * Beginning to use the ES APIs to insert/check privileges * Removing todo comment, I think we're good with the current check * Adding ability to edit kibana application privileges * Introducing DEFAULT_RESOURCE constant * Removing unused arguments when performing saved objects auth check * Performing bulkCreate auth more efficiently * Throwing error in SavedObjectClient.find if type isn't provided * Fixing Reporting and removing errant console.log * Introducing a separate hasPrivileges "service" * Adding tests and fleshing out the has privileges "service" * Fixing error message * You can now edit whatever roles you want * We're gonna throw the find error in another PR * Changing conflicting version detection to work when user has no application privileges * Throwing correct error when user is forbidden * Removing unused interceptor * Adding warning if they're editing a role with application privileges we can't edit * Fixing filter... * Beginning to only update privileges when they need to be * More tests * One more test... * Restricting the rbac application name that can be chosen * Removing DEFAULT_RESOURCE check * Supporting 1024 characters for the role name * Renaming some variables, fixing issue with role w/ no kibana privileges * Throwing decorated general error when appropriate * Fixing test description * Dedent does nothing... * Renaming some functions * Adding built-in types and alphabetizing (#19306) * Filtering out non-default resource Kibana privileges (#19321) * Removing unused file * Adding kibana_rbac_dashboard_only_user to dashboard only mode roles (#19511) * Adding create default roles test (#19505) * RBAC - SecurityAuditLogger (#19571) * Manually porting over the AuditLogger for use within the security audit logger * HasPrivileges now returns the user from the request * Has privileges returns username from privilegeCheck * Adding first eventType to the security audit logger * Adding authorization success message * Logging arguments when authorization success * Fixing test description * Logging args during audit failures * RBAC Integration Tests (#19647) * Porting over the saved objects tests, a bunch are failing, I believe because security is preventing the requests * Running saved objects tests with rbac and xsrf disabled * Adding users * BulkGet now tests under 3 users * Adding create tests * Adding delete tests * Adding find tests * Adding get tests * Adding bulkGet forbidden tests * Adding not a kibana user tests * Update tests * Renaming the actions/privileges to be closer to the functions on the saved object client itself * Cleaning up tests and removing without index tests I'm considering the without index tests to be out of scope for the RBAC API testing, and we already have unit coverage for these and integration coverage via the OSS Saved Objects API tests. * Fixing misspelling * Fixing "conflicts" after merging master * Removing some white-space differences * Deleting files that got left behind in a merge * Adding the RBAC API Integration Tests * SavedObjectClient.find filtering (#19708) * Adding ability to specify filters when calling the repository * Implementing find filtering * Revert "Adding ability to specify filters when calling the repository" This reverts commit 9da30a1. * Adding integration tests for find filtering * Adding forbidden auth logging * Adding asserts to make sure some audit log isn't used * Adding more audit log specific tests * Necessarly is not a work, unfortunately * Fixing test * More descriptive name than "result" * Better unauthorized find message? * Adding getTypes tests * Trying to isolate cause of rbac test failures * Adding .toLowerCase() to work around capitalization issue * No longer exposing the auditLogger, we don't need it like that right now * Removing some unused code * Removing defaultSettings from test that doesn't utilize them * Fixing misspelling * Don't need an explicit login privilege when we have them all * Removing unused code, fixing misspelling, adding comment * Putting a file back * No longer creating the roles on start-up (#19799) * Removing kibana_rbac_dashboard_only_user from dashboard only role defaults * Fixing small issue with editing Kibana privileges * [RBAC Phase 1] - Update application privileges when XPack license changes (#19839) * Adding start to supporting basic license and switching to plat/gold * Initialize application privilages on XPack license change * restore mirror_status_and_initialize * additional tests and peer review updates * Introducing watchStatusAndLicenseToInitialize * Adding some tests * One more test * Even better tests * Removing unused mirrorStatusAndInitialize * Throwing an error if the wrong status function is called * RBAC Legacy Fallback (#19818) * Basic implementation, rather sloppy * Cleaning stuff up a bit * Beginning to write tests, going to refactor how we build the privileges * Making the buildPrivilegesMap no longer return application name as the main key * Using real privileges since we need to use them for the legacy fallback * Adding more tests * Fixing spelling * Fixing test description * Fixing comment description * Adding similar line breaks in the has privilege calls * No more settings * No more rbac enabled setting, we just do RBAC * Using describe to cleanup the test cases * Logging deprecations when using the legacy fallback * Cleaning up a bit... * Using the privilegeMap for the legacy fallback tests * Now with even less duplication * Removing stray `rbacEnabled` from angularjs * Fixing checkLicenses tests since we added RBAC * [Flaky Test] - wait for page load to complete (#19895) @kobelb this seems unrelated to our RBAC Phase 1 work, but I was able to consistently reproduce this on my machine. * [Flaky Test] Fixes flaky role test (#19899) Here's a fix for the latest flaky test @kobelb * Now with even easier repository access * Sample was including login/version privileges, which was occasionally (#19915) causing issues that were really hard to replicate * Dynamic types (#19925) No more hard-coded types! This will make it so that plugins that register their own mappings just transparently work. * start to address feedback * Fix RBAC Phase 1 merge from master (#20226) This updates RBAC Phase 1 to work against the latest master. Specifically: 1. Removes `xpack_main`'s `registerLicenseChangeCallback`, which we introduced in `security-app-privs`, in favor of `onLicenseInfoChange`, which was recently added to master 2. Updated `x-pack/plugins/security/server/lib/watch_status_and_license_to_initialize.js` to be compliant with rxjs v6 * Retrying initialize 20 times with a scaling backoff (#20297) * Retrying initialize 20 times with a scaling backoff * Logging error when we are registering the privileges * Alternate legacy fallback (#20322) * Beginning to use alternate callWithRequest fallback * Only use legacy fallback when user has "some" privileges on index * Logging useLegacyFallback when there's an authorization failure * Adding tests, logging failure during find no types fallback * Switching to using an enum instead of success/useLegacyFallback * Using _execute to share some of the structure * Moving comment to where it belongs * No longer audit logging when we use the legacy fallback * Setting the status to red on the first error then continually (#20343) initializing * Renaming get*Privilege to get*Action * Adding "instance" to alert about other application privileges * Revising some of the naming for the edit roles screen * One more edit role variable renamed * hasPrivileges is now checkPrivileges * Revising check_license tests * Adding 2 more privileges tests * Moving the other _find method to be near his friend * Spelling "returning" correctly, whoops * Adding Privileges tests * tests for Elasticsearch's privileges APIs * Switching the hard-coded resource from 'default' to * * Throw error before we execute a POST privilege call that won't work * Resolving issue when initially registering privileges * Logging legacy fallback deprecation warning on login (#20493) * Logging legacy fallback deprecation on login * Consolidation the privileges/authorization folder * Exposing rudimentary authorization service and fixing authenticate tests * Moving authorization services configuration to initAuthorization * Adding "actions" service exposed by the authorization * Fixing misspelling * Removing invalid and unused exports * Adding note about only adding privileges * Calling it initAuthorizationService * Throwing explicit validation error in actions.getSavedObjectAction * Deep freezing authorization service * Adding deepFreeze tests * Checking privileges in one call and cleaning up tests * Deriving application from Kibana index (#20614) * Specifying the application on the "authorization service" * Moving watchStatusAndLicenseToInitialize to be below initAuthorizationService * Using short-hand propery assignment * Validate ES has_privileges response before trusting it (#20682) * validate elasticsearch has_privileges response before trusting it * address feedback * Removing unused setting * Public Role APIs (#20732) * Beginning to work on external role management APIs * Refactoring GET tests and adding more permutations * Adding test for excluding other resources * Adding get role tests * Splitting out the endpoints, or else it's gonna get overwhelming * Splitting out the post and delete actions * Beginning to work on POST and the tests * Posting the updated role * Adding update tests * Modifying the UI to use the new public APIs * Removing internal roles API * Moving the rbac api integration setup tests to use the public role apis * Testing field_security and query * Adding create role tests * We can't update the transient_metadata... * Removing debugger * Update and delete tests * Returning a 204 when POSTing a Role. * Switching POST to PUT and roles to role * We don't need the rbacApplication client-side anymore * Adding delete route tests * Using not found instead of not acceptable, as that's more likely * Only allowing us to PUT known Kibana privileges * Removing transient_metadata * Removing one letter variable names * Using PUT instead of POST when saving roles * Fixing broken tests * Adding setting to allow the user to turn off the legacy fallback (#20766) * Pulling the version from the kibana server * Deleting unused file * Add API integration tests for roles with index and app privileges (#21033) * Rbac phase1 functional UI tests (#20949) * rbac functional tests * changes to the test file * RBAC_functional test * incorporating review feedback * slight modification to the addPriv() to cover all tests * removed the @ in secure roles and perm file in the describe block and made it look more relevant * Fixing role management API from users * Set a timeout when we try/catch a find, so it doesn't pause a long time * Changing the way we detect if a user is reserved for the ftr * Skipping flaky test
This adds the basis of the SecurityAuditLogger which is only currently being used by RBAC to log saved objects authorization events.
The following are some examples of the messages that the audit logger logs: