Skip to content

Python SDK og CLI

Vedlikeholdt av: Aether365 Team Malgruppe: Utviklere og DevOps-ingeniører Omfang: Installasjon og bruk av det offisielle aether365 Python SDK-et og kommandolinjegrensesnittet

Pakken aether365 er det offisielle Python SDK-et og kommandolinjegrensesnittet for Aether365 API-et. Den pakker inn https://api.aether365.io, håndterer autentisering, pakker ut svarkonvolutten og prøver automatisk på nytt ved forbigående feil. Alt du kan gjøre med curl, kan du gjøre med SDK-et eller CLI-et.

SDK-et og CLI-et bruker en API-nøkkel (ak_live_...) og går mot det samlede endepunktet - forespørsler rutes automatisk til tenantens hjemmeregion. Se Autentisering for hvordan nøkler fungerer.

Installasjon

Pakken distribueres internt (ikke på PyPI). Installer den direkte fra repositoryet eller en lokal utsjekk.

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 eller nyere kreves. Installasjonen legger også kommandoen aether365PATH.

Konfigurasjon

Både SDK-et og CLI-et leser de samme miljøvariablene:

VariabelFormålStandard
AETHER365_API_KEYDin API-nøkkel (ak_live_...). Påkrevd.-
AETHER365_API_URLOverstyrer basis-URL-en (for eksempel dev-endepunktet).https://api.aether365.io
AETHER365_OUTPUTCLI-ets utdataformat: table eller json.table
bash
export AETHER365_API_KEY="ak_live_..."

Region håndteres automatisk: API-et finner tenanten din ut fra nøkkelen og videresender til riktig region, så du verken konfigurerer eller oppgir en region.

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

Hurtigstart: 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

Hva en API-nøkkel kan og ikke kan gjøre

En API-nøkkel er begrenset til en trygg, lesende og operativ flate. Den kan lese dataene dine, starte og administrere skanninger, generere rapporter og administrere attack surface-mål. Den kan ikke utføre handlinger som styrer kontoen eller kan låse ute katalogen - administrasjon av API-nøkler, fakturering, teammedlemskap, on- og offboarding av tilkoblinger, SSO, anvendelse av en remediation-plan eller AI Pilots conditional access-/break glass-skrivinger. De er bare tilgjengelige for en pålogget økt i dashbordet. En forespørsel til en rute som ikke er tillatt, returnerer 403 AUTH_INSUFFICIENT_SCOPE.

Kommando- og metodereferanse

Hver rad viser samme operasjon på tre måter: som rå curl, som SDK-metode og som CLI-kommando.

Tenant og konto

OperasjoncurlSDKCLI
Hent tenantprofilGET /tenants/meclient.tenants.me()aether365 tenant me
List tilkoblingerGET /tenants/me/connectionsclient.connections.list()aether365 tenant connections
VarslingsinnstillingerGET /tenants/me/notificationsclient.notifications.get()aether365 tenant notifications
Planlagte skanningerGET /tenants/me/scheduled-scansclient.scheduled_scans.list()aether365 tenant scheduled-scans

Skanninger

OperasjoncurlSDKCLI
List skanningerGET /tenants/me/scansclient.scans.list()aether365 scan list
Start en skanningPOST /tenants/me/scansclient.scans.create("compliance")aether365 scan run --type compliance
Hent en skanningGET /scans/{id}client.scans.get(id)aether365 scan get <id>
Les resultaterGET /scans/{id}/resultsclient.scans.results(id)aether365 scan results <id>
Avbryt en skanningPOST /scans/{id}/cancelclient.scans.cancel(id)aether365 scan cancel <id>
Skjul en skanningPATCH /scans/{id}/hideclient.scans.hide(id)aether365 scan hide <id>
Vis en skanning igjenPATCH /scans/{id}/unhideclient.scans.unhide(id)aether365 scan unhide <id>
Slett en skanningDELETE /scans/{id}client.scans.delete(id)aether365 scan delete <id>

curl-kallet for å starte en skanning:

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

Rapporter

OperasjoncurlSDKCLI
RapportstatusGET /scans/{id}/reportclient.reports.status(id)aether365 report status <id>
Generer en rapportPOST /scans/{id}/report/generateclient.reports.generate(id)aether365 report generate <id>
List rapporterGET /tenants/me/reportsclient.reports.list()aether365 report list
Last ned en rapportGET /scans/{id}/report (presigned)client.reports.download(id, path)aether365 report download <id> -o out.pdf

Rapportstatus er en av ready, rendering, orgNameRequired eller locked. Å generere en rapport kan bruke en rapportkreditt (et engangsbeløp når ingen kvote er inkludert) - nøkkeleieren velger dette selv ved å kalle generate.

Rapportlisten er offset-paginert: send meta["nextCursor"] (et heltalls radoffset, eller None på siste side) tilbake som cursor. client.reports.iter_all() følger cursoren for deg.

Attack surface

OperasjoncurlSDKCLI
OversiktGET /tenants/me/attack-surfaceclient.attack_surface.summary()aether365 eas summary
HistorikkGET /tenants/me/attack-surface/historyclient.attack_surface.history()aether365 eas history
List målGET /tenants/me/attack-surface/targetsclient.attack_surface.targets()aether365 eas targets list
Legg til et målPOST /tenants/me/attack-surface/targetsclient.attack_surface.add_target(host)aether365 eas targets add <host>
Oppdater et målPATCH /tenants/me/attack-surface/targets/{id}client.attack_surface.update_target(id, ...)aether365 eas targets update <id> --label ...
Slett et målDELETE /tenants/me/attack-surface/targets/{id}client.attack_surface.remove_target(id)aether365 eas targets remove <id>
Verifiser et målPOST /tenants/me/attack-surface/targets/{id}/verifyclient.attack_surface.verify_target(id)aether365 eas targets verify <id>
Kjør en EAS-skanningPOST /tenants/me/attack-surface/scanclient.attack_surface.scan()aether365 eas scan

Posture, remediation og AI Pilot

OperasjoncurlSDKCLI
Trussel-/risikovisningGET /tenants/me/threatsclient.threats.list()aether365 threats
Policy-postureGET /tenants/me/policiesclient.policies.list()aether365 policies
Remediation-funksjonerGET /tenants/me/remediation/capabilitiesclient.remediation.capabilities()aether365 remediation capabilities
List remediation-planerGET /tenants/me/remediation-plansclient.remediation.plans()aether365 remediation plans
Hent en remediation-planGET /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-policyerGET /tenants/me/ai-pilot/conditional-accessclient.ai_pilot.conditional_access()aether365 ai-pilot conditional-access

Remediation er skrivebeskyttet for API-nøkler. Å anvende en plan er ikke eksponert: action registry-elementene i en plan kan inneholde conditional access-/authorization policy-patcher som ville låst en tenant ute av sin egen katalog (AADSTS50097), så anvendelsen blir værende i dashbordet med en operatør i loopen. AI Pilot conditional access og break-glass er av samme grunn også bare lesbare.

Feilhåndtering og retries

Hver API-feil mappes til en typet exception-subklasse av 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.")

Klienten prøver automatisk 429 RATE_LIMITED og 503 SERVICE_STARTING (oppvarmingen av den kalde dev-databasen) på nytt med eksponentiell backoff og respekterer Retry-After-headeren. Kvotefeil som SCAN_PLAN_LIMIT_REACHED kastes umiddelbart - de prøves ikke på nytt.

Bruke CLI-et i CI

aether365 scan results <id> --fail-on-findings avslutter med kode 2 når minst ett feilet funn finnes, slik at en pipeline kan bruke skanneresultatene som gate:

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

CLI-et skriver feil til stderr og avslutter med 1 ved enhver API-feil og med 2 ved findings-gaten.

Var denne siden nyttig?