Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fleet][Endpoint][RBAC V2] Update fleet router and config to allow API access via RBAC controls #145361

Merged
Merged
Show file tree
Hide file tree
Changes from 67 commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
7aa1a1a
update fleet router config to allow route access independent of tags
ashokaditya Nov 29, 2022
e8001ad
update fleet router config to allow route access independent of tags
ashokaditya Nov 29, 2022
48ec615
Merge remote-tracking branch 'ashokaditya/task/olm-policy-list-api-rb…
paul-tavares Nov 30, 2022
927ede7
update fleet router config to allow route access independent of tags
ashokaditya Nov 29, 2022
9f38ca4
rename
ashokaditya Dec 1, 2022
10316bf
simplify logic
ashokaditya Dec 1, 2022
1898a6e
cleanup
ashokaditya Dec 2, 2022
eecb740
fix tests
ashokaditya Dec 2, 2022
3dd26ca
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 5, 2022
70eb960
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 5, 2022
4e8a4d6
Merge remote-tracking branch 'ashokaditya/task/olm-policy-list-api-rb…
paul-tavares Dec 5, 2022
50d2547
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 5, 2022
608a025
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 5, 2022
69bafc4
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 5, 2022
032cda6
Retrieve correct SO client when Authz are NOT granted via Fleet privi…
paul-tavares Dec 5, 2022
9f66a3c
Merge remote-tracking branch 'ashokaditya/task/olm-policy-list-api-rb…
paul-tavares Dec 5, 2022
4311cb1
update types and use `calculateRouteAuthz`
ashokaditya Dec 6, 2022
543f8b6
update authzwrapper to use `calculateRouteAuthz`
ashokaditya Dec 6, 2022
cc3d358
Update logic in `calculateRouteAuthz()` so that each package privileg…
paul-tavares Dec 6, 2022
e85e3d7
Revert changes to agent policy and epm APIs (keeping scope small)
paul-tavares Dec 6, 2022
3e1220d
backout change to epm categories route handler
paul-tavares Dec 6, 2022
d498dbd
Merge remote-tracking branch 'upstream/main' into pr/ash/task/olm-pol…
paul-tavares Dec 6, 2022
60f3555
Refactor package policy routes and Plugin route context to use `calcu…
paul-tavares Dec 6, 2022
0706c5b
Adjusted package policy service to use `calculateRouteAuthz`
paul-tavares Dec 6, 2022
1122ba7
Remove unused code from `security.ts`
paul-tavares Dec 6, 2022
7c32db2
Refactor: re-organized server security module
paul-tavares Dec 6, 2022
45d6eca
Move fleet router tests to its own file
paul-tavares Dec 6, 2022
4af47dd
Fix mocks and security tests
paul-tavares Dec 6, 2022
8678da6
add to tests for `calculateRouteAuthz()`
paul-tavares Dec 6, 2022
d5cf2a4
Update package policy routes to get SO object from `fleet.getSoClient()`
paul-tavares Dec 7, 2022
cd6820e
unify logic for gating access
ashokaditya Dec 7, 2022
f871d16
fix type check
ashokaditya Dec 7, 2022
946d5fd
fix route path pattern match
ashokaditya Dec 7, 2022
f2f22ab
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 7, 2022
5fcc5cb
fix mock path after refactor
ashokaditya Dec 7, 2022
1e767fa
use main route pattern
ashokaditya Dec 7, 2022
414c6d7
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 7, 2022
4c99e0a
parse routePath instead
ashokaditya Dec 7, 2022
4c6340a
parse routePath instead
ashokaditya Dec 7, 2022
056dd0c
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 7, 2022
1010911
limit access to requested packages
ashokaditya Dec 7, 2022
283cbae
limit access to data based on allowed packages
ashokaditya Dec 7, 2022
c21450a
package specific list results - part 2
ashokaditya Dec 8, 2022
adb2e51
Merge remote-tracking branch 'ashokaditya/task/olm-policy-list-api-rb…
paul-tavares Dec 8, 2022
6a11eca
Update error message for Update package policy handler
paul-tavares Dec 8, 2022
959a0f1
Re-implement package policy api handlers data validation against allo…
paul-tavares Dec 8, 2022
4bd3933
add `shouldHandlePostAuthRequest()` check back into fleet router midd…
paul-tavares Dec 8, 2022
051b2a2
Add check for kibana security enabled to route handler wrapper
paul-tavares Dec 8, 2022
ed0f650
Merge remote-tracking branch 'upstream/main' into pr/ash/task/olm-pol…
paul-tavares Dec 9, 2022
b659972
Add supertest logger for better messages
paul-tavares Dec 10, 2022
0a34ae6
Add `supertest` middleware in bulk_upgrade tests
paul-tavares Dec 11, 2022
f98858c
Trying again: code to capture failing test API response body
paul-tavares Dec 11, 2022
0d31e32
remove redundant `registerOnPostAuth`
ashokaditya Dec 12, 2022
c347c0f
update epm bulk_upgrade FTR tests
ashokaditya Dec 12, 2022
1b76cdd
log router access denied
ashokaditya Dec 12, 2022
972e8d5
cleanup
ashokaditya Dec 12, 2022
60fa9e3
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 12, 2022
2886e3d
use internalSoClient
ashokaditya Dec 13, 2022
39cea43
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 13, 2022
a186363
move internalSoClient out of `epm`
ashokaditya Dec 13, 2022
68e366a
cleanup logic for limitedToPackages
ashokaditya Dec 13, 2022
1650a0c
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 13, 2022
2f9c229
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 13, 2022
3a5c7c0
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 14, 2022
442d72a
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 14, 2022
e04a741
undo changes to `api/fleet/check-permissions`
ashokaditya Dec 14, 2022
044e166
cleanup
ashokaditya Dec 14, 2022
26b2b46
Merge branch 'main' into task/olm-policy-list-api-rbac-4926
ashokaditya Dec 14, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion x-pack/plugins/fleet/common/services/routes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ export const settingsRoutesService = {
};

export const appRoutesService = {
getCheckPermissionsPath: (fleetServerSetup?: boolean) => APP_API_ROUTES.CHECK_PERMISSIONS_PATTERN,
getCheckPermissionsPath: () => APP_API_ROUTES.CHECK_PERMISSIONS_PATTERN,
getRegenerateServiceTokenPath: () => APP_API_ROUTES.GENERATE_SERVICE_TOKEN_PATTERN,
postHealthCheckPath: () => APP_API_ROUTES.HEALTH_CHECK_PATTERN,
};
Expand Down
5 changes: 2 additions & 3 deletions x-pack/plugins/fleet/server/mocks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,9 @@ export const createFleetRequestHandlerContextMock = (): jest.Mocked<
asCurrentUser: createPackagePolicyServiceMock(),
asInternalUser: createPackagePolicyServiceMock(),
},
epm: {
internalSoClient: savedObjectsClientMock.create(),
},
internalSoClient: savedObjectsClientMock.create(),
spaceId: 'default',
limitedToPackages: undefined,
};
};

Expand Down
46 changes: 34 additions & 12 deletions x-pack/plugins/fleet/server/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ import type { ExperimentalFeatures } from '../common/experimental_features';
import { INTEGRATIONS_PLUGIN_ID } from '../common';
import { parseExperimentalConfigValue } from '../common/experimental_features';

import {
getRouteRequiredAuthz,
makeRouterWithFleetAuthz,
calculateRouteAuthz,
getAuthzFromRequest,
} from './services/security';

import {
PLUGIN_ID,
OUTPUT_SAVED_OBJECT_TYPE,
Expand Down Expand Up @@ -93,7 +100,6 @@ import {
fetchAgentsUsage,
fetchFleetUsage,
} from './collectors/register';
import { getAuthzFromRequest, makeRouterWithFleetAuthz } from './routes/security';
import { FleetArtifactsClient } from './services/artifacts';
import type { FleetRouter } from './types/request_context';
import { TelemetryEventsSender } from './telemetry/sender';
Expand Down Expand Up @@ -337,7 +343,19 @@ export class FleetPlugin
PLUGIN_ID,
async (context, request) => {
const plugin = this;
const esClient = (await context.core).elasticsearch.client;
const coreContext = await context.core;
const authz = await getAuthzFromRequest(request);
const esClient = coreContext.elasticsearch.client;

const routeRequiredAuthz = getRouteRequiredAuthz(request.route.method, request.route.path);
const routeAuthz = routeRequiredAuthz
? calculateRouteAuthz(authz, routeRequiredAuthz)
: undefined;

const getInternalSoClient = (): SavedObjectsClientContract =>
appContextService
.getSavedObjects()
.getScopedClient(request, { excludedExtensions: [SECURITY_EXTENSION_ID] });

return {
get agentClient() {
Expand All @@ -356,18 +374,21 @@ export class FleetPlugin
asInternalUser: service.asInternalUser,
};
},
authz: await getAuthzFromRequest(request),
epm: {
authz,

get internalSoClient() {
// Use a lazy getter to avoid constructing this client when not used by a request handler
get internalSoClient() {
return appContextService
.getSavedObjects()
.getScopedClient(request, { excludedExtensions: [SECURITY_EXTENSION_ID] });
},
return getInternalSoClient();
},
get spaceId() {
return deps.spaces.spacesService.getSpaceId(request);
},

get limitedToPackages() {
if (routeAuthz && routeAuthz.granted) {
return routeAuthz.scopeDataToPackages;
}
},
};
}
);
Expand All @@ -384,10 +405,11 @@ export class FleetPlugin
// Only some endpoints require superuser so we pass a raw IRouter here

// For all the routes we enforce the user to have role superuser
const { router: fleetAuthzRouter, onPostAuthHandler: fleetAuthzOnPostAuthHandler } =
makeRouterWithFleetAuthz(router);
const fleetAuthzRouter = makeRouterWithFleetAuthz(
router,
this.initializerContext.logger.get('fleet_authz_router')
);

core.http.registerOnPostAuth(fleetAuthzOnPostAuthHandler);
registerRoutes(fleetAuthzRouter, config);

this.telemetryEventsSender.setup(deps.telemetry);
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/fleet/server/routes/agent/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
* 2.0.
*/

import type { FleetAuthzRouter } from '../../services/security';

import { AGENT_API_ROUTES } from '../../constants';
import {
GetAgentsRequestSchema,
Expand All @@ -30,7 +32,6 @@ import {
} from '../../types';
import * as AgentService from '../../services/agents';
import type { FleetConfigType } from '../..';
import type { FleetAuthzRouter } from '../security';

import { PostBulkUpdateAgentTagsRequestSchema } from '../../types/rest_spec/agent';

Expand Down
10 changes: 5 additions & 5 deletions x-pack/plugins/fleet/server/routes/agent_policy/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ export const getAgentPoliciesHandler: FleetRequestHandler<
> = async (context, request, response) => {
const coreContext = await context.core;
const fleetContext = await context.fleet;
const soClient = fleetContext.epm.internalSoClient;
const soClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const { full: withPackagePolicies = false, ...restOfQuery } = request.query;
try {
Expand Down Expand Up @@ -98,7 +98,7 @@ export const bulkGetAgentPoliciesHandler: FleetRequestHandler<
> = async (context, request, response) => {
const coreContext = await context.core;
const fleetContext = await context.fleet;
const soClient = fleetContext.epm.internalSoClient;
const soClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const { full: withPackagePolicies = false, ignoreMissing = false, ids } = request.body;
try {
Expand Down Expand Up @@ -158,7 +158,7 @@ export const createAgentPolicyHandler: FleetRequestHandler<
> = async (context, request, response) => {
const coreContext = await context.core;
const fleetContext = await context.fleet;
const soClient = fleetContext.epm.internalSoClient;
const soClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const user = (await appContextService.getSecurity()?.authc.getCurrentUser(request)) || undefined;
const withSysMonitoring = request.query.sys_monitoring ?? false;
Expand Down Expand Up @@ -276,7 +276,7 @@ export const getFullAgentPolicy: FleetRequestHandler<
TypeOf<typeof GetFullAgentPolicyRequestSchema.query>
> = async (context, request, response) => {
const fleetContext = await context.fleet;
const soClient = fleetContext.epm.internalSoClient;
const soClient = fleetContext.internalSoClient;

if (request.query.kubernetes === true) {
try {
Expand Down Expand Up @@ -332,7 +332,7 @@ export const downloadFullAgentPolicy: FleetRequestHandler<
TypeOf<typeof GetFullAgentPolicyRequestSchema.query>
> = async (context, request, response) => {
const fleetContext = await context.fleet;
const soClient = fleetContext.epm.internalSoClient;
const soClient = fleetContext.internalSoClient;
const {
params: { agentPolicyId },
} = request;
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/fleet/server/routes/agent_policy/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
* 2.0.
*/

import type { FleetAuthzRouter } from '../../services/security';

import { AGENT_POLICY_API_ROUTES } from '../../constants';
import {
GetAgentPoliciesRequestSchema,
Expand All @@ -17,7 +19,6 @@ import {
GetK8sManifestRequestSchema,
BulkGetAgentPoliciesRequestSchema,
} from '../../types';
import type { FleetAuthzRouter } from '../security';

import { K8S_API_ROUTES } from '../../../common/constants';

Expand Down
4 changes: 2 additions & 2 deletions x-pack/plugins/fleet/server/routes/app/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@
import type { RequestHandler } from '@kbn/core/server';
import type { TypeOf } from '@kbn/config-schema';

import type { FleetAuthzRouter } from '../../services/security';

import { APP_API_ROUTES } from '../../constants';
import { appContextService } from '../../services';
import type { CheckPermissionsResponse, GenerateServiceTokenResponse } from '../../../common/types';
import { defaultFleetErrorHandler, GenerateServiceTokenError } from '../../errors';
import type { FleetAuthzRouter } from '../security';
import type { FleetRequestHandler } from '../../types';
import { CheckPermissionsRequestSchema } from '../../types';

Expand Down Expand Up @@ -90,7 +91,6 @@ export const registerRoutes = (router: FleetAuthzRouter) => {
{
path: APP_API_ROUTES.CHECK_PERMISSIONS_PATTERN,
validate: CheckPermissionsRequestSchema,
options: { tags: [] },
},
getCheckPermissionsHandler
);
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/fleet/server/routes/data_streams/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
* 2.0.
*/

import type { FleetAuthzRouter } from '../../services/security';

import { DATA_STREAM_API_ROUTES } from '../../constants';
import type { FleetAuthzRouter } from '../security';

import { getListHandler } from './handlers';

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
* 2.0.
*/

import type { FleetAuthzRouter } from '../../services/security';

import { DOWNLOAD_SOURCE_API_ROUTES } from '../../constants';
import {
getDownloadSourcesRequestSchema,
Expand All @@ -13,7 +15,6 @@ import {
PostDownloadSourcesRequestSchema,
DeleteDownloadSourcesRequestSchema,
} from '../../types';
import type { FleetAuthzRouter } from '../security';

import {
getDownloadSourcesHandler,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
* 2.0.
*/

import type { FleetAuthzRouter } from '../../services/security';

import { ENROLLMENT_API_KEY_ROUTES } from '../../constants';
import {
GetEnrollmentAPIKeysRequestSchema,
GetOneEnrollmentAPIKeyRequestSchema,
DeleteEnrollmentAPIKeyRequestSchema,
PostEnrollmentAPIKeyRequestSchema,
} from '../../types';
import type { FleetAuthzRouter } from '../security';

import {
getEnrollmentApiKeysHandler,
Expand Down
20 changes: 10 additions & 10 deletions x-pack/plugins/fleet/server/routes/epm/handlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export const getListHandler: FleetRequestHandler<
TypeOf<typeof GetPackagesRequestSchema.query>
> = async (context, request, response) => {
try {
const savedObjectsClient = (await context.fleet).epm.internalSoClient;
const savedObjectsClient = (await context.fleet).internalSoClient;
const res = await getPackages({
savedObjectsClient,
...request.query,
Expand All @@ -112,7 +112,7 @@ export const getLimitedListHandler: FleetRequestHandler<
undefined
> = async (context, request, response) => {
try {
const savedObjectsClient = (await context.fleet).epm.internalSoClient;
const savedObjectsClient = (await context.fleet).internalSoClient;
const res = await getLimitedPackages({
savedObjectsClient,
prerelease: request.query.prerelease,
Expand All @@ -134,7 +134,7 @@ export const getFileHandler: FleetRequestHandler<
> = async (context, request, response) => {
try {
const { pkgName, pkgVersion, filePath } = request.params;
const savedObjectsClient = (await context.fleet).epm.internalSoClient;
const savedObjectsClient = (await context.fleet).internalSoClient;
const installation = await getInstallation({ savedObjectsClient, pkgName });
const useLocalFile = pkgVersion === installation?.version;

Expand Down Expand Up @@ -208,7 +208,7 @@ export const getInfoHandler: FleetRequestHandler<
TypeOf<typeof GetInfoRequestSchema.query>
> = async (context, request, response) => {
try {
const savedObjectsClient = (await context.fleet).epm.internalSoClient;
const savedObjectsClient = (await context.fleet).internalSoClient;
const { pkgName, pkgVersion } = request.params;
const { ignoreUnverified = false, full = false, prerelease } = request.query;
if (pkgVersion && !semverValid(pkgVersion)) {
Expand Down Expand Up @@ -237,7 +237,7 @@ export const updatePackageHandler: FleetRequestHandler<
TypeOf<typeof UpdatePackageRequestSchema.body>
> = async (context, request, response) => {
try {
const savedObjectsClient = (await context.fleet).epm.internalSoClient;
const savedObjectsClient = (await context.fleet).internalSoClient;
const { pkgName } = request.params;

const res = await updatePackage({ savedObjectsClient, pkgName, ...request.body });
Expand All @@ -256,7 +256,7 @@ export const getStatsHandler: FleetRequestHandler<
> = async (context, request, response) => {
try {
const { pkgName } = request.params;
const savedObjectsClient = (await context.fleet).epm.internalSoClient;
const savedObjectsClient = (await context.fleet).internalSoClient;
const body: GetStatsResponse = {
response: await getPackageUsageStats({ savedObjectsClient, pkgName }),
};
Expand All @@ -273,7 +273,7 @@ export const installPackageFromRegistryHandler: FleetRequestHandler<
> = async (context, request, response) => {
const coreContext = await context.core;
const fleetContext = await context.fleet;
const savedObjectsClient = fleetContext.epm.internalSoClient;
const savedObjectsClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const { pkgName, pkgVersion } = request.params;

Expand Down Expand Up @@ -323,7 +323,7 @@ export const bulkInstallPackagesFromRegistryHandler: FleetRequestHandler<
> = async (context, request, response) => {
const coreContext = await context.core;
const fleetContext = await context.fleet;
const savedObjectsClient = fleetContext.epm.internalSoClient;
const savedObjectsClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const spaceId = fleetContext.spaceId;
const bulkInstalledResponses = await bulkInstallPackages({
Expand Down Expand Up @@ -354,7 +354,7 @@ export const installPackageByUploadHandler: FleetRequestHandler<
}
const coreContext = await context.core;
const fleetContext = await context.fleet;
const savedObjectsClient = fleetContext.epm.internalSoClient;
const savedObjectsClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const contentType = request.headers['content-type'] as string; // from types it could also be string[] or undefined but this is checked later
const archiveBuffer = Buffer.from(request.body);
Expand Down Expand Up @@ -390,7 +390,7 @@ export const deletePackageHandler: FleetRequestHandler<
const { pkgName, pkgVersion } = request.params;
const coreContext = await context.core;
const fleetContext = await context.fleet;
const savedObjectsClient = fleetContext.epm.internalSoClient;
const savedObjectsClient = fleetContext.internalSoClient;
const esClient = coreContext.elasticsearch.client.asInternalUser;
const res = await removeInstallation({
savedObjectsClient,
Expand Down
3 changes: 2 additions & 1 deletion x-pack/plugins/fleet/server/routes/epm/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import type { IKibanaResponse } from '@kbn/core/server';

import type { FleetAuthzRouter } from '../../services/security';

import type {
DeletePackageResponse,
GetInfoResponse,
Expand All @@ -32,7 +34,6 @@ import {
UpdatePackageRequestSchema,
UpdatePackageRequestSchemaDeprecated,
} from '../../types';
import type { FleetAuthzRouter } from '../security';

import {
getCategoriesHandler,
Expand Down
4 changes: 2 additions & 2 deletions x-pack/plugins/fleet/server/routes/fleet_proxies/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,15 @@
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/
import type { FleetAuthzRouter } from '../../services/security';

import { FLEET_PROXY_API_ROUTES } from '../../../common/constants';
import {
GetOneFleetProxyRequestSchema,
PostFleetProxyRequestSchema,
PutFleetProxyRequestSchema,
} from '../../types';

import type { FleetAuthzRouter } from '../security';

import {
getAllFleetProxyHandler,
postFleetProxyHandler,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
* 2.0.
*/

import type { FleetAuthzRouter } from '../../services/security';

import { FLEET_SERVER_HOST_API_ROUTES } from '../../../common/constants';
import {
GetAllFleetServerHostRequestSchema,
Expand All @@ -13,8 +15,6 @@ import {
PutFleetServerHostRequestSchema,
} from '../../types';

import type { FleetAuthzRouter } from '../security';

import {
deleteFleetServerPolicyHandler,
getAllFleetServerPolicyHandler,
Expand Down
Loading