Skip to content

Commit

Permalink
Permissions required for stateful agentless integrations (#118644) (#…
Browse files Browse the repository at this point in the history
…119973)

Closes elastic/security-team#11102
Closes elastic/security-team#11104

This allows agentless integrations (via elastic/beats#41446, elastic/kibana#203810) to write to agentless-* indices. Each index is created on-demand by the filebeat client and kibana conditionally extends the API key permissions to allow writing to the index.

(cherry picked from commit 3c184b9)

# Conflicts:
#	docs/reference/rest-api/security/get-service-accounts.asciidoc
#	x-pack/plugin/security/qa/service-account/src/javaRestTest/java/org/elasticsearch/xpack/security/authc/service/ServiceAccountIT.java
#	x-pack/plugin/security/src/main/java/org/elasticsearch/xpack/security/authc/service/ElasticServiceAccounts.java
  • Loading branch information
orestisfl authored Jan 13, 2025
1 parent 84faef4 commit b38748e
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 1 deletion.
15 changes: 15 additions & 0 deletions docs/reference/rest-api/security/get-service-accounts.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,21 @@ GET /_security/service/elastic/fleet-server
"auto_configure"
],
"allow_restricted_indices": false
},
{
"names": [
"agentless-*",
],
"privileges": [
"read",
"write",
"monitor",
"create_index",
"auto_configure",
"maintenance",
"view_index_metadata"
],
"allow_restricted_indices": false
}
],
"applications": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -808,6 +808,7 @@ protected Set<String> preserveILMPolicyIds() {
"profiling-60-days",
"profiling-60-days@lifecycle",
"synthetics",
"agentless",
"synthetics@lifecycle",
"traces@lifecycle",
"7-days-default",
Expand Down Expand Up @@ -2260,6 +2261,7 @@ protected static boolean isXPackTemplate(String name) {
case "metrics-tsdb-settings":
case "metrics-mappings":
case "synthetics":
case "agentless":
case "synthetics-settings":
case "synthetics-mappings":
case ".snapshot-blob-cache":
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"template": {
"mappings": {
"properties": {
"v": {
"type": "object",
"enabled": false
},
"updated_at": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
}
}
}
},
"_meta": {
"description": "default mappings for the agentless index template installed by x-pack",
"managed": true
},
"version": ${xpack.stack.template.version},
"deprecated": ${xpack.stack.template.deprecated}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"template": {
"settings": {
"index": {
"hidden": true
}
}
},
"_meta": {
"description": "default settings for the agentless index template installed by x-pack",
"managed": true
},
"version": ${xpack.stack.template.version},
"deprecated": ${xpack.stack.template.deprecated}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"index_patterns": ["agentless-*-*"],
"priority": 100,
"composed_of": [
"agentless@mappings",
"agentless@settings"
],
"allow_auto_create": true,
"_meta": {
"description": "default agentless template installed by x-pack",
"managed": true
},
"version": ${xpack.stack.template.version},
"deprecated": ${xpack.stack.template.deprecated}
}
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,21 @@ public class ServiceAccountIT extends ESRestTestCase {
"auto_configure"
],
"allow_restricted_indices": false
},
{
"names": [
"agentless-*"
],
"privileges": [
"read",
"write",
"monitor",
"create_index",
"auto_configure",
"maintenance",
"view_index_metadata"
],
"allow_restricted_indices": false
}
],
"applications": [ {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,13 @@ final class ElasticServiceAccounts {
// Fleet Server needs "read" privilege to be able to retrieve multi-agent docs
.privileges("read", "write", "create_index", "auto_configure")
.allowRestrictedIndices(false)
.build() },
.build(),
// Custom permissions required for stateful agentless integrations
RoleDescriptor.IndicesPrivileges.builder()
.indices("agentless-*")
.privileges("read", "write", "monitor", "create_index", "auto_configure", "maintenance", "view_index_metadata")
.allowRestrictedIndices(false)
.build(), },
new RoleDescriptor.ApplicationResourcePrivileges[] {
RoleDescriptor.ApplicationResourcePrivileges.builder()
.application("kibana-*")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,13 @@ public class StackTemplateRegistry extends IndexTemplateRegistry {
public static final String SYNTHETICS_ILM_POLICY_NAME = "synthetics@lifecycle";
public static final String SYNTHETICS_INDEX_TEMPLATE_NAME = "synthetics";

//////////////////////////////////////////////////////////
// Agentless components (for matching agentless-*-* indices)
//////////////////////////////////////////////////////////
public static final String AGENTLESS_MAPPINGS_COMPONENT_TEMPLATE_NAME = "agentless@mappings";
public static final String AGENTLESS_SETTINGS_COMPONENT_TEMPLATE_NAME = "agentless@settings";
public static final String AGENTLESS_INDEX_TEMPLATE_NAME = "agentless";

///////////////////////////////////
// Kibana reporting template
///////////////////////////////////
Expand Down Expand Up @@ -212,6 +219,20 @@ private Map<String, ComponentTemplate> loadComponentTemplateConfigs() {
TEMPLATE_VERSION_VARIABLE,
ADDITIONAL_TEMPLATE_VARIABLES
),
new IndexTemplateConfig(
AGENTLESS_MAPPINGS_COMPONENT_TEMPLATE_NAME,
"/[email protected]",
REGISTRY_VERSION,
TEMPLATE_VERSION_VARIABLE,
ADDITIONAL_TEMPLATE_VARIABLES
),
new IndexTemplateConfig(
AGENTLESS_SETTINGS_COMPONENT_TEMPLATE_NAME,
"/[email protected]",
REGISTRY_VERSION,
TEMPLATE_VERSION_VARIABLE,
ADDITIONAL_TEMPLATE_VARIABLES
),
new IndexTemplateConfig(
KIBANA_REPORTING_COMPONENT_TEMPLATE_NAME,
"/[email protected]",
Expand Down Expand Up @@ -300,6 +321,13 @@ protected Map<String, ComponentTemplate> getComponentTemplateConfigs() {
TEMPLATE_VERSION_VARIABLE,
ADDITIONAL_TEMPLATE_VARIABLES
),
new IndexTemplateConfig(
AGENTLESS_INDEX_TEMPLATE_NAME,
"/[email protected]",
REGISTRY_VERSION,
TEMPLATE_VERSION_VARIABLE,
ADDITIONAL_TEMPLATE_VARIABLES
),
new IndexTemplateConfig(
KIBANA_REPORTING_INDEX_TEMPLATE_NAME,
"/[email protected]",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,6 +430,8 @@ public void testSameOrHigherVersionTemplateNotUpgraded() {
versions.put(StackTemplateRegistry.METRICS_MAPPINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.SYNTHETICS_SETTINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.SYNTHETICS_MAPPINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.AGENTLESS_SETTINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.AGENTLESS_MAPPINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.KIBANA_REPORTING_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.TRACES_MAPPINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
versions.put(StackTemplateRegistry.TRACES_SETTINGS_COMPONENT_TEMPLATE_NAME, StackTemplateRegistry.REGISTRY_VERSION);
Expand Down Expand Up @@ -488,6 +490,14 @@ public void testSameOrHigherVersionTemplateNotUpgraded() {
StackTemplateRegistry.SYNTHETICS_MAPPINGS_COMPONENT_TEMPLATE_NAME,
StackTemplateRegistry.REGISTRY_VERSION + randomIntBetween(1, 1000)
);
versions.put(
StackTemplateRegistry.AGENTLESS_SETTINGS_COMPONENT_TEMPLATE_NAME,
StackTemplateRegistry.REGISTRY_VERSION + randomIntBetween(1, 1000)
);
versions.put(
StackTemplateRegistry.AGENTLESS_MAPPINGS_COMPONENT_TEMPLATE_NAME,
StackTemplateRegistry.REGISTRY_VERSION + randomIntBetween(1, 1000)
);
versions.put(
StackTemplateRegistry.KIBANA_REPORTING_COMPONENT_TEMPLATE_NAME,
StackTemplateRegistry.REGISTRY_VERSION + randomIntBetween(1, 1000)
Expand Down

0 comments on commit b38748e

Please sign in to comment.