Skip to content

Python SDK és CLI

Az aether365 csomag az Aether365 API hivatalos Python SDK-ja és parancssori felülete. Becsomagolja a https://api.aether365.io végpontot, kezeli a hitelesítést, kibontja a válaszborítékot, és az átmeneti hibákat automatikusan újrapróbálja. Amit curl-lel meg tudsz csinálni, azt az SDK-val vagy a CLI-vel is megteheted.

Az SDK és a CLI API-kulcsot (ak_live_...) használ, és az egységes végpontot célozza: a kérések automatikusan a tenant elsődleges régiójába kerülnek. A kulcsok működéséről a Hitelesítés oldalon olvashatsz.

Telepítés

A csomagot belsőleg terjesztjük (nincs a PyPI-on). Telepítsd közvetlenül a repository-ból vagy egy helyi checkoutból.

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

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

Python 3.12 vagy újabb szükséges. A csomag telepítése az aether365 parancsot is felteszi a PATH-ra.

Konfiguráció

Az SDK és a CLI ugyanazokat a környezeti változókat olvassa:

VáltozóCélAlapértelmezés
AETHER365_API_KEYAz API-kulcsod (ak_live_...). Kötelező.-
AETHER365_API_URLFelülírja az alap URL-t (például a dev végpontra).https://api.aether365.io
AETHER365_OUTPUTA CLI kimeneti formátuma: table vagy json.table
bash
export AETHER365_API_KEY="ak_live_..."

A régió automatikus: az API a kulcs alapján azonosítja a tenantot, és a megfelelő régióba továbbítja a kérést, így régiót soha nem kell beállítanod vagy átadnod.

Gyorsindítás: 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")

Gyorsindítás: 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

Mit tud egy API-kulcs, és mit nem

Az API-kulcs egy biztonságos, olvasásra és üzemeltetési műveletekre szűkített felületre korlátozódik. Olvashatja az adataidat, indíthat és kezelhet vizsgálatokat, generálhat riportokat, és kezelheti az attack-surface célpontokat. Nem hajthat végre fiókkezelési vagy a címtárból való kizárással járó műveleteket: API-kulcsok kezelése, számlázás, csapattagság, kapcsolatok felvétele/leválasztása, SSO, remediation terv alkalmazása, illetve az AI Pilot conditional-access/break-glass írásai. Ezek csak a dashboardon, bejelentkezett munkamenetből érhetők el. A nem engedélyezett útvonalra küldött kérés 403 AUTH_INSUFFICIENT_SCOPE hibát ad vissza.

Parancs- és metódusreferencia

Minden sor ugyanazt a műveletet mutatja három módon: nyers curl, SDK-metódus és CLI-parancs.

Tenant és fiók

MűveletcurlSDKCLI
Tenant profil lekéréseGET /tenants/meclient.tenants.me()aether365 tenant me
Kapcsolatok listázásaGET /tenants/me/connectionsclient.connections.list()aether365 tenant connections
Értesítési beállításokGET /tenants/me/notificationsclient.notifications.get()aether365 tenant notifications
Ütemezett vizsgálatokGET /tenants/me/scheduled-scansclient.scheduled_scans.list()aether365 tenant scheduled-scans

Vizsgálatok

MűveletcurlSDKCLI
Vizsgálatok listázásaGET /tenants/me/scansclient.scans.list()aether365 scan list
Vizsgálat indításaPOST /tenants/me/scansclient.scans.create("compliance")aether365 scan run --type compliance
Vizsgálat lekéréseGET /scans/{id}client.scans.get(id)aether365 scan get <id>
Eredmények olvasásaGET /scans/{id}/resultsclient.scans.results(id)aether365 scan results <id>
Vizsgálat megszakításaPOST /scans/{id}/cancelclient.scans.cancel(id)aether365 scan cancel <id>
Vizsgálat elrejtésePATCH /scans/{id}/hideclient.scans.hide(id)aether365 scan hide <id>
Elrejtés visszavonásaPATCH /scans/{id}/unhideclient.scans.unhide(id)aether365 scan unhide <id>
Vizsgálat törléseDELETE /scans/{id}client.scans.delete(id)aether365 scan delete <id>

A vizsgálatot indító curl:

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"}'

Riportok

MűveletcurlSDKCLI
Riport állapotaGET /scans/{id}/reportclient.reports.status(id)aether365 report status <id>
Riport generálásaPOST /scans/{id}/report/generateclient.reports.generate(id)aether365 report generate <id>
Riportok listázásaGET /tenants/me/reportsclient.reports.list()aether365 report list
Riport letöltéseGET /scans/{id}/report (presigned)client.reports.download(id, path)aether365 report download <id> -o out.pdf

A riport állapota a következők egyike: ready, rendering, orgNameRequired vagy locked. A riport generálása riportkreditet fogyaszthat (egyszeri díj, ha a csomag nem tartalmaz keretet): ebbe a kulcs tulajdonosa a generate meghívásával egyezik bele.

A riportlista offset alapon lapozott: add vissza a meta["nextCursor"] értéket (egész számú sor-offset, az utolsó oldalon None) cursor-ként. A client.reports.iter_all() magától követi a cursort.

Attack surface

MűveletcurlSDKCLI
ÁttekintésGET /tenants/me/attack-surfaceclient.attack_surface.summary()aether365 eas summary
ElőzményekGET /tenants/me/attack-surface/historyclient.attack_surface.history()aether365 eas history
Célpontok listázásaGET /tenants/me/attack-surface/targetsclient.attack_surface.targets()aether365 eas targets list
Célpont hozzáadásaPOST /tenants/me/attack-surface/targetsclient.attack_surface.add_target(host)aether365 eas targets add <host>
Célpont frissítésePATCH /tenants/me/attack-surface/targets/{id}client.attack_surface.update_target(id, ...)aether365 eas targets update <id> --label ...
Célpont törléseDELETE /tenants/me/attack-surface/targets/{id}client.attack_surface.remove_target(id)aether365 eas targets remove <id>
Célpont ellenőrzésePOST /tenants/me/attack-surface/targets/{id}/verifyclient.attack_surface.verify_target(id)aether365 eas targets verify <id>
EAS vizsgálat futtatásaPOST /tenants/me/attack-surface/scanclient.attack_surface.scan()aether365 eas scan

Biztonsági állapot, remediation és AI Pilot

MűveletcurlSDKCLI
Fenyegetés- / kockázati nézetGET /tenants/me/threatsclient.threats.list()aether365 threats
SzabályzatállapotGET /tenants/me/policiesclient.policies.list()aether365 policies
Remediation képességekGET /tenants/me/remediation/capabilitiesclient.remediation.capabilities()aether365 remediation capabilities
Remediation tervek listázásaGET /tenants/me/remediation-plansclient.remediation.plans()aether365 remediation plans
Remediation terv lekéréseGET /tenants/me/remediation-plans/{id}client.remediation.plan(id)aether365 remediation plan <id>
AI Pilot remediableGET /tenants/me/ai-pilot/remediableclient.ai_pilot.remediable()aether365 ai-pilot remediable
AI Pilot break-glassGET /tenants/me/ai-pilot/break-glassclient.ai_pilot.break_glass()aether365 ai-pilot break-glass
AI Pilot CA szabályzatokGET /tenants/me/ai-pilot/conditional-accessclient.ai_pilot.conditional_access()aether365 ai-pilot conditional-access

A remediation API-kulccsal csak olvasható. A terv alkalmazása nem érhető el: egy terv action-registry elemei tartalmazhatnak olyan Conditional-Access / authorization-policy patcheket, amelyek kizárnák a tenantot a saját címtárából (AADSTS50097), ezért az alkalmazás a dashboardon marad, operátorral a folyamatban. Az AI Pilot conditional-access és break-glass ugyanezen okból szintén csak olvasható.

Hibakezelés és újrapróbálkozás

Minden API-hiba egy típusos kivételre képződik le, amely az Aether365Error leszármazottja:

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.")

A kliens automatikusan újrapróbálja a 429 RATE_LIMITED és az 503 SERVICE_STARTING (a dev hideg adatbázisának bemelegedése) hibákat exponenciális backoffal, a Retry-After fejlécet tiszteletben tartva. A kvótahibák, mint a SCAN_PLAN_LIMIT_REACHED, azonnal kivételt dobnak: ezeket nem próbálja újra.

A CLI használata CI-ban

Az aether365 scan results <id> --fail-on-findings 2-es kilépési kóddal áll le, ha akár egyetlen sikertelen találat is van, így egy pipeline a vizsgálati eredmények alapján kapuzhat:

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

A CLI a hibákat az stderr-re írja, és bármilyen API-hiba esetén 1, a találati kapunál 2 kóddal lép ki.

Hasznos volt ez az oldal?