@rad-security/mcp-server 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +151 -0
  2. package/dist/client.d.ts +21 -0
  3. package/dist/client.js +102 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +480 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/operations/audit.d.ts +31 -0
  9. package/dist/operations/audit.js +55 -0
  10. package/dist/operations/audit.js.map +1 -0
  11. package/dist/operations/cloud-inventory.d.ts +70 -0
  12. package/dist/operations/cloud-inventory.js +61 -0
  13. package/dist/operations/cloud-inventory.js.map +1 -0
  14. package/dist/operations/clusters.d.ts +21 -0
  15. package/dist/operations/clusters.js +20 -0
  16. package/dist/operations/clusters.js.map +1 -0
  17. package/dist/operations/containers.d.ts +27 -0
  18. package/dist/operations/containers.js +33 -0
  19. package/dist/operations/containers.js.map +1 -0
  20. package/dist/operations/findings.d.ts +52 -0
  21. package/dist/operations/findings.js +76 -0
  22. package/dist/operations/findings.js.map +1 -0
  23. package/dist/operations/identities.d.ts +33 -0
  24. package/dist/operations/identities.js +30 -0
  25. package/dist/operations/identities.js.map +1 -0
  26. package/dist/operations/images.d.ts +46 -0
  27. package/dist/operations/images.js +58 -0
  28. package/dist/operations/images.js.map +1 -0
  29. package/dist/operations/kubeobject.d.ts +33 -0
  30. package/dist/operations/kubeobject.js +38 -0
  31. package/dist/operations/kubeobject.js.map +1 -0
  32. package/dist/operations/misconfigs.d.ts +21 -0
  33. package/dist/operations/misconfigs.js +36 -0
  34. package/dist/operations/misconfigs.js.map +1 -0
  35. package/dist/operations/runtime.d.ts +26 -0
  36. package/dist/operations/runtime.js +68 -0
  37. package/dist/operations/runtime.js.map +1 -0
  38. package/dist/operations/runtime_network.d.ts +53 -0
  39. package/dist/operations/runtime_network.js +41 -0
  40. package/dist/operations/runtime_network.js.map +1 -0
  41. package/dist/operations/threats.d.ts +22 -0
  42. package/dist/operations/threats.js +24 -0
  43. package/dist/operations/threats.js.map +1 -0
  44. package/dist/version.d.ts +1 -0
  45. package/dist/version.js +2 -0
  46. package/dist/version.js.map +1 -0
  47. package/package.json +63 -0
package/dist/index.js ADDED
@@ -0,0 +1,480 @@
1
+ #!/usr/bin/env node
2
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
+ import cors from 'cors';
5
+ import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
6
+ import { zodToJsonSchema } from 'zod-to-json-schema';
7
+ import { z } from "zod";
8
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
9
+ import express from "express";
10
+ import { RadSecurityClient } from "./client.js";
11
+ import * as containers from "./operations/containers.js";
12
+ import * as audit from "./operations/audit.js";
13
+ import * as cloudInventory from "./operations/cloud-inventory.js";
14
+ import * as clusters from "./operations/clusters.js";
15
+ import * as identities from "./operations/identities.js";
16
+ import * as images from "./operations/images.js";
17
+ import * as kubeobject from "./operations/kubeobject.js";
18
+ import * as misconfigs from "./operations/misconfigs.js";
19
+ import * as runtime from "./operations/runtime.js";
20
+ import * as runtimeNetwork from "./operations/runtime_network.js";
21
+ import * as threats from "./operations/threats.js";
22
+ import * as findings from "./operations/findings.js";
23
+ import { VERSION } from "./version.js";
24
+ async function newServer() {
25
+ // Initialize authentication
26
+ const client = RadSecurityClient.fromEnv();
27
+ // Initialize MCP server
28
+ const server = new Server({
29
+ name: "RAD Security MCP Server",
30
+ version: VERSION,
31
+ }, {
32
+ capabilities: {
33
+ prompts: {},
34
+ resources: {},
35
+ tools: {},
36
+ logging: {},
37
+ },
38
+ });
39
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
40
+ return {
41
+ tools: [
42
+ // Container tools
43
+ {
44
+ name: "list_containers",
45
+ description: "List containers secured by RAD Security with optional filtering by image name, image digest, namespace, cluster_id, or free text search",
46
+ inputSchema: zodToJsonSchema(containers.ListContainersSchema),
47
+ },
48
+ {
49
+ name: "get_container_details",
50
+ description: "Get detailed information about a container secured by RAD Security",
51
+ inputSchema: zodToJsonSchema(containers.GetContainerDetailsSchema),
52
+ },
53
+ // Cluster tools
54
+ {
55
+ name: "list_clusters",
56
+ description: "List Kubernetes clusters managed by RAD Security",
57
+ inputSchema: zodToJsonSchema(clusters.ListClustersSchema),
58
+ },
59
+ {
60
+ name: "get_cluster_details",
61
+ description: "Get detailed information about a specific Kubernetes cluster managed by RAD Security",
62
+ inputSchema: zodToJsonSchema(clusters.GetClusterDetailsSchema),
63
+ },
64
+ // Identity tools
65
+ {
66
+ name: "list_identities",
67
+ description: "Get list of identities for a specific Kubernetes cluster",
68
+ inputSchema: zodToJsonSchema(identities.ListIdentitiesSchema),
69
+ },
70
+ {
71
+ name: "get_identity_details",
72
+ description: "Get detailed information about a specific identity in a Kubernetes cluster",
73
+ inputSchema: zodToJsonSchema(identities.GetIdentityDetailsSchema),
74
+ },
75
+ // Audit tools
76
+ {
77
+ name: "who_shelled_into_pod",
78
+ description: "Get users who shelled into a pod with the given name and namespace around the given time",
79
+ inputSchema: zodToJsonSchema(audit.WhoShelledIntoPodSchema),
80
+ },
81
+ // Cloud Inventory tools
82
+ {
83
+ name: "list_cloud_resources",
84
+ description: "List cloud resources for a specific provider with optional filtering",
85
+ inputSchema: zodToJsonSchema(cloudInventory.ListCloudResourcesSchema),
86
+ },
87
+ {
88
+ name: "get_cloud_resource_details",
89
+ description: "Get detailed information about a specific cloud resource",
90
+ inputSchema: zodToJsonSchema(cloudInventory.GetCloudResourceDetailsSchema),
91
+ },
92
+ {
93
+ name: "get_cloud_resource_facets",
94
+ description: "Get available facets for filtering cloud resources from a provider",
95
+ inputSchema: zodToJsonSchema(cloudInventory.GetCloudResourceFacetsSchema),
96
+ },
97
+ {
98
+ name: "get_cloud_resource_facet_values",
99
+ description: "Get values for a specific facet from a cloud provider",
100
+ inputSchema: zodToJsonSchema(cloudInventory.GetCloudResourceFacetValuesSchema),
101
+ },
102
+ // Image tools
103
+ {
104
+ name: "list_images",
105
+ description: "List container images with optional filtering by page, page size, sort, and search query",
106
+ inputSchema: zodToJsonSchema(images.ListImagesSchema),
107
+ },
108
+ {
109
+ name: "list_image_vulnerabilities",
110
+ description: "List vulnerabilities in a container image with optional filtering by severity",
111
+ inputSchema: zodToJsonSchema(images.ListImageVulnerabilitiesSchema),
112
+ },
113
+ {
114
+ name: "get_top_vulnerable_images",
115
+ description: "Get the most vulnerable images from your account",
116
+ inputSchema: zodToJsonSchema(z.object({})),
117
+ },
118
+ {
119
+ name: "get_image_sbom",
120
+ description: "Get the SBOM of a container image",
121
+ inputSchema: zodToJsonSchema(images.GetImageSBOMSchema),
122
+ },
123
+ // Kubernetes Object tools
124
+ {
125
+ name: "get_kubernetes_resource_details",
126
+ description: "Get the latest manifest of a Kubernetes resource",
127
+ inputSchema: zodToJsonSchema(kubeobject.GetKubernetesResourceDetailsSchema),
128
+ },
129
+ {
130
+ name: "list_kubernetes_resources",
131
+ description: "List Kubernetes resources with optional filtering by namespace, resource types, and cluster",
132
+ inputSchema: zodToJsonSchema(kubeobject.ListKubernetesResourcesSchema),
133
+ },
134
+ // Manifest Misconfigurations tools
135
+ {
136
+ name: "list_kubernetes_resource_misconfigurations",
137
+ description: "Get manifest misconfigurations for a Kubernetes resource",
138
+ inputSchema: zodToJsonSchema(misconfigs.ListKubernetesResourceMisconfigurationsSchema),
139
+ },
140
+ {
141
+ name: "get_kubernetes_resource_misconfiguration_details",
142
+ description: "Get detailed information about a specific Kubernetes resource misconfiguration",
143
+ inputSchema: zodToJsonSchema(misconfigs.GetKubernetesResourceMisconfigurationDetailsSchema),
144
+ },
145
+ // Runtime tools
146
+ {
147
+ name: "get_containers_process_trees",
148
+ description: "Get process trees for multiple containers",
149
+ inputSchema: zodToJsonSchema(runtime.GetContainersProcessTreesSchema),
150
+ },
151
+ {
152
+ name: "get_containers_baselines",
153
+ description: "Get runtime baselines for multiple containers",
154
+ inputSchema: zodToJsonSchema(runtime.GetContainersBaselinesSchema),
155
+ },
156
+ {
157
+ name: "get_container_llm_analysis",
158
+ description: "Get LLM analysis of a container's process tree",
159
+ inputSchema: zodToJsonSchema(runtime.GetContainerLLMAnalysisSchema),
160
+ },
161
+ // Runtime Network tools
162
+ {
163
+ name: "list_http_requests",
164
+ description: "List HTTP requests insights with optional filtering by method, path, source and destination workloads, and PII detection",
165
+ inputSchema: zodToJsonSchema(runtimeNetwork.listHttpRequestsSchema),
166
+ },
167
+ {
168
+ name: "list_network_connections",
169
+ description: "List network connections with optional filtering",
170
+ inputSchema: zodToJsonSchema(runtimeNetwork.listNetworkConnectionsSchema),
171
+ },
172
+ {
173
+ name: "list_network_connection_sources",
174
+ description: "List network connection sources with optional filtering by source and destination workloads",
175
+ inputSchema: zodToJsonSchema(runtimeNetwork.listNetworkConnectionSourcesSchema),
176
+ },
177
+ // Threat Vectors tools
178
+ {
179
+ name: "list_threat_vectors",
180
+ description: "List threat vectors",
181
+ inputSchema: zodToJsonSchema(threats.listThreatVectorsSchema),
182
+ },
183
+ // Findings tools
184
+ {
185
+ name: "list_security_findings",
186
+ description: "List security findings with optional filtering by types, severities, sources, and status",
187
+ inputSchema: zodToJsonSchema(findings.listFindingsSchema),
188
+ },
189
+ {
190
+ name: "update_security_finding_status",
191
+ description: "Update the status of a security finding",
192
+ inputSchema: zodToJsonSchema(findings.updateFindingStatusSchema),
193
+ },
194
+ ],
195
+ };
196
+ });
197
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
198
+ try {
199
+ if (!request.params.arguments) {
200
+ throw new Error("Arguments are required");
201
+ }
202
+ const toolName = request.params.name;
203
+ switch (toolName) {
204
+ // Container tools
205
+ case "list_containers": {
206
+ const args = containers.ListContainersSchema.parse(request.params.arguments);
207
+ const response = await containers.listContainers(client, args.offset, args.limit, args.filters, args.q);
208
+ return {
209
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
210
+ };
211
+ }
212
+ case "get_container_details": {
213
+ const args = containers.GetContainerDetailsSchema.parse(request.params.arguments);
214
+ const response = await containers.getContainerDetails(client, args.container_id);
215
+ return {
216
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
217
+ };
218
+ }
219
+ // Cluster tools
220
+ case "list_clusters": {
221
+ const args = clusters.ListClustersSchema.parse(request.params.arguments);
222
+ const response = await clusters.listClusters(client, args.page_size, args.page);
223
+ return {
224
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
225
+ };
226
+ }
227
+ case "get_cluster_details": {
228
+ const args = clusters.GetClusterDetailsSchema.parse(request.params.arguments);
229
+ const response = await clusters.getClusterDetails(client, args.cluster_id);
230
+ return {
231
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
232
+ };
233
+ }
234
+ // Identity tools
235
+ case "list_identities": {
236
+ const args = identities.ListIdentitiesSchema.parse(request.params.arguments);
237
+ const response = await identities.listIdentities(client, args.identity_types, args.cluster_ids, args.page, args.page_size, args.q);
238
+ return {
239
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
240
+ };
241
+ }
242
+ case "get_identity_details": {
243
+ const args = identities.GetIdentityDetailsSchema.parse(request.params.arguments);
244
+ const response = await identities.getIdentityDetails(client, args.identity_id);
245
+ return {
246
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
247
+ };
248
+ }
249
+ // Audit tools
250
+ case "who_shelled_into_pod": {
251
+ const args = audit.WhoShelledIntoPodSchema.parse(request.params.arguments);
252
+ const response = await audit.whoShelledIntoPod(client, args.name, args.namespace, args.cluster_id, args.from_time, args.to_time, args.limit, args.page);
253
+ return {
254
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
255
+ };
256
+ }
257
+ // Cloud Inventory tools
258
+ case "list_cloud_resources": {
259
+ const args = cloudInventory.ListCloudResourcesSchema.parse(request.params.arguments);
260
+ const response = await cloudInventory.listCloudResources(client, args.provider, args.filters, args.offset, args.limit, args.q);
261
+ return {
262
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
263
+ };
264
+ }
265
+ case "get_cloud_resource_details": {
266
+ const args = cloudInventory.GetCloudResourceDetailsSchema.parse(request.params.arguments);
267
+ const response = await cloudInventory.getCloudResourceDetails(client, args.provider, args.resource_type, args.resource_id);
268
+ return {
269
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
270
+ };
271
+ }
272
+ case "get_cloud_resource_facets": {
273
+ const args = cloudInventory.GetCloudResourceFacetsSchema.parse(request.params.arguments);
274
+ const response = await cloudInventory.getCloudResourceFacets(client, args.provider);
275
+ return {
276
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
277
+ };
278
+ }
279
+ case "get_cloud_resource_facet_values": {
280
+ const args = cloudInventory.GetCloudResourceFacetValuesSchema.parse(request.params.arguments);
281
+ const response = await cloudInventory.getCloudResourceFacetValues(client, args.provider, args.facet_id);
282
+ return {
283
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
284
+ };
285
+ }
286
+ // Image tools
287
+ case "list_images": {
288
+ const args = images.ListImagesSchema.parse(request.params.arguments);
289
+ const response = await images.listImages(client, args.page, args.page_size, args.sort, args.search);
290
+ return {
291
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
292
+ };
293
+ }
294
+ case "list_image_vulnerabilities": {
295
+ const args = images.ListImageVulnerabilitiesSchema.parse(request.params.arguments);
296
+ const response = await images.listImageVulnerabilities(client, args.digest, args.severities, args.page, args.page_size);
297
+ return {
298
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
299
+ };
300
+ }
301
+ case "get_top_vulnerable_images": {
302
+ const response = await images.getTopVulnerableImages(client);
303
+ return {
304
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
305
+ };
306
+ }
307
+ case "get_image_sbom": {
308
+ const args = images.GetImageSBOMSchema.parse(request.params.arguments);
309
+ const response = await images.getImageSBOM(client, args.digest);
310
+ return {
311
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
312
+ };
313
+ }
314
+ // Kubernetes Objects tools
315
+ case "get_kubernetes_resource_details": {
316
+ const args = kubeobject.GetKubernetesResourceDetailsSchema.parse(request.params.arguments);
317
+ const response = await kubeobject.getKubernetesResourceDetails(client, args.cluster_id, args.resource_uid);
318
+ return {
319
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
320
+ };
321
+ }
322
+ case "list_kubernetes_resources": {
323
+ const args = kubeobject.ListKubernetesResourcesSchema.parse(request.params.arguments);
324
+ const response = await kubeobject.listKubernetesResources(client, args.kinds, args.namespace, args.cluster_id, args.page, args.page_size);
325
+ return {
326
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
327
+ };
328
+ }
329
+ // Kubernetes Resource Misconfigurations tools
330
+ case "list_kubernetes_resource_misconfigurations": {
331
+ const args = misconfigs.ListKubernetesResourceMisconfigurationsSchema.parse(request.params.arguments);
332
+ const response = await misconfigs.listKubernetesResourceMisconfigurations(client, args.resource_uid);
333
+ return {
334
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
335
+ };
336
+ }
337
+ case "get_kubernetes_resource_misconfiguration_details": {
338
+ const args = misconfigs.GetKubernetesResourceMisconfigurationDetailsSchema.parse(request.params.arguments);
339
+ const response = await misconfigs.getKubernetesResourceMisconfigurationDetails(client, args.cluster_id, args.misconfig_id);
340
+ return {
341
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
342
+ };
343
+ }
344
+ // Runtime tools
345
+ case "get_containers_process_trees": {
346
+ const args = runtime.GetContainersProcessTreesSchema.parse(request.params.arguments);
347
+ const response = await runtime.getContainersProcessTrees(client, args.container_ids);
348
+ return {
349
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
350
+ };
351
+ }
352
+ case "get_containers_baselines": {
353
+ const args = runtime.GetContainersBaselinesSchema.parse(request.params.arguments);
354
+ const response = await runtime.getContainersBaselines(client, args.container_ids);
355
+ return {
356
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
357
+ };
358
+ }
359
+ case "get_container_llm_analysis": {
360
+ const args = runtime.GetContainerLLMAnalysisSchema.parse(request.params.arguments);
361
+ const response = await runtime.getContainerLLMAnalysis(client, args.container_id);
362
+ return {
363
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
364
+ };
365
+ }
366
+ // Runtime Network tools
367
+ case "list_http_requests": {
368
+ const args = runtimeNetwork.listHttpRequestsSchema.parse(request.params.arguments);
369
+ const response = await runtimeNetwork.listHttpRequests(client, args);
370
+ return {
371
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
372
+ };
373
+ }
374
+ case "list_network_connections": {
375
+ const args = runtimeNetwork.listNetworkConnectionsSchema.parse(request.params.arguments);
376
+ const response = await runtimeNetwork.listNetworkConnections(client, args);
377
+ return {
378
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
379
+ };
380
+ }
381
+ case "list_network_connection_sources": {
382
+ const args = runtimeNetwork.listNetworkConnectionSourcesSchema.parse(request.params.arguments);
383
+ const response = await runtimeNetwork.listNetworkConnectionSources(client, args);
384
+ return {
385
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
386
+ };
387
+ }
388
+ // Threat Vectors tools
389
+ case "list_threat_vectors": {
390
+ const args = threats.listThreatVectorsSchema.parse(request.params.arguments);
391
+ const response = await threats.listThreatVectors(client, args.clustersIds, args.namespaces, args.resource_uid, args.page, args.page_size);
392
+ return {
393
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
394
+ };
395
+ }
396
+ // Findings tools
397
+ case "list_security_findings": {
398
+ const args = findings.listFindingsSchema.parse(request.params.arguments);
399
+ const response = await findings.listFindings(client, args.limit, args.types, args.severities, args.source_types, args.source_kinds, args.source_names, args.source_namespaces, args.status, args.from_time, args.to_time);
400
+ return {
401
+ content: [{ type: "text", text: JSON.stringify(response, null, 2) }],
402
+ };
403
+ }
404
+ case "update_security_finding_status": {
405
+ const args = findings.updateFindingStatusSchema.parse(request.params.arguments);
406
+ await findings.updateFindingGroupStatus(client, args.id, args.status);
407
+ return {
408
+ content: [{ type: "text", text: JSON.stringify({ success: true, message: `Finding ${args.id} status updated to ${args.status}` }, null, 2) }],
409
+ };
410
+ }
411
+ default:
412
+ throw new Error(`Unknown tool: ${toolName}`);
413
+ }
414
+ }
415
+ catch (error) {
416
+ console.error("Error calling tool:", error);
417
+ return {
418
+ content: [
419
+ {
420
+ type: "text",
421
+ text: JSON.stringify({
422
+ error: error instanceof Error ? error.message : String(error),
423
+ }),
424
+ },
425
+ ],
426
+ };
427
+ }
428
+ });
429
+ return server;
430
+ }
431
+ async function main() {
432
+ try {
433
+ const transportType = process.env.TRANSPORT_TYPE || 'stdio';
434
+ if (!['stdio', 'sse'].includes(transportType)) {
435
+ throw new Error("Transport type must be either 'stdio' or 'sse'");
436
+ }
437
+ if (transportType === 'stdio') {
438
+ const transport = new StdioServerTransport();
439
+ const server = await newServer();
440
+ await server.connect(transport);
441
+ console.info("RAD Security MCP server started with stdio transport");
442
+ }
443
+ else {
444
+ const app = express();
445
+ app.use(cors({
446
+ origin: '*',
447
+ methods: ['GET', 'POST', 'OPTIONS', 'HEAD'],
448
+ allowedHeaders: ['Content-Type'],
449
+ }));
450
+ const server = await newServer();
451
+ let transport;
452
+ app.head("/sse", async (req, res) => {
453
+ res.sendStatus(200);
454
+ });
455
+ app.head("/messages", async (req, res) => {
456
+ res.sendStatus(200);
457
+ });
458
+ app.get("/sse", async (req, res) => {
459
+ transport = new SSEServerTransport("/messages", res);
460
+ await server.connect(transport);
461
+ });
462
+ app.post("/messages", async (req, res) => {
463
+ await transport.handlePostMessage(req, res);
464
+ });
465
+ const port = process.env.PORT || 3000;
466
+ app.listen(port, () => {
467
+ console.info(`Server running on http://localhost:${port}/sse`);
468
+ });
469
+ }
470
+ }
471
+ catch (error) {
472
+ console.error("Error starting server:", error);
473
+ process.exit(1);
474
+ }
475
+ }
476
+ main().catch((error) => {
477
+ console.error("Unhandled error:", error);
478
+ process.exit(1);
479
+ });
480
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { z } from "zod";
2
+ import { RadSecurityClient } from "../client.js";
3
+ export declare const WhoShelledIntoPodSchema: z.ZodObject<{
4
+ name: z.ZodOptional<z.ZodString>;
5
+ namespace: z.ZodOptional<z.ZodString>;
6
+ cluster_id: z.ZodOptional<z.ZodString>;
7
+ from_time: z.ZodOptional<z.ZodString>;
8
+ to_time: z.ZodOptional<z.ZodString>;
9
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
10
+ page: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ limit: number;
13
+ page: number;
14
+ name?: string | undefined;
15
+ namespace?: string | undefined;
16
+ cluster_id?: string | undefined;
17
+ from_time?: string | undefined;
18
+ to_time?: string | undefined;
19
+ }, {
20
+ limit?: number | undefined;
21
+ name?: string | undefined;
22
+ namespace?: string | undefined;
23
+ cluster_id?: string | undefined;
24
+ from_time?: string | undefined;
25
+ to_time?: string | undefined;
26
+ page?: number | undefined;
27
+ }>;
28
+ /**
29
+ * Get users who shelled into a pod with the given name and namespace around the given time.
30
+ */
31
+ export declare function whoShelledIntoPod(client: RadSecurityClient, name?: string, namespace?: string, cluster_id?: string, from_time?: string, to_time?: string, limit?: number, page?: number): Promise<any>;
@@ -0,0 +1,55 @@
1
+ import { z } from "zod";
2
+ export const WhoShelledIntoPodSchema = z.object({
3
+ name: z.string().optional().describe("Optional Pod name"),
4
+ namespace: z.string().optional().describe("Optional Pod namespace"),
5
+ cluster_id: z.string().optional().describe("Optional Cluster ID"),
6
+ from_time: z.string().optional().describe("Start time of the time range to search for audit events. Example: 2024-01-01T00:00:00Z. Default: 7 days ago"),
7
+ to_time: z.string().optional().describe("End time of the time range to search for audit events. Example: 2024-01-03T00:00:00Z"),
8
+ limit: z.number().optional().default(20).describe("Maximum number of results to return"),
9
+ page: z.number().optional().default(1).describe("Page number to return"),
10
+ });
11
+ /**
12
+ * Get users who shelled into a pod with the given name and namespace around the given time.
13
+ */
14
+ export async function whoShelledIntoPod(client, name, namespace, cluster_id, from_time = "now-7d", to_time = "", limit = 20, page = 1) {
15
+ const params = {
16
+ types: "k8s_audit_logs_anomaly",
17
+ rule_ids: "A001",
18
+ from: from_time,
19
+ to: to_time,
20
+ page: page,
21
+ page_size: limit,
22
+ };
23
+ if (cluster_id) {
24
+ params.cluster_ids = cluster_id;
25
+ }
26
+ const violations = await client.makeRequest(`/accounts/${client.getAccountId()}/findings`, params);
27
+ const toReturn = [];
28
+ for (const violation of violations.entries) {
29
+ const auditLog = violation.source;
30
+ if (!auditLog) {
31
+ continue;
32
+ }
33
+ let match = true;
34
+ if (name) {
35
+ if (auditLog.objectRef && auditLog.objectRef.name !== name) {
36
+ match = false;
37
+ }
38
+ }
39
+ if (namespace) {
40
+ if (auditLog.objectRef && auditLog.objectRef.namespace !== namespace) {
41
+ match = false;
42
+ }
43
+ }
44
+ if (match) {
45
+ toReturn.push({
46
+ who: auditLog.user,
47
+ time: auditLog.stageTimestamp,
48
+ where: auditLog.objectRef,
49
+ });
50
+ }
51
+ }
52
+ violations.entries = toReturn;
53
+ return violations;
54
+ }
55
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/operations/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IACzD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IACnE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IACjE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6GAA6G,CAAC;IACxJ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sFAAsF,CAAC;IAC/H,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACxF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACzE,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAyB,EACzB,IAAa,EACb,SAAkB,EAClB,UAAmB,EACnB,YAAoB,QAAQ,EAC5B,UAAkB,EAAE,EACpB,QAAgB,EAAE,EAClB,OAAe,CAAC;IAEhB,MAAM,MAAM,GAAwB;QAClC,KAAK,EAAE,wBAAwB;QAC/B,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,SAAS;QACf,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,KAAK;KACjB,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,WAAW,CACzC,aAAa,MAAM,CAAC,YAAY,EAAE,WAAW,EAC7C,MAAM,CACP,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,SAAS,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;QAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QAED,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC3D,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,QAAQ,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;gBACrE,KAAK,GAAG,KAAK,CAAC;YAChB,CAAC;QACH,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,EAAE,QAAQ,CAAC,IAAI;gBAClB,IAAI,EAAE,QAAQ,CAAC,cAAc;gBAC7B,KAAK,EAAE,QAAQ,CAAC,SAAS;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC;IAC9B,OAAO,UAAU,CAAC;AACpB,CAAC"}