Connectors
Connectors de production
Les connectors inscrivent l'external source evidence dans Proofstream sans exposer les tenant sessions. Chaque connector possède une vraie authentication, replay handling, diagnostics et revoke behavior.
Modèle connector
Un connector est un adaptateur source-to-evidence. Il observe quelque chose dans un vrai source system, valide que la source est autorisée à parler, normalise l'observation et écrit un event Proofstream avec une source reference stable. Les connectors sont à choisir lorsque l'evidence provient de l'extérieur de votre code applicatif ou quand un source system doit conserver sa propre identité dans l'evidence trail.
- Authentifier la source delivery ou l'API provider.
- Normaliser la source reference et l'event type.
- Rejeter les replay conflicts pour la même source reference.
- Écrire l'event dans le stream configuré.
- Retourner ou stocker l'Attesto receipt.
- Exposer des diagnostics sans divulguer provider secrets ni raw private payloads.
| Famille connector | Tenant management route | Ingress route | Notes |
|---|---|---|---|
| Signed webhook | GET/POST /v2/tenant/connectors/signed-webhooks, DELETE /v2/tenant/connectors/signed-webhooks/{connector_id} | POST /v2/connectors/signed-webhooks/{connector_id}/events | La création peut révéler le connector secret une seule fois. Stockez-le uniquement côté serveur. |
| GitHub/GitLab repository webhook | GET/POST /v2/tenant/connectors/repository-webhooks, DELETE /v2/tenant/connectors/repository-webhooks/{connector_id} | POST /v2/connectors/repository-webhooks/{connector_id}/events | Les provider delivery signatures sont validées avant l'écriture de repository evidence normalisée. |
| S3/R2 object commitment | GET/POST /v2/tenant/connectors/s3-objects, DELETE /v2/tenant/connectors/s3-objects/{connector_id} | POST /v2/tenant/connectors/s3-objects/{connector_id}/commit | Utilise la tenant session pour commit metadata et integrity evidence; les object bytes restent dans le source store. |
Chaque connector event doit conserver source system id, source object id, source event type, source timestamp avec timezone ou offset UTC, connector received time, idempotency/source reference et normalized payload commitment. Si un provider ne peut pas produire de source timestamp timezone-aware, la validation du connector doit échouer au lieu d'en inventer un.
Signed webhook connector
Utilisez le signed webhook connector lorsqu'une source externe peut
POST un signed JSON body vers Attesto. La source reference est
l'idempotency key dans le stream.
Le dashboard crée et révoque les connector records via /v2/tenant/connectors/signed-webhooks; le système source envoie les events uniquement vers le public connector ingress endpoint.
POST /v2/connectors/signed-webhooks/{connectorId}/events
Content-Type: application/json
X-Attesto-Connector-Timestamp: <unix-seconds>
X-Attesto-Connector-Signature: <hex-hmac-sha256>
{
"source_ref": "source-system-2026-0001",
"event_type": "source.observation",
"occurred_at": "2026-06-07T12:00:00Z",
"payload": {
"control": "policy-check",
"result": "passed",
"policy_id": "policy-2026-01"
}
}
GitHub repository connector
Le connector GitHub valide X-Hub-Signature-256 sur le
raw provider body et commit des repository-change metadata normalisées
dans le Proofstream configuré.
{
"provider": "github",
"event": "push",
"repository": "owner/repository",
"ref": "refs/heads/main",
"before": "sha-before",
"after": "sha-after",
"delivery_id": "provider-delivery-id"
}
GitLab repository connector
Le connector GitLab valide le signing token configuré sur la raw provider delivery. Les installations existantes peuvent conserver leur legacy token mode jusqu'à rotation.
{
"provider": "gitlab",
"event": "push",
"project_path": "group/project",
"ref": "refs/heads/main",
"before": "sha-before",
"after": "sha-after",
"delivery_id": "provider-delivery-id"
}
S3/R2 object commitment connector
Utilisez les object commitments lorsque l'evidence existe déjà dans
AWS S3, Cloudflare R2 ou un store S3-compatible. Attesto effectue un
vrai appel HeadObject, receipt l'object identity et les
integrity metadata, et ne proxifie pas le contenu de l'objet.
POST /v2/tenant/connectors/s3-objects/{connectorId}/commit
Content-Type: application/json
{
"key": "evidence/input.json",
"versionId": "$OBJECT_VERSION_ID",
"metadata": {
"source": "case-file"
}
}
Les object commitments ne doivent inclure que des metadata sûres à stocker comme evidence. Le contenu de l'objet reste dans le customer object store.
Distribution marketplace
Les manifests de connectors first-party validés sont disponibles via
https://marketplace.attesto.eu. Les visiteurs publics
peuvent parcourir le catalogue. Télécharger un manifest, acquérir une
entitlement ou créer une installation exige une Attesto tenant session.
La marketplace et les connector kits utilisent les mêmes règles de
validation de manifest attesto.connector.v2.
Les premiers listings Attesto first-party gratuits sont Signed Webhook Evidence, GitHub Repository Evidence, GitLab Repository Evidence et S3/R2 Object Commitment. Chaque listing lie son résultat de validation marketplace à une garantie de canary connector-assurance, afin que l'Evidence Score et les badges Verified soient une release evidence reproductible et non des labels marketing.
Connector diagnostics
Les diagnostics visibles par le tenant montrent si un connector est enabled, récemment utilisé, failing auth, failing replay checks ou revoked. Ils ne révèlent pas les connector credentials, raw provider payloads ni private object content.
| Status | Signification |
|---|---|
healthy | Une récente signed delivery ou source check a réussi. |
auth_failed | La signature provider ou HMAC n'a pas été vérifiée. |
replay_conflict | La même source reference a été rejouée avec un contenu différent. |
revoked | Ingress est disabled et doit fail closed. |
Safety boundaries
- Les endpoints connector rejettent les replay conflicts.
- Les connectors revoked retournent not found sur ingress.
- Les outbound URLs doivent être HTTPS et publicly routable.
- Les credentials S3-compatible doivent être read-only et limitées au bucket prefix requis.
- Ne placez pas de raw object content, private material ou customer secrets dans les connector metadata.
