@knowttl/artium-axi 0.0.6 → 0.0.7
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.
- package/README.md +46 -10
- package/bin/artium-axi.mjs +13657 -8519
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ Administrators manage accounts, roles, encrypted service credentials and audit r
|
|
|
14
14
|
The client follows AXI (Agent eXperience Interface) conventions for discovery, help and structured errors.
|
|
15
15
|
|
|
16
16
|
**Status: under construction.**
|
|
17
|
-
Falcon, Vectra, Azure, Graph, LDAP
|
|
17
|
+
Falcon, Vectra, Azure, Graph, LDAP, Azure DevOps and AWX are wired into the production server entry point.
|
|
18
18
|
See the [evidence ledger](https://github.com/knowttl/artium-axi/blob/archive/internal-docs/docs/evidence-ledger.md) for the acceptance boundaries.
|
|
19
19
|
|
|
20
20
|
## Agent Ergonomics
|
|
@@ -209,7 +209,8 @@ The [credential standard](docs/credential-standard.md#9-hosted-contract-artium-a
|
|
|
209
209
|
| Azure (`az-axi`) | Entra tenant ID, application client ID, client secret or certificate private key and SHA-256 thumbprint, subscription IDs and optional workspace mapping. | `account list`; data-plane roles need their own permitted reads. |
|
|
210
210
|
| Microsoft Graph (`mg-axi`) | Entra tenant ID, application client ID, client secret or certificate private key and SHA-256 thumbprint, administrator-consented Graph application permissions. | `entra user list --limit 1`; other domains need their own permissions. |
|
|
211
211
|
| LDAP (`ldap-axi`) | Verified LDAPS or StartTLS URL, read-only bind identity and password, optional search base and private CA PEM. | `auth status`; binds once and reports the selected identity. |
|
|
212
|
-
| Azure DevOps (`ado-axi`) | Organization, optional default project and
|
|
212
|
+
| Azure DevOps (`ado-axi`) | Organization, optional default project and either a PAT or tenant ID, client ID and client secret. | `project list --limit 1`. |
|
|
213
|
+
| AWX (`awx-axi`) | Controller HTTPS origin and an existing personal access token. | `job list --limit 1`; job read permissions are required. |
|
|
213
214
|
|
|
214
215
|
#### Falcon
|
|
215
216
|
|
|
@@ -217,10 +218,12 @@ In the Falcon console, open **Support and resources > API clients and keys** and
|
|
|
217
218
|
Copy its client ID and secret and record its cloud region: `us-1`, `us-2`, `eu-1` or `us-gov-1`.
|
|
218
219
|
At `/admin/tools/falcon-axi`, enter `clientId`, `clientSecret` and `region`, with `memberCid` only when targeting a Flight Control member tenant.
|
|
219
220
|
Grant `Alerts:read` for detection reads, including the first-call example.
|
|
220
|
-
Grant additional scopes only for the domains you use, following the pinned [API client permission matrix](https://github.com/knowttl/falcon-axi/blob/v0.
|
|
221
|
+
Grant additional scopes only for the domains you use, following the pinned [API client permission matrix](https://github.com/knowttl/falcon-axi/blob/v0.5.0/README.md#api-client-permissions) and its offline `scopes` command.
|
|
221
222
|
For example, account reads need `Assets:read`, while CVE reads need `Vulnerabilities (Falcon Intelligence):read`, distinct from Spotlight vulnerability access.
|
|
222
223
|
NG-SIEM search requires `NGSIEM:write`; Identity Protection directory/timeline queries require `Identity Protection GraphQL:write` plus the documented read scopes, even though those queries read data.
|
|
223
224
|
These are optional domain requirements and do not justify granting other write or response scopes.
|
|
225
|
+
The pinned tool does not change hosts, detections, policies or identities and exposes no arbitrary REST or GraphQL requests.
|
|
226
|
+
Starting and stopping NG-SIEM search jobs are its only tenant-side effects; these investigation operations remain available regardless of the saved write switch.
|
|
224
227
|
Falcon's fixed `auth status` test reports local credential resolution, so also run `artium-axi falcon-axi detection list --limit 1` after enabling and granting the tool.
|
|
225
228
|
|
|
226
229
|
#### Vectra
|
|
@@ -231,7 +234,7 @@ QUX OAuth requires appliance release 9.1 or later; `applianceRelease` is optiona
|
|
|
231
234
|
For RUX, select `kind=rux`, `apiVersion=3.4`, `auth=oauth`, `clientId` and `clientSecret`; leave `applianceRelease` blank.
|
|
232
235
|
Create a QUX personal token under **My Profile** using a local account, or have a Vectra administrator create an OAuth API client under **Manage > API Clients** and record the displayed ID and secret.
|
|
233
236
|
Tokens inherit their user's rights and clients inherit their assigned role; grant read access to health and the Hosts, Accounts, Detections or other areas you need.
|
|
234
|
-
See [Vectra's credential issuance guidance](https://github.com/vectranetworks/vectraautomatedresponse#getting-a-vectra-api-token-for-vectra-detect-api-v2) and the pinned [Vectra configuration contract](https://github.com/knowttl/vectra-axi/tree/v0.1.
|
|
237
|
+
See [Vectra's credential issuance guidance](https://github.com/vectranetworks/vectraautomatedresponse#getting-a-vectra-api-token-for-vectra-detect-api-v2) and the pinned [Vectra configuration contract](https://github.com/knowttl/vectra-axi/tree/v0.1.7#configuration) for deployment-specific requirements.
|
|
235
238
|
For a credential-specific private CA, paste its PEM contents into `caBundle`; enter no server file path.
|
|
236
239
|
For shared trust across tools, follow the [private CA runbook](docs/runbook.md#tls-inspection-and-private-upstream-cas).
|
|
237
240
|
Keep Native settings empty for read-only use; optional writes need the native operation allowlist and upstream permissions.
|
|
@@ -318,7 +321,7 @@ Delegated permissions and interactive `User.Read` consent do not authorize this
|
|
|
318
321
|
| Identity providers | `IdentityProvider.Read.All` |
|
|
319
322
|
| Lifecycle workflows | `LifecycleWorkflows.Read.All` |
|
|
320
323
|
|
|
321
|
-
For other domains, use the pinned [Graph access and licence guidance](https://github.com/knowttl/mg-axi/blob/v0.1.
|
|
324
|
+
For other domains, use the pinned [Graph access and licence guidance](https://github.com/knowttl/mg-axi/blob/v0.1.10/docs/graph-coverage.md) and the command's permission requirements rather than granting every permission.
|
|
322
325
|
Licences still apply: PIM and risk/governance features can fail despite consent, and some commands support only delegated identities.
|
|
323
326
|
Do not add `User.Export.All` just to make a read-only setup pass; data-policy export is a write-class permission.
|
|
324
327
|
|
|
@@ -353,6 +356,8 @@ Enter the password itself in the form, never a SecretRef or password-file path.
|
|
|
353
356
|
Save, run **Test credential**, enable the tool, grant it to a role, then run `artium-axi ldap-axi user list --limit 1` to check directory read permissions.
|
|
354
357
|
**Test credential** runs `auth status`, which performs one bind; failed credentials can count toward directory account lockout limits.
|
|
355
358
|
LDAP is read-only by design and has no editable native write settings.
|
|
359
|
+
LDAP 0.2.0 adds `computer list`, `computer show <identifier-or-dn>` and `server` reads through the same managed identity.
|
|
360
|
+
Computer reads use AD machine accounts or the upstream's stated LDAPv3 device fallback; `server` reports advertised rootDSE capabilities and limits.
|
|
356
361
|
The [LDAP inventory](tools/inventories/ldap-axi.json) owns the supported commands, blocked overrides and resource requirements.
|
|
357
362
|
Local fake-directory and offline profile checks do not establish live directory acceptance.
|
|
358
363
|
|
|
@@ -365,6 +370,10 @@ Artium encrypts the PAT in its credential store and injects it through a private
|
|
|
365
370
|
Do not enter a SecretRef or environment-variable name.
|
|
366
371
|
Create a dedicated PAT scoped to the organization with Work Items, Code and Build read permissions as needed for the commands you use.
|
|
367
372
|
Grant corresponding read-write permissions only for intended mutations; a write switch never grants Azure DevOps permissions.
|
|
373
|
+
For service principal authentication, choose `auth=client-secret` and enter `tenantId`, `clientId` and `clientSecret` instead of `token`.
|
|
374
|
+
Add the service principal as a user in the Azure DevOps organization, in the organization's Entra tenant, and grant the required project permissions before testing.
|
|
375
|
+
Artium acquires and caches an Azure DevOps access token with client credentials and supplies it through a restricted per-call `az` stand-in.
|
|
376
|
+
The stand-in answers only the pinned tool's Azure DevOps token request; no Azure CLI sign-in or device flow is used.
|
|
368
377
|
Save, run **Test credential**, enable the tool, grant it to a role, then run `artium-axi ado-axi project list --limit 1`.
|
|
369
378
|
|
|
370
379
|
Writes are off by default; follow [write-access administration](docs/runbook.md#roles-credentials-and-health) to enable them.
|
|
@@ -376,9 +385,31 @@ All commands refuse repeated flags, stdin and files.
|
|
|
376
385
|
Use `pipeline watch --timeout 50` or less to stay within the runner's call timeout.
|
|
377
386
|
Writes are journaled by Artium only; see [audit action classification](#audit-screen-and-api).
|
|
378
387
|
For an interrupted write, run the returned read-back command and follow its inspection guidance before retrying.
|
|
379
|
-
PAT authentication is available now; client ID and secret authentication is a separate integration phase, with no device flow.
|
|
380
388
|
Local fake-service checks do not establish live organization acceptance.
|
|
381
389
|
|
|
390
|
+
#### AWX
|
|
391
|
+
|
|
392
|
+
Artium bundles the [pinned](tools/package.json) `awx-axi` package without upstream modifications.
|
|
393
|
+
At `/admin/tools/awx-axi`, enter the controller HTTPS `origin` and paste an existing personal access token into `token`.
|
|
394
|
+
Enter the token itself, never a SecretRef, environment-variable name, password or file path.
|
|
395
|
+
Artium encrypts the token and injects a SecretRef through its private per-call profile; it does not mint or revoke AWX tokens.
|
|
396
|
+
Save, run **Test credential**, enable the tool and grant it to a role, then run `artium-axi awx-axi job list --limit 1`.
|
|
397
|
+
**Test credential** reads one job using the managed token and reports structured authentication, network and TLS diagnostics.
|
|
398
|
+
For a private certificate, inspect and trust it through the tool page; trust is scoped to the saved credential and host.
|
|
399
|
+
HTTP and TLS-verification bypasses are refused.
|
|
400
|
+
|
|
401
|
+
Writes are off by default.
|
|
402
|
+
The native setting `{"allowWrites": true}` permits only operational writes, which still require upstream `--confirm`: launching, canceling or relaunching runs, approving or denying workflow approvals, project and inventory-source syncs, and notification-template tests.
|
|
403
|
+
Configuration writes, deletes and security writes are always blocked, including resource creation and editing, associations, role grants and token operations.
|
|
404
|
+
Artium never enables AWX's separate configuration, deletion or security write gates.
|
|
405
|
+
Token permissions remain an additional AWX-side limit; the write switch does not grant AWX permissions.
|
|
406
|
+
The generated [AWX inventory](tools/inventories/awx-axi.json) classifies every command and records the reviewed upstream source digests.
|
|
407
|
+
Artium manages origin, TLS and credential selectors, and refuses standalone auth login/logout, setup, config, profile and update commands.
|
|
408
|
+
Stdin, file uploads, server file paths and `@file` values are unsupported; use inline non-secret launch parameters.
|
|
409
|
+
Use `job watch --timeout 50` or less to stay within the runner timeout.
|
|
410
|
+
For an interrupted write, inspect current state using the returned read-back guidance before retrying.
|
|
411
|
+
Local fake-service checks do not establish live controller acceptance.
|
|
412
|
+
|
|
382
413
|
### Build from source
|
|
383
414
|
|
|
384
415
|
The source toolchain requires Node **24.11 or later** and **pnpm 10.22.0**.
|
|
@@ -434,7 +465,8 @@ artium-axi falcon-axi --help
|
|
|
434
465
|
|
|
435
466
|
The first prints local Artium help without signing in or contacting the server.
|
|
436
467
|
The second forwards `--help` through the authenticated upstream adapter.
|
|
437
|
-
A bare
|
|
468
|
+
A bare `artium-axi falcon-axi` reads recent detections; use `artium-axi falcon-axi --help` for its command list.
|
|
469
|
+
A bare Vectra invocation shows upstream help; `artium-axi az-axi` and `artium-axi az-axi home` run the Azure dashboard with ARM authentication.
|
|
438
470
|
A bare `artium-axi ldap-axi` shows directory discovery with managed-credential guidance.
|
|
439
471
|
Arguments after a tool name belong to upstream, subject to adapter restrictions on credential, configuration and file paths.
|
|
440
472
|
Unknown Azure flags return `INVALID_INPUT` with the flag name, valid flags and a hosted help command.
|
|
@@ -461,7 +493,7 @@ Details read bundled manifests and stored health without fetching credentials or
|
|
|
461
493
|
Discovery and administration show the server's bundled tool versions, as defined by the [API contract](src/shared/api.ts).
|
|
462
494
|
|
|
463
495
|
Upstream calls preserve stdout, stderr and nonzero exit codes.
|
|
464
|
-
For Falcon, Vectra, Azure, Graph, LDAP
|
|
496
|
+
For Falcon, Vectra, Azure, Graph, LDAP, Azure DevOps and AWX, recognized TOON or JSON root `help` suggestions, plain upstream help and bundled tool-detail help use `artium-axi <tool>` commands, including examples originally invoking `npx -y @knowttl/<tool>`.
|
|
465
497
|
Recognized flag listings and command suggestions omit managed flags declared in each pinned [tool inventory](tools/inventories/)'s `unsafeOverrides`, including Graph profile, config and scopes selectors.
|
|
466
498
|
LDAP home output lists hosted commands, and recognized connection and TLS recovery hints direct callers to an administrator to update the [stored LDAP credentials](#ldap).
|
|
467
499
|
Unrelated content, literal argument values, unknown formats and truncated streams remain unchanged.
|
|
@@ -515,6 +547,10 @@ The last enabled administrator cannot be disabled, demoted or archived.
|
|
|
515
547
|
Profile, role and archive changes use revision checks; reload stale forms rather than overwriting newer changes.
|
|
516
548
|
Session revocation and administration changes commit with their audit records.
|
|
517
549
|
After 15 minutes without identity confirmation, administration mutations require reauthentication.
|
|
550
|
+
After a tool credential test fails TLS verification, an administrator can inspect its saved endpoint’s certificate and trust it for that credential in one confirmation.
|
|
551
|
+
The UI shows full fingerprints, warnings, expiry and removable trust; hostname and validity verification remain enabled.
|
|
552
|
+
A missing intermediate is fetched automatically only when its chain reaches an already-trusted root.
|
|
553
|
+
See [credential certificate trust](docs/runbook.md#trusting-one-tool-from-the-administration-ui) for inspection, rotation and the network-path warning.
|
|
518
554
|
Administration and account screens share a navigation menu.
|
|
519
555
|
Signed-in screens have a header showing identity, sign-in source and sign-out.
|
|
520
556
|
On administration screens, the header also shows the remaining confirmation window.
|
|
@@ -556,7 +592,7 @@ The form exposes the schema's full requirements, including conditional requireme
|
|
|
556
592
|
Azure uses guided source-identity fields because the host brokers resource tokens separately.
|
|
557
593
|
Azure and Graph certificate editors accept one PEM file containing one certificate and its matching unencrypted private key and calculate the fingerprint automatically.
|
|
558
594
|
See the [hosted contract](docs/credential-standard.md#9-hosted-contract-artium-axi) for profile injection.
|
|
559
|
-
Falcon has guided fields
|
|
595
|
+
Falcon has guided fields; see its [current credential handling](docs/credential-standard.md#per-tool-host-facing-schemas).
|
|
560
596
|
Browser saves keep native settings and retain blank stored secrets for the same identity.
|
|
561
597
|
Identity changes require new secrets as defined by the [credential-save contract](src/shared/api.ts) (`adminToolRoutes.save`).
|
|
562
598
|
Select **Test after saving** to save and report a harmless credential check inline.
|
|
@@ -680,7 +716,7 @@ Device approval and refusal emit `device-approve` and `device-deny` events, with
|
|
|
680
716
|
Each `run-terminal` record uses `action` to report `write` when the native tool journal contains valid JSON object records for that run, or `read` when a successful run leaves its supported journal absent or empty.
|
|
681
717
|
This records journal activity, including mutation intents, rather than guaranteeing that a remote change succeeded.
|
|
682
718
|
Pinned Falcon and LDAP runs report `read` from their inventories' read-only declarations, including normal runs and health checks.
|
|
683
|
-
ADO
|
|
719
|
+
ADO and AWX use host classification: reads report `read`, successful write calls report `write`, and failed or interrupted writes report `unknown`.
|
|
684
720
|
For tools with native journals, failures without journal records and malformed or unreadable evidence report `unknown`; recovered interrupted runs also report `unknown`.
|
|
685
721
|
See the [API contract](src/shared/api.ts) and [retention and export runbook](docs/runbook.md#retention-and-export).
|
|
686
722
|
|