Skip to content

Auditing - #6

Open
hilmarf wants to merge 53 commits into
mainfrom
auditing
Open

hilmarf wants to merge 53 commits into
mainfrom
auditing

Conversation

@hilmarf

@hilmarf hilmarf commented Apr 28, 2026

Copy link
Copy Markdown
Member

Project Proposal: Audit Logging SIG #2409

Overview

This pull request introduces a new Audit Logging signal to OpenTelemetry—a purpose-built observability pipeline for security-relevant events that satisfies compliance requirements such as ISO 27001, SOC 2, PCI-DSS, and HIPAA.

Motivation

The existing OpenTelemetry Logs signal is designed for general-purpose observability and intentionally permits sampling, back-pressure shedding, and record transformation. These behaviors are incompatible with audit logging, where:

  • Every record MUST be delivered without loss or modification to the designated audit sink
  • Records MUST NOT be sampled or dropped for any reason
  • Integrity verification is mandatory for tamper-evidence

A dedicated Audit Logging signal provides:

  • A purpose-built SDK pipeline with no sampling and at-least-once delivery semantics
  • A distinct OTLP endpoint (/v1/audit) for network-level isolation from observability backends
  • A dedicated data model with mandatory integrity fields and optional digital signatures
  • Clear separation of audit records from operational logs

Changes

This PR adds comprehensive specification documentation and establishes the complete audit logging framework:

New Documents

  • OTEP 0267 – Complete Audit Logging Signal proposal (motivations, design rationale, trade-offs)
  • README.md – Introduction and signal overview
  • api.md – Audit Logging API specification (AuditProvider, AuditLogger, emit semantics)
  • data-model.md – AuditRecord and AuditReceipt data models with detailed field specifications
  • sdk.md – SDK implementation requirements (queuing, processors, exporters, failure handling)
  • collector.md – Tier-2 Collector specification for enterprise multi-sink deployments

Key Features

Guaranteed Delivery – At-least-once delivery with durable (disk-backed) queuing
Integrity Protection – Optional asymmetric signatures or symmetric HMACs for tamper-evidence
No Partial Success – OTLP receivers reject entire batches if any record fails
Clock Skew Detection – Dual timestamps (event vs. observed) enable clock synchronization verification
Idempotency – RecordId as idempotency key prevents duplicate audit entries on retries
Hash-Chain Support – Stream-scoped hash chains (audit.sequence.stream_id, audit.sequence.number, audit.sequence.previous_hash, audit.sequence.previous_record_id) for ordered, tamper-evident streams across multi-tenant deployments
Graceful Stream Endaudit.sequence.end signals a cleanly closed stream (distinguishes intentional termination from crashes)
Compliance Ready – ISO 27001 Annex A requirements built into the core design

Data Model Highlights

AuditRecord – Mandatory fields:

  • audit.record.id, Timestamp, ObservedTimestamp, EventName
  • audit.actor.id, audit.actor.type, audit.action, audit.outcome
  • Optional: audit.target.id/type, audit.source.id/type, audit.integrity.value, audit.integrity.signer, audit.integrity.canonicalization, audit.sequence.number, audit.sequence.previous_hash, audit.sequence.previous_record_id, audit.sequence.stream_id, audit.sequence.end, audit.schema.version

AuditReceipt – Proof-of-delivery returned by sink:

  • RecordId (echoed), IntegrityHash (SHA-256), SinkTimestamp

Specification Status

  • Status: Development
  • Prototype Implementations: Planned for Java and Go SDKs
  • OTLP Transport: Uses standard LogRecord protobuf with audit=true flag; dedicated /v1/audit endpoint

References

  • Implements compliance requirements from ISO 27001 Annex A, SOC 2, PCI-DSS, HIPAA
  • Extends OTEP 0092 (Logs Vision) and OTEP 0202 (Events and Logs API) patterns
  • Reuses OTLP LogRecord as transport container for efficiency
  • opentelemetry-collector-contrib/signingprocessor

@hilmarf hilmarf mentioned this pull request Apr 28, 2026
hilmarf added a commit that referenced this pull request Apr 28, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
hilmarf added a commit that referenced this pull request Apr 28, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
hilmarf added a commit that referenced this pull request Apr 29, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
hilmarf added a commit that referenced this pull request May 8, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
@CLAassistant

CLAassistant commented May 8, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

hilmarf added a commit that referenced this pull request May 28, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
hilmarf added a commit that referenced this pull request May 29, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
@hilmarf
hilmarf force-pushed the main branch 2 times, most recently from a1a9327 to 0c832ef Compare June 1, 2026 11:03
hilmarf added a commit that referenced this pull request Jun 1, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
hilmarf added a commit that referenced this pull request Jun 1, 2026
replaces #1

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
@hilmarf hilmarf moved this from Backlog to In progress in OTel-Audit-Logging Jun 1, 2026
@hilmarf hilmarf assigned MJarmo and hilmarf and unassigned MJarmo Jun 2, 2026
@hilmarf
hilmarf requested a review from MJarmo June 2, 2026 13:05
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
…n of timestamps

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
… hash exclusion rules

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
atoulme pushed a commit to open-telemetry/opentelemetry-collector-contrib that referenced this pull request Sep 21, 2026
… `newKeyMaterialProvider` (#50862)

#### Description

Adds new key material providers to the processor/signing component:

- k8s_secret - Kubernetes Secret (with startup retry and context-aware
cancellation)
- bao - OpenBao (https://openbao.org/) / Vault-compatible KV secret

The signed payload excludes audit.integrity.* attributes (the proof
itself) and fields that carry no audit-relevant semantics
(SeverityNumber, SeverityText, Flags). After signing, it sets
audit.integrity.signer = "collector" to indicate the Tier-2 Collector -
not the SDK - produced the integrity proof.

#### Link to tracking issue
Fixes #50079, follows #50548, fixes #51055

#### Testing

Unit tests cover:

- config validation (all four key source types, algorithm validation)
- all four key providers (happy path + error paths)
- JCS surrogate-pair collision regression (defect_repro_test.go -
documents a known edge case in the canonicalization input)
- audit.integrity.signer = "collector" on processed records

#### Authorship

- [x] I, a human, wrote this pull request description myself.

#### References

- [OpenTelemetry Audit Logging signal
spec](apeirora/opentelemetry-specification#6)
- [`audit` semantic
conventions](apeirora/semantic-conventions#7)

---------

Signed-off-by: Hilmar Falkenberg <hilmar.falkenberg@sap.com>
Signed-off-by: Sankalp Gilda <sankalp.gilda@gmail.com>
Co-authored-by: Sankalp Gilda <sankalp.gilda@gmail.com>
Co-authored-by: Vibhanshu Singh <find.vibhanshu@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

do-not-merge Do not merge this PR yet!

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

3 participants