Skip to content

Fixes bulk re-encryption for encrypted objects located in all spaces#217625

Merged
jeramysoucy merged 4 commits into
elastic:mainfrom
jeramysoucy:fix-eso-rotate-all-namespaces
Apr 14, 2025
Merged

Fixes bulk re-encryption for encrypted objects located in all spaces#217625
jeramysoucy merged 4 commits into
elastic:mainfrom
jeramysoucy:fix-eso-rotate-all-namespaces

Conversation

@jeramysoucy
Copy link
Copy Markdown
Contributor

@jeramysoucy jeramysoucy commented Apr 9, 2025

Closes #215534

Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved Objects Bulk Update API to re-encrypt objects. Bulk update supports an optional 'namespace' parameter, per-object, defining the space to access a specific object. This allows objects outside of the current space to be affected in the update operation. The Key Rotation service leverages this optional parameter for each object to ensure that the re-encryption operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces, the only value in the object's namespaces property is the ALL_NAMESPACES_STRING constant '*'. As this is not a valid single namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects that do not reside in all spaces. Objects that reside in all spaces can be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

Testing

  • Set the encrypted saved objects encryption key to a known value (either in kibana.yml or kibana.dev.yml). For example:
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 
  • Start ES & Kibana
  • You will need to set up a Fleet agent policy and create a synthetics location and monitor. The UI will guide you through this when you navigate to Observability -> Synthetics
  • Create a synthetics parameter, Observability -> Synthetics -> Settings, Global Parameters tab. Use anything for a value, but be sure to check the Share across spaces option.
  • Update the kibana config to change the encryption key, and use the old key as a decryption-only key
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" 
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"] 
  • Wait for Kibana to restart
  • Call the key rotation HTTP API as a privileged user (I just used the elastic superuser account)
    [you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param
  • Verify that 1 out of 1 objects were processed with 0 failures.
  • Repeat these steps from Main and note that 0 of 1 objects succeeded, and there is 1 failure

Release Note

Fixes an issue where the Saved Objects Rotate Encryption Key API would not affect sharable encrypted object types that exist in all spaces.

@jeramysoucy jeramysoucy added release_note:fix Team:Security Platform Security: Auth, Users, Roles, Spaces, Audit Logging, etc t// backport:all-open Backport to all branches that could still receive a release v9.1.0 labels Apr 9, 2025
@jeramysoucy jeramysoucy marked this pull request as ready for review April 10, 2025 15:31
@jeramysoucy jeramysoucy requested a review from a team as a code owner April 10, 2025 15:31
@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/kibana-security (Team:Security)

@elena-shostak elena-shostak self-requested a review April 11, 2025 10:54
Copy link
Copy Markdown
Contributor

@elena-shostak elena-shostak left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked locally with PR changes and on main, confirm that re-encryption works as expected with PR 👍

@jeramysoucy jeramysoucy enabled auto-merge (squash) April 14, 2025 17:48
@jeramysoucy jeramysoucy merged commit 1176625 into elastic:main Apr 14, 2025
9 checks passed
@kibanamachine
Copy link
Copy Markdown
Contributor

Starting backport for target branches: 7.17, 8.16, 8.17, 8.18, 8.x, 9.0

https://github.com/elastic/kibana/actions/runs/14453923693

@elasticmachine
Copy link
Copy Markdown
Contributor

💚 Build Succeeded

Metrics [docs]

✅ unchanged

History

@kibanamachine
Copy link
Copy Markdown
Contributor

💔 All backports failed

Status Branch Result
7.17 Backport failed because of merge conflicts

You might need to backport the following PRs to 7.17:
- Upgrade ESLint to v8 (#162309)
8.16 Backport failed because of merge conflicts
8.17 Backport failed because of merge conflicts
8.18 Backport failed because of merge conflicts
8.x Backport failed because of merge conflicts
9.0 Backport failed because of merge conflicts

Manual backport

To create the backport manually run:

node scripts/backport --pr 217625

Questions ?

Please refer to the Backport tool documentation

jeramysoucy added a commit to jeramysoucy/kibana that referenced this pull request Apr 14, 2025
…lastic#217625)

Closes elastic#215534

## Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved
Objects Bulk Update API to re-encrypt objects. Bulk update supports an
optional 'namespace' parameter, per-object, defining the space to access
a specific object. This allows objects outside of the current space to
be affected in the update operation. The Key Rotation service leverages
this optional parameter for each object to ensure that the re-encryption
operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces,
the only value in the object's namespaces property is the
`ALL_NAMESPACES_STRING` constant '*'. As this is not a valid single
namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects
that do not reside in all spaces. Objects that reside in all spaces can
be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

### Testing
- [x] Set the encrypted saved objects encryption key to a known value
(either in kibana.yml or kibana.dev.yml). For example:
```
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
```
- [x] Start ES & Kibana
- [x] You will need to set up a Fleet agent policy and create a
synthetics location and monitor. The UI will guide you through this when
you navigate to Observability -> Synthetics
- [x] Create a synthetics parameter, Observability -> Synthetics ->
Settings, Global Parameters tab. Use anything for a value, but be sure
to check the `Share across spaces` option.
- [x] Update the kibana config to change the encryption key, and use the
old key as a decryption-only key
```
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
```
- [x] Wait for Kibana to restart
- [x] Call the key rotation HTTP API as a privileged user (I just used
the `elastic` superuser account)

`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`
- [x] Verify that 1 out of 1 objects were processed with 0 failures.
- [x] Repeat these steps from Main and note that 0 of 1 objects
succeeded, and there is 1 failure

### Release Note
Fixes an issue where the Saved Objects Rotate Encryption Key API would
not affect sharable encrypted object types that exist in all spaces.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 1176625)

# Conflicts:
#	x-pack/platform/plugins/shared/encrypted_saved_objects/tsconfig.json
jeramysoucy added a commit to jeramysoucy/kibana that referenced this pull request Apr 14, 2025
…lastic#217625)

Closes elastic#215534

## Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved
Objects Bulk Update API to re-encrypt objects. Bulk update supports an
optional 'namespace' parameter, per-object, defining the space to access
a specific object. This allows objects outside of the current space to
be affected in the update operation. The Key Rotation service leverages
this optional parameter for each object to ensure that the re-encryption
operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces,
the only value in the object's namespaces property is the
`ALL_NAMESPACES_STRING` constant '*'. As this is not a valid single
namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects
that do not reside in all spaces. Objects that reside in all spaces can
be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

### Testing
- [x] Set the encrypted saved objects encryption key to a known value
(either in kibana.yml or kibana.dev.yml). For example:
```
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
```
- [x] Start ES & Kibana
- [x] You will need to set up a Fleet agent policy and create a
synthetics location and monitor. The UI will guide you through this when
you navigate to Observability -> Synthetics
- [x] Create a synthetics parameter, Observability -> Synthetics ->
Settings, Global Parameters tab. Use anything for a value, but be sure
to check the `Share across spaces` option.
- [x] Update the kibana config to change the encryption key, and use the
old key as a decryption-only key
```
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
```
- [x] Wait for Kibana to restart
- [x] Call the key rotation HTTP API as a privileged user (I just used
the `elastic` superuser account)

`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`
- [x] Verify that 1 out of 1 objects were processed with 0 failures.
- [x] Repeat these steps from Main and note that 0 of 1 objects
succeeded, and there is 1 failure

### Release Note
Fixes an issue where the Saved Objects Rotate Encryption Key API would
not affect sharable encrypted object types that exist in all spaces.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 1176625)

# Conflicts:
#	x-pack/platform/plugins/shared/encrypted_saved_objects/tsconfig.json
jeramysoucy added a commit to jeramysoucy/kibana that referenced this pull request Apr 14, 2025
…lastic#217625)

Closes elastic#215534

## Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved
Objects Bulk Update API to re-encrypt objects. Bulk update supports an
optional 'namespace' parameter, per-object, defining the space to access
a specific object. This allows objects outside of the current space to
be affected in the update operation. The Key Rotation service leverages
this optional parameter for each object to ensure that the re-encryption
operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces,
the only value in the object's namespaces property is the
`ALL_NAMESPACES_STRING` constant '*'. As this is not a valid single
namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects
that do not reside in all spaces. Objects that reside in all spaces can
be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

### Testing
- [x] Set the encrypted saved objects encryption key to a known value
(either in kibana.yml or kibana.dev.yml). For example:
```
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
```
- [x] Start ES & Kibana
- [x] You will need to set up a Fleet agent policy and create a
synthetics location and monitor. The UI will guide you through this when
you navigate to Observability -> Synthetics
- [x] Create a synthetics parameter, Observability -> Synthetics ->
Settings, Global Parameters tab. Use anything for a value, but be sure
to check the `Share across spaces` option.
- [x] Update the kibana config to change the encryption key, and use the
old key as a decryption-only key
```
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
```
- [x] Wait for Kibana to restart
- [x] Call the key rotation HTTP API as a privileged user (I just used
the `elastic` superuser account)

`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`
- [x] Verify that 1 out of 1 objects were processed with 0 failures.
- [x] Repeat these steps from Main and note that 0 of 1 objects
succeeded, and there is 1 failure

### Release Note
Fixes an issue where the Saved Objects Rotate Encryption Key API would
not affect sharable encrypted object types that exist in all spaces.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 1176625)

# Conflicts:
#	x-pack/platform/plugins/shared/encrypted_saved_objects/tsconfig.json
jeramysoucy added a commit to jeramysoucy/kibana that referenced this pull request Apr 14, 2025
…lastic#217625)

Closes elastic#215534

## Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved
Objects Bulk Update API to re-encrypt objects. Bulk update supports an
optional 'namespace' parameter, per-object, defining the space to access
a specific object. This allows objects outside of the current space to
be affected in the update operation. The Key Rotation service leverages
this optional parameter for each object to ensure that the re-encryption
operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces,
the only value in the object's namespaces property is the
`ALL_NAMESPACES_STRING` constant '*'. As this is not a valid single
namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects
that do not reside in all spaces. Objects that reside in all spaces can
be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

### Testing
- [x] Set the encrypted saved objects encryption key to a known value
(either in kibana.yml or kibana.dev.yml). For example:
```
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
```
- [x] Start ES & Kibana
- [x] You will need to set up a Fleet agent policy and create a
synthetics location and monitor. The UI will guide you through this when
you navigate to Observability -> Synthetics
- [x] Create a synthetics parameter, Observability -> Synthetics ->
Settings, Global Parameters tab. Use anything for a value, but be sure
to check the `Share across spaces` option.
- [x] Update the kibana config to change the encryption key, and use the
old key as a decryption-only key
```
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
```
- [x] Wait for Kibana to restart
- [x] Call the key rotation HTTP API as a privileged user (I just used
the `elastic` superuser account)

`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`
- [x] Verify that 1 out of 1 objects were processed with 0 failures.
- [x] Repeat these steps from Main and note that 0 of 1 objects
succeeded, and there is 1 failure

### Release Note
Fixes an issue where the Saved Objects Rotate Encryption Key API would
not affect sharable encrypted object types that exist in all spaces.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 1176625)

# Conflicts:
#	x-pack/plugins/encrypted_saved_objects/tsconfig.json
jeramysoucy added a commit to jeramysoucy/kibana that referenced this pull request Apr 14, 2025
…lastic#217625)

Closes elastic#215534

## Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved
Objects Bulk Update API to re-encrypt objects. Bulk update supports an
optional 'namespace' parameter, per-object, defining the space to access
a specific object. This allows objects outside of the current space to
be affected in the update operation. The Key Rotation service leverages
this optional parameter for each object to ensure that the re-encryption
operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces,
the only value in the object's namespaces property is the
`ALL_NAMESPACES_STRING` constant '*'. As this is not a valid single
namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects
that do not reside in all spaces. Objects that reside in all spaces can
be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

### Testing
- [x] Set the encrypted saved objects encryption key to a known value
(either in kibana.yml or kibana.dev.yml). For example:
```
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
```
- [x] Start ES & Kibana
- [x] You will need to set up a Fleet agent policy and create a
synthetics location and monitor. The UI will guide you through this when
you navigate to Observability -> Synthetics
- [x] Create a synthetics parameter, Observability -> Synthetics ->
Settings, Global Parameters tab. Use anything for a value, but be sure
to check the `Share across spaces` option.
- [x] Update the kibana config to change the encryption key, and use the
old key as a decryption-only key
```
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
```
- [x] Wait for Kibana to restart
- [x] Call the key rotation HTTP API as a privileged user (I just used
the `elastic` superuser account)

`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`
- [x] Verify that 1 out of 1 objects were processed with 0 failures.
- [x] Repeat these steps from Main and note that 0 of 1 objects
succeeded, and there is 1 failure

### Release Note
Fixes an issue where the Saved Objects Rotate Encryption Key API would
not affect sharable encrypted object types that exist in all spaces.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 1176625)

# Conflicts:
#	x-pack/plugins/encrypted_saved_objects/tsconfig.json
jeramysoucy added a commit to jeramysoucy/kibana that referenced this pull request Apr 14, 2025
…lastic#217625)

Closes elastic#215534

## Summary

The Encrypted Saved Objects Key Rotation service makes use of the Saved
Objects Bulk Update API to re-encrypt objects. Bulk update supports an
optional 'namespace' parameter, per-object, defining the space to access
a specific object. This allows objects outside of the current space to
be affected in the update operation. The Key Rotation service leverages
this optional parameter for each object to ensure that the re-encryption
operation is not limited to the current space.

However, should a multi-namespace encrypted object reside in all spaces,
the only value in the object's namespaces property is the
`ALL_NAMESPACES_STRING` constant '*'. As this is not a valid single
namespace, the Bulk Update operation will skip updating the object.

PR resolves the issue by only providing a object namespace for objects
that do not reside in all spaces. Objects that reside in all spaces can
be accessed from the current space without the need for an override.

This PR also updates unit tests to account for this case.

### Testing
- [x] Set the encrypted saved objects encryption key to a known value
(either in kibana.yml or kibana.dev.yml). For example:
```
xpack.encryptedSavedObjects:
  encryptionKey: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
```
- [x] Start ES & Kibana
- [x] You will need to set up a Fleet agent policy and create a
synthetics location and monitor. The UI will guide you through this when
you navigate to Observability -> Synthetics
- [x] Create a synthetics parameter, Observability -> Synthetics ->
Settings, Global Parameters tab. Use anything for a value, but be sure
to check the `Share across spaces` option.
- [x] Update the kibana config to change the encryption key, and use the
old key as a decryption-only key
```
xpack.encryptedSavedObjects:
  encryptionKey: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
  keyRotation:
    decryptionOnlyKeys: ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]
```
- [x] Wait for Kibana to restart
- [x] Call the key rotation HTTP API as a privileged user (I just used
the `elastic` superuser account)

`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`
- [x] Verify that 1 out of 1 objects were processed with 0 failures.
- [x] Repeat these steps from Main and note that 0 of 1 objects
succeeded, and there is 1 failure

### Release Note
Fixes an issue where the Saved Objects Rotate Encryption Key API would
not affect sharable encrypted object types that exist in all spaces.

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
(cherry picked from commit 1176625)

# Conflicts:
#	x-pack/platform/plugins/shared/encrypted_saved_objects/tsconfig.json
#	x-pack/plugins/encrypted_saved_objects/server/crypto/encryption_key_rotation_service.ts
@jeramysoucy
Copy link
Copy Markdown
Contributor Author

💚 All backports created successfully

Status Branch Result
9.0
8.x
8.18
8.17
8.16
7.17

Note: Successful backport PRs will be merged automatically after passing CI.

Questions ?

Please refer to the Backport tool documentation

jeramysoucy added a commit that referenced this pull request Apr 15, 2025
…paces (#217625) (#218177)

# Backport

This will backport the following commits from `main` to `9.0`:
- [Fixes bulk re-encryption for encrypted objects located in all spaces
(#217625)](#217625)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Jeramy
Soucy","email":"jeramy.soucy@elastic.co"},"sourceCommit":{"committedDate":"2025-04-14T19:20:38Z","message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Security","backport:all-open","v9.1.0"],"title":"Fixes
bulk re-encryption for encrypted objects located in all
spaces","number":217625,"url":"https://github.com/elastic/kibana/pull/217625","mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217625","number":217625,"mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
jeramysoucy added a commit that referenced this pull request Apr 15, 2025
…paces (#217625) (#218178)

# Backport

This will backport the following commits from `main` to `8.x`:
- [Fixes bulk re-encryption for encrypted objects located in all spaces
(#217625)](#217625)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Jeramy
Soucy","email":"jeramy.soucy@elastic.co"},"sourceCommit":{"committedDate":"2025-04-14T19:20:38Z","message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Security","backport:all-open","v9.1.0"],"title":"Fixes
bulk re-encryption for encrypted objects located in all
spaces","number":217625,"url":"https://github.com/elastic/kibana/pull/217625","mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217625","number":217625,"mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
jeramysoucy added a commit that referenced this pull request Apr 15, 2025
…spaces (#217625) (#218179)

# Backport

This will backport the following commits from `main` to `8.18`:
- [Fixes bulk re-encryption for encrypted objects located in all spaces
(#217625)](#217625)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Jeramy
Soucy","email":"jeramy.soucy@elastic.co"},"sourceCommit":{"committedDate":"2025-04-14T19:20:38Z","message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Security","backport:all-open","v9.1.0"],"title":"Fixes
bulk re-encryption for encrypted objects located in all
spaces","number":217625,"url":"https://github.com/elastic/kibana/pull/217625","mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217625","number":217625,"mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
jeramysoucy added a commit that referenced this pull request Apr 15, 2025
…spaces (#217625) (#218180)

# Backport

This will backport the following commits from `main` to `8.17`:
- [Fixes bulk re-encryption for encrypted objects located in all spaces
(#217625)](#217625)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Jeramy
Soucy","email":"jeramy.soucy@elastic.co"},"sourceCommit":{"committedDate":"2025-04-14T19:20:38Z","message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Security","backport:all-open","v9.1.0"],"title":"Fixes
bulk re-encryption for encrypted objects located in all
spaces","number":217625,"url":"https://github.com/elastic/kibana/pull/217625","mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217625","number":217625,"mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
jeramysoucy added a commit that referenced this pull request Apr 15, 2025
…spaces (#217625) (#218181)

# Backport

This will backport the following commits from `main` to `8.16`:
- [Fixes bulk re-encryption for encrypted objects located in all spaces
(#217625)](#217625)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Jeramy
Soucy","email":"jeramy.soucy@elastic.co"},"sourceCommit":{"committedDate":"2025-04-14T19:20:38Z","message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Security","backport:all-open","v9.1.0"],"title":"Fixes
bulk re-encryption for encrypted objects located in all
spaces","number":217625,"url":"https://github.com/elastic/kibana/pull/217625","mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217625","number":217625,"mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}}]}]
BACKPORT-->

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
@mistic
Copy link
Copy Markdown
Contributor

mistic commented Apr 15, 2025

This PR didn't make it into the latest BC. Updating the labels.

jeramysoucy added a commit that referenced this pull request Apr 15, 2025
…spaces (#217625) (#218182)

# Backport

This will backport the following commits from `main` to `7.17`:
- [Fixes bulk re-encryption for encrypted objects located in all spaces
(#217625)](#217625)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Jeramy
Soucy","email":"jeramy.soucy@elastic.co"},"sourceCommit":{"committedDate":"2025-04-14T19:20:38Z","message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:fix","Team:Security","backport:all-open","v9.1.0"],"title":"Fixes
bulk re-encryption for encrypted objects located in all
spaces","number":217625,"url":"https://github.com/elastic/kibana/pull/217625","mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}},"sourceBranch":"main","suggestedTargetBranches":[],"targetPullRequestStates":[{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/217625","number":217625,"mergeCommit":{"message":"Fixes
bulk re-encryption for encrypted objects located in all spaces
(#217625)\n\nCloses #215534\n\n## Summary\n\nThe Encrypted Saved Objects
Key Rotation service makes use of the Saved\nObjects Bulk Update API to
re-encrypt objects. Bulk update supports an\noptional 'namespace'
parameter, per-object, defining the space to access\na specific object.
This allows objects outside of the current space to\nbe affected in the
update operation. The Key Rotation service leverages\nthis optional
parameter for each object to ensure that the re-encryption\noperation is
not limited to the current space.\n\nHowever, should a multi-namespace
encrypted object reside in all spaces,\nthe only value in the object's
namespaces property is the\n`ALL_NAMESPACES_STRING` constant '*'. As
this is not a valid single\nnamespace, the Bulk Update operation will
skip updating the object.\n\nPR resolves the issue by only providing a
object namespace for objects\nthat do not reside in all spaces. Objects
that reside in all spaces can\nbe accessed from the current space
without the need for an override.\n\nThis PR also updates unit tests to
account for this case.\n\n### Testing\n- [x] Set the encrypted saved
objects encryption key to a known value\n(either in kibana.yml or
kibana.dev.yml). For example:\n```\nxpack.encryptedSavedObjects:\n
encryptionKey: \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\" \n```\n- [x] Start
ES & Kibana\n- [x] You will need to set up a Fleet agent policy and
create a\nsynthetics location and monitor. The UI will guide you through
this when\nyou navigate to Observability -> Synthetics\n- [x] Create a
synthetics parameter, Observability -> Synthetics ->\nSettings, Global
Parameters tab. Use anything for a value, but be sure\nto check the
`Share across spaces` option.\n- [x] Update the kibana config to change
the encryption key, and use the\nold key as a decryption-only
key\n```\nxpack.encryptedSavedObjects:\n encryptionKey:
\"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\" \n keyRotation:\n
decryptionOnlyKeys: [\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"] \n```\n- [x]
Wait for Kibana to restart\n- [x] Call the key rotation HTTP API as a
privileged user (I just used\nthe `elastic` superuser
account)\n\n`[you_kibana_endpoint]/api/encrypted_saved_objects/_rotate_key?type=synthetics-param`\n-
[x] Verify that 1 out of 1 objects were processed with 0 failures.\n-
[x] Repeat these steps from Main and note that 0 of 1
objects\nsucceeded, and there is 1 failure\n\n### Release Note\nFixes an
issue where the Saved Objects Rotate Encryption Key API would\nnot
affect sharable encrypted object types that exist in all
spaces.\n\n---------\n\nCo-authored-by: kibanamachine
<42973632+kibanamachine@users.noreply.github.com>","sha":"1176625dcaf8ec8ca4e4aa0b1324279ab0f2def3"}}]}]
BACKPORT-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:all-open Backport to all branches that could still receive a release release_note:fix Team:Security Platform Security: Auth, Users, Roles, Spaces, Audit Logging, etc t// v7.17.29 v8.16.7 v8.17.6 v8.18.1 v8.19.0 v9.0.1 v9.1.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

synthetics-param with "Share across spaces" cannot be re-encrypted

5 participants