<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.2.3) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-kestura-pac-compliance-attestation-00" category="info">
  <front>
    <title abbrev="PaC Compliance Attestation">An Interoperable Attestation Format for Policy-as-Code Compliance Evidence</title>

    <author fullname="Elias Lenz">
      <organization>Kestura UG (haftungsbeschraenkt)</organization>
      <address>
        <email>info@kestura.com</email>
      </address>
    </author>

    <date year="2026" month="August" day="08"/>

    <area>General</area>
    <workgroup>Independent Submission</workgroup>
    <keyword>policy-as-code</keyword> <keyword>compliance</keyword> <keyword>attestation</keyword> <keyword>OPA</keyword> <keyword>governance</keyword>

    <abstract>


<?line 22?>
<t>Organizations increasingly enforce regulatory and security requirements
using policy-as-code (PaC) engines integrated into continuous integration
and delivery (CI/CD) pipelines. The evidence these engines produce, that
is, the record of which policies were evaluated, against what inputs, and
with what outcome, is typically emitted in vendor-specific, non-portable
formats. This impairs auditability, cross-tool aggregation, and
independent verification. This document analyzes the problem and describes
an interoperable, machine-readable attestation format for PaC compliance
evidence. It is informational and does not define an IETF standard, nor
does it establish a new IANA registry.</t>



    </abstract>



  </front>

  <middle>


<?line 34?>

<section anchor="introduction"><name>Introduction</name>

<t>Policy-as-code (PaC) expresses organizational, security, and regulatory
rules as machine-evaluable code rather than prose. Engines such as those
using the Rego language evaluate these policies against structured inputs
at decision points in CI/CD pipelines, admission controllers, and runtime
gateways. A single deployment may evaluate thousands of policy decisions
per day.</t>

<t>Each decision produces evidence: the policy that was evaluated, the input
it was evaluated against, the resulting decision, and contextual metadata
such as time and evaluator identity. Auditors, downstream tools, and
independent verifiers increasingly need to consume this evidence. Today
it is emitted in formats that differ across engines and vendors, which
prevents portable audit trails and cross-tool correlation.</t>

<t>This document analyzes the interoperability gap and describes a common
attestation structure for representing PaC compliance evidence. The goal
is to enable evidence to be exchanged, aggregated, and verified across
otherwise incompatible tools.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<dl>
  <dt>Policy decision:</dt>
  <dd>
    <t>The outcome of evaluating one policy against one input.</t>
  </dd>
  <dt>Attestation:</dt>
  <dd>
    <t>A signed or verifiable statement binding a policy decision to its
evidentiary context.</t>
  </dd>
  <dt>Evidence:</dt>
  <dd>
    <t>The data supporting a policy decision, including the policy identity and
a digest of the input.</t>
  </dd>
  <dt>Verifier:</dt>
  <dd>
    <t>A party that consumes attestations to confirm a decision occurred as
claimed.</t>
  </dd>
  <dt>Policy Decision Point (PDP) / Policy Enforcement Point (PEP):</dt>
  <dd>
    <t>The components that, respectively, evaluate policy and enforce its
outcome.</t>
  </dd>
</dl>

</section>
<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="problem-statement"><name>Problem Statement</name>

<t>The absence of a common evidence format produces three concrete problems.</t>

<t>First, audit trails are locked to the tool that produced them. An
organization that changes PaC engines cannot easily correlate historical
evidence with new evidence.</t>

<t>Second, evidence cannot be aggregated across heterogeneous tools. A large
environment may run several engines at different enforcement points;
without a shared format, a unified compliance view requires bespoke
adapters for each.</t>

<t>Third, independent verification is difficult. A third party, such as an
external auditor, cannot readily confirm that a decision occurred as
claimed when the evidence format is proprietary and undocumented.</t>

</section>
<section anchor="survey-of-existing-approaches"><name>Survey of Existing Approaches</name>

<t>Several adjacent formats inform this work without directly solving the
problem. Decision logs emitted by PaC engines capture per-decision data
but are engine-specific. Software supply-chain attestation frameworks bind
statements to subjects and provide a useful structural analogy. Software
bill-of-materials and vulnerability-exchange documents demonstrate the
value of portable, machine-readable evidence in the supply-chain domain.
This document draws on these patterns while focusing specifically on PaC
compliance decisions.</t>

</section>
<section anchor="attestation-model"><name>Attestation Model</name>

<t>An attestation binds a policy decision to its evidentiary context. It
contains, at minimum:</t>

<t><list style="symbols">
  <t>a subject identifying what the decision concerns;</t>
  <t>a policy identity, including a version or content digest;</t>
  <t>a digest of the evaluated input, rather than the input itself, to avoid
exposing sensitive data;</t>
  <t>the decision outcome;</t>
  <t>a timestamp; and</t>
  <t>the identity of the evaluating component.</t>
</list></t>

<t>The use of digests, rather than raw inputs, allows evidence to be shared
and verified without disclosing potentially sensitive evaluation data.</t>

</section>
<section anchor="serialization-considerations"><name>Serialization Considerations</name>

<t>Attestations can be represented using widely deployed structured-data
encodings. This document describes the model in terms of existing media
types and does not define a new one. Implementations <bcp14>SHOULD</bcp14> prefer
encodings that support deterministic serialization to enable reproducible
digests and signatures.</t>

</section>
<section anchor="mapping-to-regulatory-frameworks"><name>Mapping to Regulatory Frameworks</name>

<t>The attestation model is framework-neutral but maps naturally to concrete
regimes. For example, a control requirement can be expressed as one or
more policies, and each evaluation produces an attestation demonstrating
that the control was checked. This provides an auditable link between a
regulatory obligation and the automated evidence of its enforcement.</t>

</section>
<section anchor="verification-and-aggregation"><name>Verification and Aggregation</name>

<t>A verifier consumes attestations to confirm that a claimed decision
occurred. Because attestations are self-describing and reference policy
and input by digest, they can be aggregated across tools into a single
compliance view and independently checked without access to the original
evaluation environment.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="RFC5742">
  <front>
    <title>IESG Procedures for Handling of Independent and IRTF Stream Submissions</title>
    <author fullname="H. Alvestrand" initials="H." surname="Alvestrand"/>
    <author fullname="R. Housley" initials="R." surname="Housley"/>
    <date month="December" year="2009"/>
    <abstract>
      <t>This document describes the procedures used by the IESG for handling documents submitted for RFC publication from the Independent Submission and IRTF streams.</t>
      <t>This document updates procedures described in RFC 2026 and RFC 3710. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="92"/>
  <seriesInfo name="RFC" value="5742"/>
  <seriesInfo name="DOI" value="10.17487/RFC5742"/>
</reference>



    </references>

</references>


<?line 168?>

<section anchor="security-considerations"><name>Security Considerations</name>

<t>Attestations assert that a policy decision occurred; their value depends
on integrity and authenticity. Implementations <bcp14>SHOULD</bcp14> protect
attestations against tampering and <bcp14>SHOULD</bcp14> support verification of the
evaluator's identity. Because attestations reference inputs by digest,
they avoid disclosing potentially sensitive evaluation data. This document
describes a data model and introduces no new protocol behavior; it
presents no new operational risk to the Internet.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document requests no IANA actions.</t>

</section>
<section anchor="privacy-considerations"><name>Privacy Considerations</name>

<t>Evaluation inputs may contain sensitive information. For this reason the
attestation model references inputs by digest rather than embedding them.
Implementations <bcp14>SHOULD</bcp14> avoid placing sensitive data in attestation fields
that are intended for wide distribution.</t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>The author thanks the reviewers who contributed to this document.</t>

</section>


  </back>

<!-- ##markdown-source:
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
txreJs+do4QsxH8By0Ovrl0cAAA=

-->

</rfc>

