<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-arch-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="WIMSE Architecture">Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-02"/>
    <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="October" day="21"/>
    <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>
      <ul spacing="normal">
        <li>
          <t>Workload Identity Token</t>
        </li>
      </ul>
      <t>A token that contains a workload identifier used for service to service authentication. The token is bound to a cryptographic key and requires that the presenter provide proof of possession of the secret key material. This token is further defined in <xref target="I-D.ietf-wimse-s2s-protocol"/></t>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <section anchor="whimsical-identity">
        <name>Workload Identity</name>
        <t>Workload identity construct consists of three basic building blocks: trust domain, workload identifier and workflow identity credentials. These components are sufficient for establishing authentication, authorization and accounting processes. More complex identity constructs can be created from these basic building blocks.</t>
        <section anchor="trust-domain">
          <name>Trust Domain</name>
          <t>A trust domain is a logical grouping of systems that share a common set of security controls and policies. Workload certificates and tokens are issued under the authority of a trust domain. Trust domains <bcp14>SHOULD</bcp14> be identified by a fully qualified domain name associated with the organization defining the trust domain. THe FQDN format of trust domain helps to ensure uniqueness of the trust domain identifier. A trust domain maps to one or more trust anchors for validating X.509 certificates and a mechanism to securely obtain a JWK Set <xref target="RFC7517"/> for validating WIMSE WIT tokens. This mapping <bcp14>MUST</bcp14> be obtained through a secure mechanism that ensures the authenticity and integrity of the mapping is fresh and not compromised. This secure mechanism is out of scope for this document.</t>
          <t>A single organization may define multiple trust domains for different purpose such as different departments or environments. Each trust domain must have a unique identifier. Workload identifiers are scoped within a trust domain. If two identifiers differ only by trust domain they still refer to two different entities.</t>
        </section>
        <section anchor="workload-identifier">
          <name>Workload Identifier</name>
          <t>The WIMSE architecture defines a workload identifier as a URI <xref target="RFC3986"/>. This URI is used in the subject fields in the certificates and tokens defined later in this document. The URI <bcp14>MUST</bcp14> meet the criteria for the URI type of Subject Alternative Name defined in Section 4.2.1.6 of <xref target="RFC5280"/>.</t>
          <ul empty="true">
            <li>
              <t>The name <bcp14>MUST NOT</bcp14> be a relative URI, and it <bcp14>MUST</bcp14> follow the URI syntax and
  encoding rules specified in <xref target="RFC3986"/>.  The name <bcp14>MUST</bcp14> include both a
  scheme and a scheme-specific-part.</t>
            </li>
          </ul>
          <t>In addition the URI <bcp14>MUST</bcp14> include an authority that identifies the trust domain within which the identifier is scoped. The trust domain <bcp14>SHOULD</bcp14> be a fully qualified domain name belonging to the organization defining the trust domain to help provide uniqueness for the trust domain identifier. The scheme and scheme specific part are not defined by this specification. An example of an identifier format that conforms to this definition is <eref target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE-ID.md">SPIFFE ID</eref>.</t>
          <t>While the URI encoding rules allow host names to be specified as IP addresses, IP addresses MUT NOT be used to represent trust domains except in the case where they are needed for compatibility with existing naming schemes.</t>
          <t>A workload identity only has meaning within the scope of a specific issuer. Two identities of the same value issued by different issuers may or may not refer to the same workload. In order to avoid collisions identity URIs <bcp14>SHOULD</bcp14> specify, in the URI's "authority" field, the trust domain associated with an issuer that is selected from a global name space such as host domains. However, the validator of an identity credential <bcp14>MUST</bcp14> make sure that they are using the correct issuer credential to verify the identity credential and that the issuer is trusted to issue tokens for the defined trust domain.</t>
        </section>
        <section anchor="workload-identity-credentials">
          <name>Workload 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 mitigate these risks and make the token more generally useful the WIMSE architecture defines a workload identity token that binds a JWT to a cryptographic key.</t>
          <t>Both X.509 certificate and workload identity token credentials consist of two parts:</t>
          <ul spacing="normal">
            <li>
              <t>a certificate or WIT 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 or WIT 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 corresponding to the public key.</t>
        </section>
        <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 the base identity upon which further identity and security context are 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 the 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. 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. After obtaining identity credentials from the Server, the agent passes them to the workload.</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>
      <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 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 client 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 the security context, and checks the 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>When source workloads send authenticated requests to destination workloads, those destination workloads may rely on upstream dependencies to fulfill such requests. Such access patterns are increasingly common in a microservices architecture. While X.509 certificates can be used for point-to-point authentication, such services relying on upstream microservices for answers, may use delegation and/or impersonation semantics as described in RFC 8693 OAuth 2.0 Access Token Exchange.</t>
          <t>WIMSE credentials constrain the subjects and actors identified in delegation and impersonation tokens to be bound by TrustDomains, and to follow their issuing authorities' trust configurations. Upstream workloads should consider the security context of delegation and/or impersonation tokens within and across Trust Domains, when arriving at authorization decisions.</t>
        </section>
        <section anchor="asynchronous-and-batch-requests">
          <name>Asynchronous and Batch Requests</name>
          <t>Source workloads may send authenticated asynchronous and batch requests to destination workloads. A destination workload may need to fulfill such requests with requests to authorized upstream protected resources and workloads, after the source workload credentials have expired. Credentials identifying the original source workload as subject may need to be obtained from the credential issuing authority with appropriately-downscoped context needed access to upstream workloads. These credentials should identify the workload as the actor in the actor chain, but may also identify other principals that the action is taken on behalf. To mitigate risks associated with long-duration credentials, these credentials should be bound to the workload identity credential such as an X.509 certificate or Workload Identity Token (WIT) of the acting service performing asynchronous computation on the source workload's behalf.</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 anchor="sec-combined-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>
        <reference anchor="RFC7517">
          <front>
            <title>JSON Web Key (JWK)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>A JSON Web Key (JWK) is a JavaScript Object Notation (JSON) data structure that represents a cryptographic key. This specification also defines a JWK Set JSON data structure that represents a set of JWKs. Cryptographic algorithms and identifiers for use with this specification are described in the separate JSON Web Algorithms (JWA) specification and IANA registries established by that specification.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7517"/>
          <seriesInfo name="DOI" value="10.17487/RFC7517"/>
        </reference>
        <reference anchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
            <author fullname="R. Fielding" initials="R." surname="Fielding"/>
            <author fullname="L. Masinter" initials="L." surname="Masinter"/>
            <date month="January" year="2005"/>
            <abstract>
              <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </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>
        <reference anchor="I-D.ietf-wimse-s2s-protocol">
          <front>
            <title>WIMSE Service to Service Authentication</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Daniel Feldman" initials="D." surname="Feldman">
              <organization>Independent</organization>
            </author>
            <author fullname="Joe Salowey" initials="J." surname="Salowey">
              <organization>Venafi</organization>
            </author>
            <author fullname="Arndt Schwenkschuster" initials="A." surname="Schwenkschuster">
              <organization>SPIRL</organization>
            </author>
            <author fullname="Yaron Sheffer" initials="Y." surname="Sheffer">
              <organization>Intuit</organization>
            </author>
            <date day="18" month="October" year="2024"/>
            <abstract>
              <t>   The WIMSE architecture defines authentication and authorization for
   software workloads in a variety of runtime environments, from the
   most basic ones up to complex multi-service, multi-cloud, multi-
   tenant deployments.  This document defines the simplest, atomic unit
   of this architecture: the protocol between two workloads that need to
   verify each other's identity in order to communicate securely.  The
   scope of this protocol is a single HTTP request-and-response pair.
   To address the needs of different setups, we propose two protocols,
   one at the application level and one that makes use of trusted TLS
   transport.  These two protocols are compatible, in the sense that a
   single call chain can have some calls use one protocol and some use
   the other.  Service A can call Service B with mutual TLS
   authentication, while the next call from Service B to Service C would
   be authenticated at the application level.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-s2s-protocol-01"/>
        </reference>
      </references>
    </references>
    <?line 295?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Todo: Add your name here.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
