Skip to content

Python SDK ja CLI

Ylläpitäjä: Aether365-tiimi Kohderyhmä: Kehittäjät ja DevOps-insinöörit Laajuus: Virallisen aether365 Python SDK:n ja komentorivityökalun asennus ja käyttö

aether365-paketti on Aether365 API:n virallinen Python SDK ja komentorivityökalu. Se kapseloi osoitteen https://api.aether365.io, hoitaa todennuksen, purkaa vastauskuoren ja yrittää ohimeneviä virheitä automaattisesti uudelleen. Kaiken minkä voit tehdä curl-komennolla, voit tehdä myös SDK:lla tai CLI:llä.

SDK ja CLI käyttävät API-avainta (ak_live_...) ja kohdistavat pyynnöt yhtenäiseen päätepisteeseen: pyynnöt reititetään automaattisesti tenantisi kotialueelle. Katso Todennus, miten avaimet toimivat.

Asennus

Pakettia jaellaan sisäisesti (ei PyPI:ssä). Asenna se suoraan repositorysta tai paikallisesta checkoutista.

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

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

Vaaditaan Python 3.12 tai uudempi. Paketin asennus lisää myös aether365-komennon PATH-polkuusi.

Konfigurointi

Sekä SDK että CLI lukevat samat ympäristömuuttujat:

MuuttujaTarkoitusOletus
AETHER365_API_KEYAPI-avaimesi (ak_live_...). Pakollinen.-
AETHER365_API_URLOhittaa perus-URL:n (esimerkiksi dev-päätepisteen).https://api.aether365.io
AETHER365_OUTPUTCLI:n tulostemuoto: table tai json.table
bash
export AETHER365_API_KEY="ak_live_..."

Alue on automaattinen: API tunnistaa tenantin avaimesta ja välittää pyynnön oikealle alueelle, joten aluetta ei koskaan tarvitse konfiguroida eikä välittää.

Pikaopas: 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")

Pikaopas: 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ä API-avaimella voi ja ei voi tehdä

API-avain on rajattu turvalliseen luku- ja operointipintaan. Sillä voi lukea datasi, käynnistää ja hallita skannauksia, tuottaa raportteja ja hallita hyökkäyspinnan kohteita. Sillä ei voi suorittaa tilinhallintaan tai hakemistosta lukitsemiseen liittyviä toimia: API-avainten hallintaa, laskutusta, tiimin jäsenyyksiä, yhteyksien lisäystä ja poistoa, SSO:ta, remediation-suunnitelman soveltamista tai AI Pilotin conditional-access/break-glass-kirjoituksia. Ne ovat käytettävissä vain kirjautuneessa istunnossa dashboardissa. Pyyntö kiellettyyn reittiin palauttaa 403 AUTH_INSUFFICIENT_SCOPE.

Komento- ja metodiviite

Jokainen rivi näyttää saman toiminnon kolmella tavalla: raakana curl-kutsuna, SDK-metodina ja CLI-komentona.

Tenant ja tili

ToimintocurlSDKCLI
Hae tenant-profiiliGET /tenants/meclient.tenants.me()aether365 tenant me
Listaa yhteydetGET /tenants/me/connectionsclient.connections.list()aether365 tenant connections
IlmoitusasetuksetGET /tenants/me/notificationsclient.notifications.get()aether365 tenant notifications
Ajastetut skannauksetGET /tenants/me/scheduled-scansclient.scheduled_scans.list()aether365 tenant scheduled-scans

Skannaukset

ToimintocurlSDKCLI
Listaa skannauksetGET /tenants/me/scansclient.scans.list()aether365 scan list
Käynnistä skannausPOST /tenants/me/scansclient.scans.create("compliance")aether365 scan run --type compliance
Hae skannausGET /scans/{id}client.scans.get(id)aether365 scan get <id>
Lue tuloksetGET /scans/{id}/resultsclient.scans.results(id)aether365 scan results <id>
Peruuta skannausPOST /scans/{id}/cancelclient.scans.cancel(id)aether365 scan cancel <id>
Piilota skannausPATCH /scans/{id}/hideclient.scans.hide(id)aether365 scan hide <id>
Palauta skannaus näkyviinPATCH /scans/{id}/unhideclient.scans.unhide(id)aether365 scan unhide <id>
Poista skannausDELETE /scans/{id}client.scans.delete(id)aether365 scan delete <id>

Skannauksen käynnistävä 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"}'

Raportit

ToimintocurlSDKCLI
Raportin tilaGET /scans/{id}/reportclient.reports.status(id)aether365 report status <id>
Luo raporttiPOST /scans/{id}/report/generateclient.reports.generate(id)aether365 report generate <id>
Listaa raportitGET /tenants/me/reportsclient.reports.list()aether365 report list
Lataa raporttiGET /scans/{id}/report (presigned)client.reports.download(id, path)aether365 report download <id> -o out.pdf

Raportin tila on jokin seuraavista: ready, rendering, orgNameRequired tai locked. Raportin luonti voi kuluttaa raporttikrediitin (kertaveloitus, kun tilaukseen ei sisälly krediittikiintiötä): avaimen omistaja hyväksyy tämän kutsumalla generatea.

Raporttilistaus on offset-sivutettu: välitä meta["nextCursor"] (kokonaislukumuotoinen rivioffset, viimeisellä sivulla None) takaisin cursor-parametrina. client.reports.iter_all() seuraa kursoria puolestasi.

Hyökkäyspinta

ToimintocurlSDKCLI
YleiskuvaGET /tenants/me/attack-surfaceclient.attack_surface.summary()aether365 eas summary
HistoriaGET /tenants/me/attack-surface/historyclient.attack_surface.history()aether365 eas history
Listaa kohteetGET /tenants/me/attack-surface/targetsclient.attack_surface.targets()aether365 eas targets list
Lisää kohdePOST /tenants/me/attack-surface/targetsclient.attack_surface.add_target(host)aether365 eas targets add <host>
Päivitä kohdePATCH /tenants/me/attack-surface/targets/{id}client.attack_surface.update_target(id, ...)aether365 eas targets update <id> --label ...
Poista kohdeDELETE /tenants/me/attack-surface/targets/{id}client.attack_surface.remove_target(id)aether365 eas targets remove <id>
Vahvista kohdePOST /tenants/me/attack-surface/targets/{id}/verifyclient.attack_surface.verify_target(id)aether365 eas targets verify <id>
Aja EAS-skannausPOST /tenants/me/attack-surface/scanclient.attack_surface.scan()aether365 eas scan

Tietoturva-asento, remediation ja AI Pilot

ToimintocurlSDKCLI
Uhka- ja riskinäkymäGET /tenants/me/threatsclient.threats.list()aether365 threats
Käytäntöjen tilaGET /tenants/me/policiesclient.policies.list()aether365 policies
Remediation-kyvykkyydetGET /tenants/me/remediation/capabilitiesclient.remediation.capabilities()aether365 remediation capabilities
Listaa remediation-suunnitelmatGET /tenants/me/remediation-plansclient.remediation.plans()aether365 remediation plans
Hae remediation-suunnitelmaGET /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-käytännötGET /tenants/me/ai-pilot/conditional-accessclient.ai_pilot.conditional_access()aether365 ai-pilot conditional-access

Remediation on API-avaimille vain luku. Suunnitelman soveltamista ei tarjota: suunnitelman action-registry-kohteet voivat sisältää Conditional-Access / authorization-policy-muutoksia, jotka lukitsisivat tenantin ulos omasta hakemistostaan (AADSTS50097), joten soveltaminen pysyy dashboardissa operaattorin valvonnassa. AI Pilotin conditional-access ja break-glass ovat samasta syystä niin ikään vain luettavissa.

Virheenkäsittely ja uudelleenyritykset

Jokainen API-virhe vastaa tyypitettyä poikkeusta, joka on Aether365Error-luokan aliluokka:

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

Client yrittää automaattisesti uudelleen virheet 429 RATE_LIMITED ja 503 SERVICE_STARTING (dev-ympäristön kylmän tietokannan lämpeneminen) eksponentiaalisella backoffilla ja noudattaa Retry-After-otsaketta. Kiintiövirheet, kuten SCAN_PLAN_LIMIT_REACHED, nostetaan heti: niitä ei yritetä uudelleen.

CLI:n käyttö CI:ssä

aether365 scan results <id> --fail-on-findings päättyy poistumiskoodilla 2, kun yksikin epäonnistunut löydös on olemassa, joten pipeline voi portittaa skannaustulosten perusteella:

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

CLI kirjoittaa virheet stderriin ja poistuu koodilla 1 missä tahansa API-virheessä ja koodilla 2 löydösportissa.

Oliko tästä sivusta hyötyä?