Eseguire e verificare il clawback Sophos Email tramite API
L’API Clawback rimuove messaggi Sophos Email già consegnati dalle caselle idonee. Il flusso sicuro ha sempre due fasi: inviare il richiamo una sola volta, quindi interrogare GET /messages/{id}/status fino a ottenere un esito terminale per ogni destinatario accettato. Una risposta 202 conferma l’accettazione del job, non il successo nella casella.
Verificare prerequisiti e confini
Servono un service principal configurato, un bearer token OAuth2 valido, l’UUID del tenant target e l’host API regionale individuato. L’introduzione alla Email Management API spiega famiglie operative e test di lettura. Il runbook pianificato Autenticazione e tenant routing per l’API Sophos Email riunisce token, risoluzione tenant e routing regionale.
Gli esempi usano variabili già validate:
EMAIL_API_HOST="${SOPHOS_API_HOST%/}/email/v1"
SOPHOS_EMAIL_ID="15a7f8ea-691c-4f03-862e-3cefb102818e"
SOPHOS_API_HOST è l’host regionale scoperto per il tenant, non ipotizzato. Sostituire l’esempio innocuo SOPHOS_EMAIL_ID. Ogni richiesta usa Authorization: Bearer *** e X-Tenant-ID; segreti e dati completi del messaggio non devono entrare in codice, log o ticket.
Il clawback richiede anche il diritto PDP/clawback e una connessione provider funzionante. Sono rimediabili solo messaggi consegnati con successo a caselle idonee e destinatari idonei. Post-Delivery Protection in Sophos Central tratta connessione, On demand clawback nell’interfaccia e Auto search and remediate. Questi flussi UI sono separati dall’API e non ne sostituiscono il polling.
Ottenere il corretto x-sophos-email-id
Il parametro {id} è il valore dell’header MIME X-Sophos-Email-ID, non l’Internet Message-ID, l’oggetto o un UUID qualsiasi. Sophos indica anche che può essere ricavato da varie risposte di query Email in Live Discover nel Threat Analysis Center. Questo runbook non inventa uno schema: prendere x-sophos-email-id da evidenze affidabili e verificare almeno tenant, messaggio e destinatari interessati.
Inserire il valore senza spazi o ritorni a capo in SOPHOS_EMAIL_ID. Per più messaggi, registrare ogni ID con approvazione e caso; non costruire liste dal solo oggetto simile.
Richiamare un messaggio
L’endpoint documentato è POST /messages/{id}/clawback. Senza recipients, Sophos tenta il richiamo per tutti i destinatari. Usare tale ambito solo se tutti appartengono all’incidente. Per un pilota, indicare gli indirizzi; la specifica consente fino a 500 elementi.
Il reason opzionale è malware, phishing, spam oppure unwanted:
{
"reason": "phishing",
"recipients": [
"user1@example.com",
"user2@example.com"
]
}
Inviare il POST una sola volta e proteggere la risposta:
REQUEST_FILE=$(mktemp) || exit 1
RESPONSE_FILE=$(mktemp) || exit 1
trap 'rm -f "$REQUEST_FILE" "$RESPONSE_FILE"' EXIT
cat >"$REQUEST_FILE" <<'JSON'
{
"reason": "phishing",
"recipients": ["user1@example.com", "user2@example.com"]
}
JSON
HTTP_STATUS=$(
printf 'header = "Authorization: Bearer %s"\n' "$SOPHOS_ACCESS_TOKEN" |
curl --silent --show-error --config - \
--output "$RESPONSE_FILE" \
--write-out '%{http_code}' \
--request POST \
--header "X-Tenant-ID: $SOPHOS_TENANT_ID" \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data-binary "@$REQUEST_FILE" \
"$EMAIL_API_HOST/messages/$SOPHOS_EMAIL_ID/clawback"
)
printf 'Clawback submission returned HTTP %s\n' "$HTTP_STATUS"
È atteso 202. La risposta separa i recipients accettati dagli errors, ciascuno con recipient ed error. Registrare l’accettazione per destinatario senza esporre tutta la risposta. Sophos definisce atomica la chiamata singola limitata ai destinatari: un destinatario non idoneo può far fallire l’intera richiesta. Verificare la causa, rimuoverlo solo se giustificato e poi inviare una nuova richiesta consapevole.
Richiamare più messaggi
Per più messaggi, Sophos documenta POST /messages/clawback con una lista messageIds. Ogni elemento è un x-sophos-email-id:
{
"messageIds": [
"e4fa988e-76f6-11ee-b962-0242ac120002",
"eb9df47e-76f6-11ee-b962-0242ac120002",
"ef790f0276f611eeb9620242ac120002"
]
}
La chiamata multipla riduce le richieste, non le verifiche. Registrare accettazione e stato per ogni ID. Se sono coinvolti solo alcuni destinatari di un messaggio, usare l’endpoint singolo con recipients; il payload multiplo documentato non include destinatari.
Eseguire il polling fino all’esito terminale
Per ogni ID usare GET /messages/{id}/status. Sotto items compaiono recipient e status:
{
"items": [
{"recipient": "user1@example.com", "status": "clawbackSuccessful"},
{"recipient": "user2@example.com", "status": "clawbackFailed"}
]
}
clawbackProcessing è intermedio. Registrare clawbackSuccessful o clawbackFailed come esito terminale per destinatario. Lo schema può restituire anche accepted, quarantined, deliverySuccessful o deliveryFailed; non interpretarli come successo del clawback.
HTTP_STATUS=$(
printf 'header = "Authorization: Bearer %s"\n' "$SOPHOS_ACCESS_TOKEN" |
curl --silent --show-error --config - \
--output "$RESPONSE_FILE" \
--write-out '%{http_code}' \
--request GET \
--header "X-Tenant-ID: $SOPHOS_TENANT_ID" \
--header 'Accept: application/json' \
"$EMAIL_API_HOST/messages/$SOPHOS_EMAIL_ID/status"
)
printf 'Clawback status returned HTTP %s\n' "$HTTP_STATUS"
Interrogare con intervallo limitato e jitter finché mancano esiti terminali. Limitare tentativi e durata. Al timeout l’esito è sconosciuto, non fallito: nessun secondo POST finché un GET successivo o Sophos Central non chiarisce l’effetto del primo.
Gestire esiti parziali ed errori
- Non idoneo o già rimediato: verificare messaggio, dominio, consegna e destinatario. POST ripetuti non riparano un successo precedente. Dopo un rifiuto atomico, rimuovere indirizzi non idonei solo dopo la verifica.
- Stati misti: conservare
clawbackSuccessfulper i successi e analizzare separatamenteclawbackFailed. Non dichiarare riuscito tutto il job né rielaborare i successi. 400: controllare ID, JSON,reasonammesso e destinatari; non ripetere invariato.401o403: rinnovare via OAuth2 o verificare ruolo, diritto clawback e tenant. Non cambiare tenant o regione per tentativi.404: confrontare host regionale, percorso ex-sophos-email-idcon l’evidenza.- Throttling (
429): rispettare le indicazioni documentate e rallentare i GET con backoff limitato e jitter. Mai ripetere alla cieca un POST. - Timeout o
5xx: il server potrebbe aver accettato. Interrogare prima lo stesso ID, limitare tentativi e durata, e reinviare solo dopo aver chiarito l’effetto.
La validazione è completa quando, per ogni ID, sono registrati invio, destinatari accettati o rifiutati e ogni esito terminale. Come controllo secondario, verificare casella e Post-Delivery Quarantine nel tenant corretto. La risposta API resta la base machine-readable; clawback UI, PDP automatico e report sono percorsi distinti.