Skip to content

Commit 79713f5

Browse files
Restrict Connector APIs to manage/monitor_connector privileges (#119863)
* Reapply "Restrict Connector APIs to manage/monitor_connector privileges (#119389)" (#119833) This reverts commit e0cefb8. * Update docs/changelog/119863.yaml * Update docs/changelog/119863.yaml * Update changelog * Fix changelog --------- Co-authored-by: Elastic Machine <[email protected]>
1 parent 9a11f13 commit 79713f5

37 files changed

+224
-221
lines changed

docs/changelog/119863.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
pr: 119863
2+
summary: Restrict Connector APIs to manage/monitor_connector privileges
3+
area: Extract&Transform
4+
type: breaking
5+
issues: []
6+
breaking:
7+
title: Restrict Connector APIs to manage/monitor_connector privileges
8+
area: REST API
9+
details: Connector APIs now enforce the manage_connector and monitor_connector privileges (introduced in 8.15), replacing the previous reliance on index-level permissions for .elastic-connectors and .elastic-connectors-sync-jobs in API calls.
10+
impact: Connector APIs now require manage_connector and monitor_connector privileges
11+
notable: false

x-pack/plugin/ent-search/qa/rest/roles.yml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ admin:
44
- manage_behavioral_analytics
55
- manage
66
- monitor
7+
- manage_connector
78
indices:
89
- names: [
910
# indices and search applications
1011
"test-*",
1112
"another-test-search-application",
12-
".elastic-connectors-v1",
13-
".elastic-connectors-sync-jobs-v1"
1413
]
1514
privileges: [ "manage", "write", "read" ]
1615

@@ -20,16 +19,15 @@ user:
2019
- manage_api_key
2120
- read_connector_secrets
2221
- write_connector_secrets
22+
- monitor_connector
2323
indices:
2424
- names: [
2525
"test-index1",
2626
"test-search-application",
2727
"test-search-application-1",
2828
"test-search-application-with-aggs",
2929
"test-search-application-with-list",
30-
"test-search-application-with-list-invalid",
31-
".elastic-connectors-v1",
32-
".elastic-connectors-sync-jobs-v1"
30+
"test-search-application-with-list-invalid"
3331
]
3432
privileges: [ "read" ]
3533

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/ConnectorIndexService.java

Lines changed: 130 additions & 91 deletions
Large diffs are not rendered by default.

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ConnectorActionRequest.java

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,19 @@
99

1010
import org.elasticsearch.action.ActionRequest;
1111
import org.elasticsearch.action.ActionRequestValidationException;
12-
import org.elasticsearch.action.IndicesRequest;
13-
import org.elasticsearch.action.support.IndicesOptions;
1412
import org.elasticsearch.cluster.metadata.MetadataCreateIndexService;
1513
import org.elasticsearch.common.io.stream.StreamInput;
1614
import org.elasticsearch.indices.InvalidIndexNameException;
17-
import org.elasticsearch.xpack.application.connector.ConnectorTemplateRegistry;
1815

1916
import java.io.IOException;
2017

2118
import static org.elasticsearch.action.ValidateActions.addValidationError;
2219
import static org.elasticsearch.xpack.application.connector.ConnectorTemplateRegistry.MANAGED_CONNECTOR_INDEX_PREFIX;
2320

2421
/**
25-
* Abstract base class for action requests targeting the connectors index. Implements {@link org.elasticsearch.action.IndicesRequest}
26-
* to ensure index-level privilege support. This class defines the connectors index as the target for all derived action requests.
22+
* Abstract base class for action requests targeting the connectors index.
2723
*/
28-
public abstract class ConnectorActionRequest extends ActionRequest implements IndicesRequest {
24+
public abstract class ConnectorActionRequest extends ActionRequest {
2925

3026
public ConnectorActionRequest() {
3127
super();
@@ -78,14 +74,4 @@ public ActionRequestValidationException validateManagedConnectorIndexPrefix(
7874
}
7975
return validationException;
8076
}
81-
82-
@Override
83-
public String[] indices() {
84-
return new String[] { ConnectorTemplateRegistry.CONNECTOR_INDEX_NAME_PATTERN };
85-
}
86-
87-
@Override
88-
public IndicesOptions indicesOptions() {
89-
return IndicesOptions.lenientExpandHidden();
90-
}
9177
}

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/DeleteConnectorAction.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.elasticsearch.xcontent.ToXContentObject;
1919
import org.elasticsearch.xcontent.XContentBuilder;
2020
import org.elasticsearch.xcontent.XContentParser;
21-
import org.elasticsearch.xpack.application.connector.ConnectorTemplateRegistry;
2221

2322
import java.io.IOException;
2423
import java.util.Objects;
@@ -28,7 +27,7 @@
2827

2928
public class DeleteConnectorAction {
3029

31-
public static final String NAME = "indices:data/write/xpack/connector/delete";
30+
public static final String NAME = "cluster:admin/xpack/connector/delete";
3231
public static final ActionType<AcknowledgedResponse> INSTANCE = new ActionType<>(NAME);
3332

3433
private DeleteConnectorAction() {/* no instances */}
@@ -71,14 +70,6 @@ public boolean shouldDeleteSyncJobs() {
7170
return deleteSyncJobs;
7271
}
7372

74-
@Override
75-
public String[] indices() {
76-
// When deleting a connector, corresponding sync jobs can also be deleted
77-
return new String[] {
78-
ConnectorTemplateRegistry.CONNECTOR_SYNC_JOBS_INDEX_NAME_PATTERN,
79-
ConnectorTemplateRegistry.CONNECTOR_INDEX_NAME_PATTERN };
80-
}
81-
8273
@Override
8374
public void writeTo(StreamOutput out) throws IOException {
8475
super.writeTo(out);

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/GetConnectorAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
public class GetConnectorAction {
3232

33-
public static final String NAME = "indices:data/read/xpack/connector/get";
33+
public static final String NAME = "cluster:admin/xpack/connector/get";
3434
public static final ActionType<GetConnectorAction.Response> INSTANCE = new ActionType<>(NAME);
3535

3636
private GetConnectorAction() {/* no instances */}

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/ListConnectorAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
public class ListConnectorAction {
3737

38-
public static final String NAME = "indices:data/read/xpack/connector/list";
38+
public static final String NAME = "cluster:admin/xpack/connector/list";
3939
public static final ActionType<ListConnectorAction.Response> INSTANCE = new ActionType<>(NAME);
4040

4141
private ListConnectorAction() {/* no instances */}

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PostConnectorAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
public class PostConnectorAction {
2727

28-
public static final String NAME = "indices:data/write/xpack/connector/post";
28+
public static final String NAME = "cluster:admin/xpack/connector/post";
2929
public static final ActionType<ConnectorCreateActionResponse> INSTANCE = new ActionType<>(NAME);
3030

3131
private PostConnectorAction() {/* no instances */}

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/PutConnectorAction.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import org.elasticsearch.action.ActionRequestValidationException;
1111
import org.elasticsearch.action.ActionType;
12-
import org.elasticsearch.action.IndicesRequest;
1312
import org.elasticsearch.common.Strings;
1413
import org.elasticsearch.common.io.stream.StreamInput;
1514
import org.elasticsearch.common.io.stream.StreamOutput;
@@ -27,12 +26,12 @@
2726

2827
public class PutConnectorAction {
2928

30-
public static final String NAME = "indices:data/write/xpack/connector/put";
29+
public static final String NAME = "cluster:admin/xpack/connector/put";
3130
public static final ActionType<ConnectorCreateActionResponse> INSTANCE = new ActionType<>(NAME);
3231

3332
private PutConnectorAction() {/* no instances */}
3433

35-
public static class Request extends ConnectorActionRequest implements IndicesRequest, ToXContentObject {
34+
public static class Request extends ConnectorActionRequest implements ToXContentObject {
3635

3736
@Nullable
3837
private final String connectorId;

x-pack/plugin/ent-search/src/main/java/org/elasticsearch/xpack/application/connector/action/UpdateConnectorActiveFilteringAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
public class UpdateConnectorActiveFilteringAction {
2424

25-
public static final String NAME = "indices:data/write/xpack/connector/update_filtering/activate";
25+
public static final String NAME = "cluster:admin/xpack/connector/update_filtering/activate";
2626
public static final ActionType<ConnectorUpdateActionResponse> INSTANCE = new ActionType<>(NAME);
2727

2828
private UpdateConnectorActiveFilteringAction() {/* no instances */}

0 commit comments

Comments
 (0)