-
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
Fix enable and disable API to still work when AAD is out of sync #56634
Fix enable and disable API to still work when AAD is out of sync #56634
Conversation
Pinging @elastic/kibana-alerting-services (Team:Alerting Services) |
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 so far
expect(e.status).to.eql(404); | ||
} | ||
// Ensure AAD isn't broken | ||
await checkAAD({ |
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.
I guess AAD is now "fixed" (it was "broken" just above), because the enable()
call "fixed" it. Interesting. That seems fine for alerts, I wonder if it would end up being a security issue with actions, when we get to fixing it's related encryption key issues.
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, this scenario we're lucky. For actions, I believe all the secrets have to be passed in for any sort of update to the SO. We probably won't have this issue of loading the decrypted object beforehand in the actions client, I think.
…le-disable-alerts-broken-aad
💚 Build SucceededHistory
To update your PR or re-run it, just comment with: |
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.
I think we still need to call invalidateApiKey()
when enabling
@@ -395,12 +390,32 @@ export class AlertsClient { | |||
); | |||
const scheduledTask = await this.scheduleAlert(id, attributes.alertTypeId); | |||
await this.savedObjectsClient.update('alert', id, { scheduledTaskId: scheduledTask.id }); | |||
await this.invalidateApiKey({ apiKey: attributes.apiKey }); |
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.
In some cases we still need the invalidate. As-is, the code assumes that prior to calling enable()
no API key exists.
I tested this with detection rules, and this results in dangling API keys because sometimes an alert is updated before calling enable()
:
- Create a custom rule, with the rule disabled. This will call
create()
and generate an API keyk1
- Enable the rule
- calls
update()
, this creates a new API keyk2
and invalidates the old onek1
- calls
enable()
, which in this case creates a new keyk3
.k2
doesn't get invalidated.
- calls
Even after fixing #57036, if update()
is called before enable()
you will end up with a dangling key.
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.
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.
Fixed in f1367ec.
…m:mikecote/kibana into alerting/enable-disable-alerts-broken-aad
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 - thanks!
@elasticmachine merge upstream |
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
@elasticmachine merge upstream |
💚 Build SucceededHistory
To update your PR or re-run it, just comment with: |
…stic#56634) * Fix enable and disable API to still work when AAD is broken * Load SO once before fallback * Fix comment * Invalidate API key if any in enable API * Add missing integration test Co-authored-by: Elastic Machine <[email protected]>
* master: (34 commits) [Index management] Server-side NP ready (elastic#56829) Webhook action - make user and password secrets optional (elastic#56823) [DOCS] Removes reference to IRC (elastic#57245) [Monitoring] NP migration: Local angular module (elastic#51823) [SIEM] Adds ECS link to help menu (elastic#57104) Ensure http interceptors are shares across lifecycle methods (elastic#57150) [Remote clusters] Migrate server code out of legacy (elastic#56781) fixes render bug in alert list (elastic#57152) siem 7.6 updates (elastic#57169) Make the update alert API key API work when AAD is out of sync (elastic#56640) fix(NA): MaxListenersExceededWarning on getLoggerStream (elastic#57133) [Metrics UI] Setup commonly used time ranges in timepicker (elastic#56701) [Maps] set filter.meta.key to geoFieldName so query passes filterMatchesIndex when ignoreFilterIfFieldNotInIndex is true (elastic#56692) Create plugin mock for event log plugin (elastic#57048) fix ts error on master (elastic#57236) Don't create API key for disabled alerts when calling create API (elastic#57041) Fix enable and disable API to still work when AAD is out of sync (elastic#56634) [DOCS] Canvas embed objects (elastic#57156) Delete autocomplete namespace (elastic#57187) Security - Inject logout url (elastic#57201) ...
) (#57238) * Fix enable and disable API to still work when AAD is broken * Load SO once before fallback * Fix comment * Invalidate API key if any in enable API * Add missing integration test Co-authored-by: Elastic Machine <[email protected]> Co-authored-by: Elastic Machine <[email protected]>
Solves the enable and disable API for #56619.
In this PR, I'm allowing alerts to be enabled and disabled even when the AAD is out of sync. I'm also refactoring the enable and disable unit tests of the alerts client.
The code to invalidate API keys was previously at the wrong place (enable API) when it should of been at the disable API.