Skip to content

Python SDK in CLI

Paket aether365 je uradni Python SDK in vmesnik ukazne vrstice za Aether365 API. Ovija https://api.aether365.io, poskrbi za preverjanje pristnosti, razpakira ovojnico odgovora in prehodne napake samodejno ponovi. Vse, kar lahko naredite s curl, lahko naredite tudi s SDK-jem ali CLI-jem.

SDK in CLI uporabljata API ključ (ak_live_...) in ciljata na poenoten endpoint - zahteve se samodejno usmerijo v domačo regijo vašega tenanta. Kako ključi delujejo, opisuje stran Preverjanje pristnosti.

Namestitev

Paket se distribuira interno (ni na PyPI). Namestite ga neposredno iz repozitorija ali lokalne kopije.

bash
# From a local checkout of the monorepo
pip install ./packages/cli

# Or with Poetry, from a path
poetry add ./packages/cli

Zahtevan je Python 3.12 ali novejši. Namestitev paketa doda tudi ukaz aether365 v PATH.

Konfiguracija

SDK in CLI bereta iste okoljske spremenljivke:

SpremenljivkaNamenPrivzeto
AETHER365_API_KEYVaš API ključ (ak_live_...). Obvezno.-
AETHER365_API_URLPrepis osnovnega URL-ja (na primer dev endpoint).https://api.aether365.io
AETHER365_OUTPUTIzhodni format CLI: table ali json.table
bash
export AETHER365_API_KEY="ak_live_..."

Regija je samodejna: API iz ključa razbere vašega tenanta in zahtevo posreduje v pravo regijo, zato regije nikoli ne konfigurirate niti je ne podajate.

Hitri začetek: SDK

python
from aether365 import Aether365Client

with Aether365Client() as client:          # reads AETHER365_API_KEY
    tenant = client.tenants.me()
    print(tenant["name"])

    # Trigger a scan and wait for it to finish
    scan = client.scans.create("compliance")
    for snapshot in client.scans.wait(scan["id"]):
        print(snapshot["status"])

    # Read the findings
    findings = client.scans.results(scan["id"], result="Failed")
    print(f"{len(findings)} failed checks")

Hitri začetek: CLI

bash
# Show the authenticated tenant
aether365 tenant me

# Trigger a scan and follow progress until it finishes
aether365 scan run --type compliance --watch

# List scans as JSON
aether365 --output json scan list

# Fail a CI job when a scan has failed findings (exit code 2)
aether365 scan results <SCAN_ID> --fail-on-findings

Kaj API ključ sme in česa ne

API ključ je omejen na varno površino: branje plus operativna opravila. Lahko bere vaše podatke, sproža in upravlja skene, generira poročila ter upravlja cilje attack surface. Ne more izvajati dejanj za nadzor računa ali dejanj, ki bi lahko zaklenila imenik - upravljanja API ključev, obračunavanja, članstva v ekipi, priklopa in odklopa povezav, SSO, uveljavitve načrta remediacije ali zapisov AI Pilota v conditional access / break-glass. Ta dejanja ostajajo na voljo samo prijavljeni seji v nadzorni plošči. Zahteva na nedovoljeno pot vrne 403 AUTH_INSUFFICIENT_SCOPE.

Pregled ukazov in metod

Vsaka vrstica prikazuje isto operacijo na tri načine: surov curl, metoda SDK in ukaz CLI.

Tenant in račun

OperacijacurlSDKCLI
Profil tenantaGET /tenants/meclient.tenants.me()aether365 tenant me
Seznam povezavGET /tenants/me/connectionsclient.connections.list()aether365 tenant connections
Nastavitve obvestilGET /tenants/me/notificationsclient.notifications.get()aether365 tenant notifications
Načrtovani skeniGET /tenants/me/scheduled-scansclient.scheduled_scans.list()aether365 tenant scheduled-scans

Skeni

OperacijacurlSDKCLI
Seznam skenovGET /tenants/me/scansclient.scans.list()aether365 scan list
Sprožitev skenaPOST /tenants/me/scansclient.scans.create("compliance")aether365 scan run --type compliance
Pridobitev skenaGET /scans/{id}client.scans.get(id)aether365 scan get <id>
Branje rezultatovGET /scans/{id}/resultsclient.scans.results(id)aether365 scan results <id>
Preklic skenaPOST /scans/{id}/cancelclient.scans.cancel(id)aether365 scan cancel <id>
Skritje skenaPATCH /scans/{id}/hideclient.scans.hide(id)aether365 scan hide <id>
Razkritje skenaPATCH /scans/{id}/unhideclient.scans.unhide(id)aether365 scan unhide <id>
Izbris skenaDELETE /scans/{id}client.scans.delete(id)aether365 scan delete <id>

curl za sprožitev skena:

bash
curl -X POST https://api.aether365.io/tenants/me/scans \
  -H "Authorization: Bearer $AETHER365_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"scanType": "compliance"}'

Poročila

OperacijacurlSDKCLI
Status poročilaGET /scans/{id}/reportclient.reports.status(id)aether365 report status <id>
Generiranje poročilaPOST /scans/{id}/report/generateclient.reports.generate(id)aether365 report generate <id>
Seznam poročilGET /tenants/me/reportsclient.reports.list()aether365 report list
Prenos poročilaGET /scans/{id}/report (presigned)client.reports.download(id, path)aether365 report download <id> -o out.pdf

Status poročila je ena od vrednosti ready, rendering, orgNameRequired ali locked. Generiranje poročila lahko porabi kredit za poročila (enkratno plačilo, kadar paket ne vključuje kvote) - lastnik ključa v to privoli s klicem generate.

Seznam poročil je ostranjen z odmikom: vrednost meta["nextCursor"] (celoštevilski odmik vrstice ali None na zadnji strani) vrnite kot cursor. client.reports.iter_all() kazalcu sledi namesto vas.

Attack surface

OperacijacurlSDKCLI
PregledGET /tenants/me/attack-surfaceclient.attack_surface.summary()aether365 eas summary
ZgodovinaGET /tenants/me/attack-surface/historyclient.attack_surface.history()aether365 eas history
Seznam ciljevGET /tenants/me/attack-surface/targetsclient.attack_surface.targets()aether365 eas targets list
Dodajanje ciljaPOST /tenants/me/attack-surface/targetsclient.attack_surface.add_target(host)aether365 eas targets add <host>
Posodobitev ciljaPATCH /tenants/me/attack-surface/targets/{id}client.attack_surface.update_target(id, ...)aether365 eas targets update <id> --label ...
Izbris ciljaDELETE /tenants/me/attack-surface/targets/{id}client.attack_surface.remove_target(id)aether365 eas targets remove <id>
Preverjanje ciljaPOST /tenants/me/attack-surface/targets/{id}/verifyclient.attack_surface.verify_target(id)aether365 eas targets verify <id>
Zagon EAS skenaPOST /tenants/me/attack-surface/scanclient.attack_surface.scan()aether365 eas scan

Varnostna drža, remediacija in AI Pilot

OperacijacurlSDKCLI
Pogled groženj in tveganjGET /tenants/me/threatsclient.threats.list()aether365 threats
Stanje politikGET /tenants/me/policiesclient.policies.list()aether365 policies
Zmožnosti remediacijeGET /tenants/me/remediation/capabilitiesclient.remediation.capabilities()aether365 remediation capabilities
Seznam načrtov remediacijeGET /tenants/me/remediation-plansclient.remediation.plans()aether365 remediation plans
Pridobitev načrta remediacijeGET /tenants/me/remediation-plans/{id}client.remediation.plan(id)aether365 remediation plan <id>
AI Pilot: primerno za remediacijoGET /tenants/me/ai-pilot/remediableclient.ai_pilot.remediable()aether365 ai-pilot remediable
AI Pilot: računi break-glassGET /tenants/me/ai-pilot/break-glassclient.ai_pilot.break_glass()aether365 ai-pilot break-glass
AI Pilot: politike CAGET /tenants/me/ai-pilot/conditional-accessclient.ai_pilot.conditional_access()aether365 ai-pilot conditional-access

Remediacija je za API ključe samo za branje. Uveljavitev načrta ni izpostavljena: postavke načrta iz registra dejanj lahko vključujejo popravke Conditional Access / authorization policy, ki bi tenantu zaklenili dostop do lastnega imenika (AADSTS50097), zato apply ostaja v nadzorni plošči z operaterjem v zanki. Iz istega razloga sta tudi conditional-access in break-glass v AI Pilotu izpostavljena samo za branje.

Obravnava napak in ponovni poskusi

Vsaka napaka API-ja se preslika v tipizirano izjemo, izpeljano iz Aether365Error:

python
from aether365 import Aether365Client
from aether365.exceptions import PermissionError_, PlanLimitError, NotFoundError

with Aether365Client() as client:
    try:
        client.scans.create("compliance")
    except PlanLimitError:
        print("Scan quota reached for this plan.")
    except PermissionError_:
        print("Route not allowed for this key, or plan lacks API access.")
    except NotFoundError:
        print("Resource not found.")

Odjemalec samodejno ponovi 429 RATE_LIMITED in 503 SERVICE_STARTING (ogrevanje hladne baze v dev okolju) z eksponentnim backoffom in pri tem upošteva glavo Retry-After. Napake kvot, kot je SCAN_PLAN_LIMIT_REACHED, se sprožijo takoj - ne ponavljajo se.

Uporaba CLI v CI

aether365 scan results <id> --fail-on-findings se konča s kodo 2, kadar obstaja katera koli neuspešna ugotovitev, zato lahko pipeline rezultate skena uporabi kot vrata:

bash
aether365 scan run --type compliance --watch
aether365 scan results "$SCAN_ID" --fail-on-findings

CLI napake izpisuje na stderr in se konča s kodo 1 ob kateri koli napaki API-ja ter s kodo 2 na vratih za ugotovitve.

Je bila ta stran uporabna?