<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-arch-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.22.0 -->
  <front>
    <title abbrev="WIMSE Architecture">Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-01"/>
    <author initials="J." surname="Salowey" fullname="Joseph Salowey">
      <organization>Venafi</organization>
      <address>
        <email>joe@salowey.net</email>
      </address>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yaroslavros@gmail.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization/>
      <address>
        <email>hannes.tschofenig@gmx.net</email>
      </address>
    </author>
    <date year="2024" month="July" day="08"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 38?>

<t>The increasing prevalence of cloud computing and micro service architectures has led to the rise of complex software functions being built and deployed as workloads, where a workload is defined as a running instance of software executing for a specific purpose.  This document discusses an architecture for designing and standardizing protocols and payloads for conveying workload identity and security context information.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Workload Identity in Multi System Environments Working Group mailing list (wimse@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/wimse/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/jsalowey/wimse-arch"/>.</t>
    </note>
  </front>
  <middle>
    <?line 42?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The increasing prevalence of cloud computing and micro service architectures has led to the rise of complex software functions being built and deployed as systems composed of workloads, where a workload is defined as a running instance of software executing for a specific purpose.</t>
      <t>Workloads need to be provisioned with an identity when they are started. Often, additional information needs to be provided, such as trust anchors and security context details. Workload identity credential is used to authenticate communications between workloads. Workloads make use of identity information and additional context information to perform authentication and authorization.</t>
      <t>This architecture considers two ways to express identity information: X.509 certificates often used in the TLS layer and JSON Web Tokens (JWTs) used at the application layer. Collectively, these are referred to as WIMSE tokens. The applicability of given token format depends on application and security context and will be explored in later sections.</t>
      <t>Once the workload is started and has obtained identity information, it can start performing its functions. Once the workload is invoked it may require interaction with other workloads. An example of such interaction is shown in <xref target="I-D.ietf-oauth-transaction-tokens"/> where an externally-facing endpoint is invoked using conventional authorization mechanism, such as an OAuth 2.0 access token. The interaction with other workload may require the security context associated with the authorization to be passed along the call chain.</t>
      <t>In the rest of the document we describe terminology and use cases, discuss details of the architecture, and discuss threats.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

<t>This document uses the following terms:</t>
      <ul spacing="normal">
        <li>
          <t>Workload</t>
        </li>
      </ul>
      <t>A workload is a running instance of software executing for a specific purpose. Workload typically interacts with other parts of a larger system. A workload may exist for a very short durations of time (fraction of a second) and run for a specific purpose such as to provide a response to an API request. Other kinds of workloads may execute for a very long duration, such as months or years. Examples include database services and machine learning training jobs.</t>
      <ul spacing="normal">
        <li>
          <t>Security Context</t>
        </li>
      </ul>
      <t>A security context provides information needed for a workload to perform its function. This information is often used for authorization, accounting and auditing purposes and often contains information about the request being made. Some examples include user information, software and hardware information or information about what processing has already happened for the request. Different pieces of context information may originate from different sources.</t>
      <ul spacing="normal">
        <li>
          <t>Identity Proxy</t>
        </li>
      </ul>
      <t>Identity proxy is an intermediary that can inspect, replace or augment workload identity and security context information. Identity proxy can be a capability of a transparent network service, such as a security gateway, or it can be implemented in a service performing explicit connection processing, such as an ingress gateway or a Content Delivery Network (CDN) service.</t>
      <ul spacing="normal">
        <li>
          <t>Attestation</t>
        </li>
      </ul>
      <t>Attestation is the function through which a task verifies the identity of a separate Workload. (TBD: sync definition with reference RaTS architecture)</t>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <section anchor="workload-identity">
        <name>Workload Identity</name>
        <t>Workload identity often comprises multiple attributes that describe various aspects of a workload. These attributes can encompass diverse sets of information, including the workload's role within a system, the software it operates, and the hardware environment it utilizes. Different authorities across various parts of the system define these attribute sets. This architecture introduces a Workload Identifier for representing and referencing workloads, enabling diverse authorities with distinct identity attribute sets to consistently reference the workload.</t>
        <t>The Workload Identifier consists of a concise string allocated within a namespace defined by a Trust Domain. This Workload Identifier is present in Workload Identity Tokens and X.509 certificates issued by the authority for the Trust Domain. The Workload Identifier is used to associate additional identity attributes to the workload through the use of tokens (workload attribute tokens?) or online look up services. It may also be used directly in authorization calculations and audit logs.</t>
        <t>The Trust Domain consists of a string that matches the format of a fully qualified domain name. It is the intent that a Trust Domain is actually a domain name registered to the organization defining the Trust Domain, but this may not be true in all cases. The Trust Domain also maps to the issuer of cryptographically signed Workload Identity Tokens (WIT) or X.509 Certificate. The association between a Trust Domain and the cryptographic root of the signing authority for that Trust Domain must be made securely through an out-of-band mechanisms.</t>
        <t>The Trust Domain also defines how the rest of the Workload Identifier is constructed. The Workload Identifier may represent a type of workload such that the same identifier may be used by many instances of the same service. A Trust Domain may choose identifiers to represent a specific instance of a workload such that each workload of the same type will have a specific identity.  The Trust Domain could choose a naming scheme that allows for both objects by imposing a hierarchical structure on the naming format.</t>
        <t>The Trust Domain also defines which mechanisms are used to initially bootstrap a workload with a Workload Identifier and the mechanisms for a workload to obtain its workload identity credentials in the form of X.509 certificates and Workload Identity Tokens.</t>
        <section anchor="bootstrapping-workload-identity">
          <name>Bootstrapping Workload Identity</name>
          <t>[TODO: this section will need to be updated to discuss workload identifier as a concept as well]</t>
          <t>A workload needs to obtain its identity early in its lifecycle. This identity is sometimes referred to as the "bottom turtle" on which further identity and security context is built.</t>
          <t>Identity bootstrapping often utilizes identity information provisioned through mechanisms specific to hosting platforms and orchestration services. This initial bootstrapping information is used to obtain specific identity credentials for a workload. This process may use attestation  to ensure the workload receives correct identity credentials. An example of a bootstrapping process follows.</t>
          <t><xref target="arch-fig"/> provides an example of software layering at a host running workloads. During startup, workloads bootstrap their identity with the help of an agent. The agent may be associated with one or more workloads to help ensure that workloads are provisioned with the correct identity. The agent provides attestation evidence and other relevant information to a server. After obtaining identity credentials from the Server it passes them to the workload. The server validates this information and provides the agent with identity credentials for the workloads it is associated with. The server can use a variety of internal and external means to validate the request against policy.</t>
          <figure anchor="arch-fig">
            <name>Host Software Layering in a Workload Identity Architecture.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="480" width="472" viewBox="0 0 472 480" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,32 L 8,128" fill="none" stroke="black"/>
                  <path d="M 8,224 L 8,448" fill="none" stroke="black"/>
                  <path d="M 24,80 L 24,112" fill="none" stroke="black"/>
                  <path d="M 32,272 L 32,336" fill="none" stroke="black"/>
                  <path d="M 72,136 L 72,272" fill="none" stroke="black"/>
                  <path d="M 88,128 L 88,264" fill="none" stroke="black"/>
                  <path d="M 136,80 L 136,112" fill="none" stroke="black"/>
                  <path d="M 136,320 L 136,408" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,128" fill="none" stroke="black"/>
                  <path d="M 160,272 L 160,336" fill="none" stroke="black"/>
                  <path d="M 280,272 L 280,336" fill="none" stroke="black"/>
                  <path d="M 296,256 L 296,272" fill="none" stroke="black"/>
                  <path d="M 304,320 L 304,408" fill="none" stroke="black"/>
                  <path d="M 336,144 L 336,248" fill="none" stroke="black"/>
                  <path d="M 352,144 L 352,248" fill="none" stroke="black"/>
                  <path d="M 416,272 L 416,336" fill="none" stroke="black"/>
                  <path d="M 432,256 L 432,320" fill="none" stroke="black"/>
                  <path d="M 448,224 L 448,448" fill="none" stroke="black"/>
                  <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
                  <path d="M 24,80 L 136,80" fill="none" stroke="black"/>
                  <path d="M 24,112 L 136,112" fill="none" stroke="black"/>
                  <path d="M 8,128 L 152,128" fill="none" stroke="black"/>
                  <path d="M 8,224 L 448,224" fill="none" stroke="black"/>
                  <path d="M 296,256 L 432,256" fill="none" stroke="black"/>
                  <path d="M 32,272 L 160,272" fill="none" stroke="black"/>
                  <path d="M 280,272 L 416,272" fill="none" stroke="black"/>
                  <path d="M 152,304 L 288,304" fill="none" stroke="black"/>
                  <path d="M 416,320 L 432,320" fill="none" stroke="black"/>
                  <path d="M 32,336 L 160,336" fill="none" stroke="black"/>
                  <path d="M 280,336 L 416,336" fill="none" stroke="black"/>
                  <path d="M 8,416 L 448,416" fill="none" stroke="black"/>
                  <path d="M 8,448 L 448,448" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="360,248 348,242.4 348,253.6" fill="black" transform="rotate(90,352,248)"/>
                  <polygon class="arrowhead" points="344,248 332,242.4 332,253.6" fill="black" transform="rotate(90,336,248)"/>
                  <polygon class="arrowhead" points="312,408 300,402.4 300,413.6" fill="black" transform="rotate(90,304,408)"/>
                  <polygon class="arrowhead" points="312,320 300,314.4 300,325.6" fill="black" transform="rotate(270,304,320)"/>
                  <polygon class="arrowhead" points="296,304 284,298.4 284,309.6" fill="black" transform="rotate(0,288,304)"/>
                  <polygon class="arrowhead" points="160,304 148,298.4 148,309.6" fill="black" transform="rotate(180,152,304)"/>
                  <polygon class="arrowhead" points="144,408 132,402.4 132,413.6" fill="black" transform="rotate(90,136,408)"/>
                  <polygon class="arrowhead" points="144,320 132,314.4 132,325.6" fill="black" transform="rotate(270,136,320)"/>
                  <polygon class="arrowhead" points="96,264 84,258.4 84,269.6" fill="black" transform="rotate(90,88,264)"/>
                  <polygon class="arrowhead" points="80,136 68,130.4 68,141.6" fill="black" transform="rotate(270,72,136)"/>
                  <g class="text">
                    <text x="76" y="52">Server</text>
                    <text x="80" y="100">Attestation</text>
                    <text x="132" y="164">Identity</text>
                    <text x="396" y="164">Workload</text>
                    <text x="144" y="180">Credentials</text>
                    <text x="396" y="180">to</text>
                    <text x="396" y="196">Workload</text>
                    <text x="416" y="212">Communication</text>
                    <text x="64" y="292">Agent</text>
                    <text x="328" y="292">Workloads</text>
                    <text x="212" y="324">Identity</text>
                    <text x="224" y="340">Credentials</text>
                    <text x="348" y="372">Identity</text>
                    <text x="80" y="388">Attestation</text>
                    <text x="360" y="388">Credentials</text>
                    <text x="36" y="436">Host</text>
                    <text x="96" y="436">Operating</text>
                    <text x="164" y="436">System</text>
                    <text x="208" y="436">and</text>
                    <text x="260" y="436">Hardware</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
  +-----------------+
  |     Server      |
  |                 |
  | +-------------+ |
  | | Attestation | |
  | +-------------+ |
  +---------+-------+
          ^ |                              . .
          | | Identity                     | | Workload
          | | Credentials                  | |    to
          | |                              | | Workload
          | |                              | | Communication
  +-------+-+------------------------------+-+-----------+
  |       | |                              v V           |
  |       | v                         +----------------+ |
  |  +----+----------+              +-+--------------+ | |
  |  | Agent         |              | Workloads      | | |
  |  |              <+--------------+>               | | |
  |  |            ^  |  Identity    |  ^             +-+ |
  |  +------------+--+  Credentials +--+-------------+   |
  |               |                    |                 |
  |               |                    | Identity        |
  |   Attestation |                    | Credentials     |
  |               v                    v                 |
  +------------------------------------------------------+
  | Host Operating System and Hardware                   |
  +------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
          <t>How the workload obtains its identity credentials and interacts with the agent is subject to different implementations. Some common mechanisms for obtaining this initial identity include:</t>
          <ul spacing="normal">
            <li>
              <t>File System - in this mechanism the identity credential is provisioned to the workload via the filesystem.</t>
            </li>
            <li>
              <t>Local API - the identity credential is provided through an API, such as a local domain socket (for example SPIFFE or QEMU guest agent) or network API (for example Cloud Provider Metadata Server).</t>
            </li>
            <li>
              <t>Environment Variables - identity credential may also be injected into workloads using operating system environment variables.</t>
            </li>
          </ul>
        </section>
        <section anchor="identity-credentials">
          <name>Identity Credentials</name>
          <t>The Agent provisions the identity credentials to the workload. These credentials are represented in form of JWT tokens and/or X.509 certificates.</t>
          <t>JWT bearer tokens are presented to another party as a proof of identity. They are signed to prevent forgery, however since these credentials are often not bound to other information it is possible that they could be stolen and reused elsewhere. To reduce some of these risks, bearer tokens may have a short lifespan. Alternatively, sender constrained tokens can be used such as TLS session binding.</t>
          <t>X.509 certificate credentials consist of two parts:</t>
          <ul spacing="normal">
            <li>
              <t>a certificate is a signed data structure that contains a public key and identity information</t>
            </li>
            <li>
              <t>a corresponding private key</t>
            </li>
          </ul>
          <t>The certificate is presented during authentication, however the private key is kept secret and only used in cryptographic computation to prove that the presenter has access to the private key that corresponds to the public key in the certificate.</t>
        </section>
      </section>
      <section anchor="workload-identity-use-cases">
        <name>Workload Identity Use Cases</name>
        <section anchor="service-authentication">
          <name>Service Authentication</name>
          <t>One of the most basic use cases for workload identity is authentication of one workload to another, such as in the case where one service is making a request to another service as part of a larger, more complex application. Following authentication, the request to the service offered by the workload it needs to be authorized. Even in this simple case the identity of a workload is often composed of many attributes such as:</t>
          <ul spacing="normal">
            <li>
              <t>Trigger Information</t>
            </li>
            <li>
              <t>Service Name</t>
            </li>
            <li>
              <t>Instance Name</t>
            </li>
            <li>
              <t>Role</t>
            </li>
            <li>
              <t>Environment</t>
            </li>
            <li>
              <t>Trust Domain</t>
            </li>
            <li>
              <t>Software Attestation</t>
            </li>
            <li>
              <t>Hardware Attestation</t>
            </li>
          </ul>
          <t>These attributes are used for various purposes such as:</t>
          <ul spacing="normal">
            <li>
              <t>ensuring the request is made to the correct service or service instance</t>
            </li>
            <li>
              <t>authorizing access to APIs and resources</t>
            </li>
            <li>
              <t>providing an audit trail of requests within a system</t>
            </li>
            <li>
              <t>providing context for other decisions made within a service</t>
            </li>
          </ul>
          <t>There are several methods defined to perform this authentication.  Some of the most common include:</t>
          <ul spacing="normal">
            <li>
              <t>TLS authentication of the server using X.509 certificates and bearer token, encoded as JWTs.</t>
            </li>
            <li>
              <t>Mutual TLS authentication using X.509 certificate for both client and server.</t>
            </li>
            <li>
              <t>TLS authentication of the server and HTTP request signing using a secret key.</t>
            </li>
          </ul>
          <t><xref target="arch-chain"/> illustrates the communication between different workloads. Two aspects are important
to highlight: First, there is a need to consider the interaction with workloads that are external
to the trust domain (sometimes called cross-domain). Second, the interaction does
not only occur between workloads that directly interact with each other but instead may also
take place across intermediate workloads (in an end-to-end style).</t>
          <figure anchor="arch-chain">
            <name>Workload-to-Workload Communication.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="520" viewBox="0 0 520 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,32 L 8,96" fill="none" stroke="black"/>
                  <path d="M 8,144 L 8,352" fill="none" stroke="black"/>
                  <path d="M 32,192 L 32,304" fill="none" stroke="black"/>
                  <path d="M 72,80 L 72,208" fill="none" stroke="black"/>
                  <path d="M 128,192 L 128,304" fill="none" stroke="black"/>
                  <path d="M 152,32 L 152,96" fill="none" stroke="black"/>
                  <path d="M 216,192 L 216,304" fill="none" stroke="black"/>
                  <path d="M 312,192 L 312,304" fill="none" stroke="black"/>
                  <path d="M 400,192 L 400,304" fill="none" stroke="black"/>
                  <path d="M 496,192 L 496,304" fill="none" stroke="black"/>
                  <path d="M 512,144 L 512,352" fill="none" stroke="black"/>
                  <path d="M 8,32 L 152,32" fill="none" stroke="black"/>
                  <path d="M 8,96 L 152,96" fill="none" stroke="black"/>
                  <path d="M 8,144 L 272,144" fill="none" stroke="black"/>
                  <path d="M 392,144 L 512,144" fill="none" stroke="black"/>
                  <path d="M 32,192 L 128,192" fill="none" stroke="black"/>
                  <path d="M 216,192 L 312,192" fill="none" stroke="black"/>
                  <path d="M 400,192 L 496,192" fill="none" stroke="black"/>
                  <path d="M 120,240 L 224,240" fill="none" stroke="black"/>
                  <path d="M 304,240 L 408,240" fill="none" stroke="black"/>
                  <path d="M 80,288 L 440,288" fill="none" stroke="black"/>
                  <path d="M 32,304 L 128,304" fill="none" stroke="black"/>
                  <path d="M 216,304 L 312,304" fill="none" stroke="black"/>
                  <path d="M 400,304 L 496,304" fill="none" stroke="black"/>
                  <path d="M 8,352 L 512,352" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="448,288 436,282.4 436,293.6" fill="black" transform="rotate(0,440,288)"/>
                  <polygon class="arrowhead" points="416,240 404,234.4 404,245.6" fill="black" transform="rotate(0,408,240)"/>
                  <polygon class="arrowhead" points="312,240 300,234.4 300,245.6" fill="black" transform="rotate(180,304,240)"/>
                  <polygon class="arrowhead" points="232,240 220,234.4 220,245.6" fill="black" transform="rotate(0,224,240)"/>
                  <polygon class="arrowhead" points="128,240 116,234.4 116,245.6" fill="black" transform="rotate(180,120,240)"/>
                  <polygon class="arrowhead" points="88,288 76,282.4 76,293.6" fill="black" transform="rotate(180,80,288)"/>
                  <polygon class="arrowhead" points="80,208 68,202.4 68,213.6" fill="black" transform="rotate(90,72,208)"/>
                  <polygon class="arrowhead" points="80,80 68,74.4 68,85.6" fill="black" transform="rotate(270,72,80)"/>
                  <g class="text">
                    <text x="84" y="52">Workload</text>
                    <text x="84" y="68">(external)</text>
                    <text x="296" y="148">Trust</text>
                    <text x="356" y="148">Boundary</text>
                    <text x="168" y="196">Hop-by-</text>
                    <text x="352" y="196">Hop-by-</text>
                    <text x="152" y="212">Hop</text>
                    <text x="336" y="212">Hop</text>
                    <text x="76" y="228">Workload</text>
                    <text x="172" y="228">Security</text>
                    <text x="260" y="228">Workload</text>
                    <text x="356" y="228">Security</text>
                    <text x="444" y="228">Workload</text>
                    <text x="72" y="292">O</text>
                    <text x="448" y="292">O</text>
                    <text x="168" y="308">E2E</text>
                    <text x="352" y="308">E2E</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
  +-----------------+
  |     Workload    |
  |    (external)   |
  |       ^         |
  +-------+---------+
          |
          |
  +-------+-------------------------Trust Boundary---------------+
  |       |                                                      |
  |       |                                                      |
  |  +----+------+ Hop-by-  +-----------+ Hop-by-  +-----------+ |
  |  |    v      | Hop      |           | Hop      |           | |
  |  | Workload  | Security | Workload  | Security | Workload  | |
  |  |          <+----------+>         <+----------+>          | |
  |  |           |          |           |          |           | |
  |  |           |          |           |          |           | |
  |  |    O<-----+----------+-----------+----------+---->O     | |
  |  +-----------+   E2E    +-----------+   E2E    +-----------+ |
  |                                                              |
  |                                                              |
  +--------------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
        </section>
        <section anchor="security-context-establishment-and-propagation">
          <name>Security Context Establishment and Propagation</name>
          <t>In a typical system of workloads additional information is needed in order for the workload to perform its function. For example, it is common for a workload to require information about a user or other entity that originated the request. Other types of information may include information about the hardware or software that the workload is running or information about what processing and validation has already been done to the request. This type of information is part of the security context that the workload uses during authorization, accounting and auditing. This context is propagated and possibly augmented from workload to workload using tokens. Workload identity comes into play to ensure that the information in the context can only be used by an authorized workload and that the context information originated from an authorized workload.</t>
        </section>
        <section anchor="service-authorization">
          <name>Service Authorization</name>
          <t>After authentication of the peer, a workload can perform authorization by verifying that the authenticated identity has the appropriate permissions to access the requested resources and perform required actions. This process involves evaluating the security context described previously. The workload validates security context, checks validity of permissions against its security policies to ensure that only authorized actions are allowed.</t>
        </section>
        <section anchor="delegation-and-impersonation">
          <name>Delegation and Impersonation</name>
          <t>TBD.</t>
        </section>
        <section anchor="asynchronous-and-batch-requests">
          <name>Asynchronous and Batch Requests</name>
          <t>TBD.</t>
        </section>
        <section anchor="cross-boundary-workload-identity">
          <name>Cross-boundary Workload Identity</name>
          <t>As workloads often need to communicate across trust boundaries, extra care needs to be taken when it comes to identity communication to ensure scalability and privacy. (TODO: align with OAuth cross domain identity and authorization)</t>
          <section anchor="egress-identity-generalization">
            <name>Egress Identity Generalization</name>
            <t>A workload communicating with a service, or another workload located outside the trust boundary may need to provide modified identity information. Detailed identity of internal workload originating the communication is relevant inside the trust boundary but could be excessive for the outside world and expose potentially sensitive internal topology information.</t>
            <t>A security gateway at the edge of a trust boundary can be used to validate identity information of the workload, perform context specific authorization of the transaction and replace workload specific identity with a generalized one for a given trust domain.</t>
          </section>
          <section anchor="inbound-gateway-identity-validation">
            <name>Inbound Gateway Identity Validation</name>
            <t>Inbound security gateway is a common design pattern for service protection. This functionality is often found in CDN services, API gateways, load balancers, Web Application Firewalls (WAFs) and other security solutions. Workload identity verification of inbound requests should be performed as a part of these security services. After validation of workload identity, the gateway may either leave it unmodified or replace it with its own identity to be validated by the destination.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="traffic-interception">
        <name>Traffic Interception</name>
        <t>Workloads communicating with applications may face different threats to traffic interception in different deployments. In many deployments security controls are deployed for internal communications at lower layers to reduce the risk of traffic observation and modification for network communications. When a security layer, such as TLS, is deployed in these environments. TLS may be terminated in various places, including the workload itself, and in various middleware devices, such as load balancers, gateways, proxies, and firewalls. Therefore, protection is provided only between each adjacent pair of TLS endpoints. There are no guarantees of confidentiality, integrity and correct identity passthrough in those middleware devices and services.</t>
      </section>
      <section anchor="information-disclosure">
        <name>Information Disclosure</name>
        <t>Observation and interception of network traffic is not the only means of disclosure in these systems. Other vectors of information leakage is through disclosure in log files and other observability and troubleshooting mechanisms. For example, an application may log the contents of HTTP headers containing JWT bearer tokens. The information in these logs may be made available to other systems with less stringent access controls, which may result in this token falling into an attackers hands who then uses it to compromise a system. This creates privacy risks and potential surface for reconnaissance attacks. If observed tokens can be reused, this also may allow attackers to impersonate workloads.</t>
      </section>
      <section anchor="workload-compromise">
        <name>Workload Compromise</name>
        <t>Even the most well-designed and implemented workloads may contain security flaws that allow an attacker to gain limited or full compromise. For example, a server side request forgery may result in the ability for an attacker to force the workload to make requests of other parts of a system even though the rest of the workload functionality may be unaffected. An attacker with this advantage may be able to utilize privileges of the compromised workload to attack other parts of the system. Therefore it is important that communicating workloads apply the principle of least privilege through security controls such as authorization.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-oauth-transaction-tokens">
          <front>
            <title>Transaction Tokens</title>
            <author fullname="Atul Tulshibagwale" initials="A." surname="Tulshibagwale">
              <organization>SGNL</organization>
            </author>
            <author fullname="George Fletcher" initials="G." surname="Fletcher">
              <organization>Capital One</organization>
            </author>
            <author fullname="Pieter Kasselman" initials="P." surname="Kasselman">
              <organization>Microsoft</organization>
            </author>
            <date day="3" month="July" year="2024"/>
            <abstract>
              <t>   Transaction Tokens (Txn-Tokens) enable workloads in a trusted domain
   to ensure that user identity and authorization context of an external
   programmatic request, such as an API invocation, are preserved and
   available to all workloads that are invoked as part of processing
   such a request.  Txn-Tokens also enable workloads within the trusted
   domain to optionally immutably assert to downstream workloads that
   they were invoked in the call chain of the request.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-transaction-tokens-03"/>
        </reference>
      </references>
    </references>
    <?line 277?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Todo: Add your name here.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
ZAaUcNRwl6dF9ULROgBcxm7kpG+EeCZnz6lgty0VTefCpT4Zqu5DQWxjOoE9
hiNZ2tS8jKncXHKbNLa1ov/yvMOK0tAuR9aN6fKi0pTjp3QmpW4+Blxy62ez
l4E3fGGmc/l2p45BFcYEHHUovn8vdFV1lJ106ZmsiTnUhqKjnOTdZjsTSvNU
Fwd5bIDV2hEmw/RyVcF/7Tn4wI1tSXU0zrj5hLTvQA51uqxlM0muUW2BmsU4
jTNybM893c5PfRCzyVglgy2otj7hn0+n2MUEFmJ8sFtpgOXRZyFjZYqiaw67
t11vQix38nwGlSotzOVY/0ORU67ZDN3TUYvt3twf4wr+sZumTXNdD6jyhl2y
k9ZMFF1t2Ffq9ONTUcGopSHoA4+4015g+tNg9HeWrZuO+Puj+3+sMB+jJyib
/VGQj0TjH/5797stkWZfziB83kzm+0mO6KOP03zI1gMDYw/hOvo4LBGp9y42
3X3U48OsTJrMSRI5Rx4PJ3beDX48/vh3XuL2yz6HZajvffzqNl8iJ5MQ159d
4+8f9Xg4i/sP/f1OS/wvUzLhKL3UDCl+n5zxDITKJjBTlk2lJAz7wnkLqLgG
twJcbLtae5sFYf1GLp3Dc1NzCZ2LvBxzZ82tRy7xaOt7RjU2TZauYSnvbTnW
PvokphrGLsx0DsBh9TZekOh3ZUpu8AyOi/NDyQCEfsoy78nkHl6sq/ebzcgK
+M7R4c7T0DyGbpv3KkMklLq+vvz1Ud2kSBNX5sBBaXPpnKw6RhL+hpk/CBUM
fetDjzA+hhi8MXEIL7WLJyHkh7t23fZJCXfjeMrdoXFJg73vMUX/GetWKWGT
/clrdpeDBu50mTU19SI7VUCktBLqzpIhwEViDjjMCpDDkDR9yDqJbyIg3E3g
lhzq1E24io4zvI7LTmVhacDpaMRVvmFXcaMw4ksEAKFPb4/Fvi04BnWS7kMD
lm9l8zfdEhSuXK0ewkcgVEPezAYvs1iXHjMh0IhMppJQg6nqAHEiWQrpbzpl
5Wu8L1RhSRpvVnaczRtkxXg3BJNYGFlVrrIaM6ihZNmfPRbFShX3loe4ADQ9
ky8SouoJk6liqLkPL2Ui4pCElu5k5M1St4zyZL1SlVrGounNGva0pvbx4+Mr
N+4Ce3ZXEJVSayyMfIz9ceKVC8rSoZfk/86d/zXUM3KR3PD1ybvgnHszEJxW
drfdehrbXwFfDTZnw2nSIB/93ZovcVLj9JoRk0peEmVElOE1bt/mzZVjvZXF
HruVqbcFKLJ00QHf/mK4XACQ9YNkTH1K+PhEXHN/dsj3/EXVGGdGEUoEJIKI
7QbcKhQ6zNGa1L07Zb4RFVQxRjVJgBIoQD2ByudX+W7I2pTcvziUvZsCW+C9
L5U1UsfadiyLOA3iZSLHMFqO2CVwDDoMXUIKVr0hM7JVwfz6c8GeVemq6nTh
ZWNaTnFiZyJQUmNKNcLYmg3fbMvvUic3SHy/vNM1qlwq3+WfAZgmYtMS/mDn
jtN8HkPjoGW8lgiNNLn+c/OSi40uOcLxW+yzO+jDcUyy9EyFvFD7mzvuGmoS
sE4dU97UnCv/i8NC4M7vgu1Gd4oHHeBMc6sWOTl8KR7MdIuop43DhYbGtCq9
ZOOdJlm53CRL/4J2AWG6vHoRupXGVMhxO8I3Ov8cRLUuQEeN6XZv8p4LjPhh
ZFVhI+rFE3uaNKsE+K2pOqfkDy0zX2WIJky704fMk115PnVU9VfVExfFJpYh
9l2xlUzcorTD0wPAOQKPYrqGpQn8SmEtAfv66yC33E5PzKF9Zwv2Me8SjcRq
0TNsSJICwVpde4nInWzKjEh3VxPYZNbIBbIbve8DG/OIL2Jpf0hhpe8ewVMs
qCs+JHPcVVHyAd3qOlkd2SAO5hcK0NtHpgAE51yTh7khbYyrCIX3ECzIZ3U6
oXdXXmJf+A7xi/Vh1/JKJZ6W335wTzR1MJo5kjOaSqaE45ZFUn7MdwFGW6k6
vRREu43Tms6Y333gQGaPz2aXOtApeXbnm8P44q501buQxkVmsMdumSB3qGox
dpXqMItfLLFjpDm586D1JS7KIt6T0v4mysILHnk7jQJkqHEi+1n51zmvnOei
DJYsfwbAscApNXWe40n9jW2/JlG1NmLZSVCRrQr3zxbaVbpIgJDUy8Zb44Mm
Qmwt8/VnQjMakkMMhFyoLlx1Ns3jiytti8pYuod02+OKjJMBQs8UgdMt1SnJ
siEmuDMMBpZh0cgA7g0aPs7bwlnwLRK9EAm0w71cKr55wGfLFwMzyDX7RCM6
bk68HhCeDqvRK2NIlpOe+DzClfn7C5AncYcQZdR8nYKSwyuI+1C0XPUQ1z2o
Hvu78/2Yxyq6tuGZntL3cgtuiaT6ra/x+teMkO6p0NHiaxyUH+AowKuGsW/c
pp5721VtqAO5NzUAF3OfCF+YBZMmi3s8AKCixL5viltrDjJ16zxWYO61pk5A
f/eXA0rUc8p6f5JLxS6gdL4LiFpD6pGvR+FlPwkePxWFeHNUewtHroPiMJep
x64swXc59uzhJ7CjDxz8+iTv26tHXoaDjEZUIwvlDGzEnrCZdxFxeoUxvzns
KB3V3aKSO59MZ8AiXhE0jGtEpde6ZauGF2wSpPaZz9cfyCn0tQfXLXBAWECi
43Byh/KN4VH/hRat4XekBIuPtdK2d83bt3IwisJ1p/RCSFgw93f8ZY0adIHi
ayEXCUyuawhJWaLTjELt24Edy7u2cWIpkOhlvOMRMVbmpV1avX+KNlz0S3S2
y12FioqvcmcWPmbSQAfsfWG8LrRrowZthK2sHr6gkg7tdGj86b0zBpTtxYuL
A2ckfykApgDAHNBIGd6GMplMwF4V93RftLivzQ5iGErZ2NHb87pbz7FY/KcT
kHOrMMc4M6U5FxdlKfama/gWFr954X8Aw6RlOBBOAAA=

-->

</rfc>
