<?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.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-arch-03" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.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-03"/>
    <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="2025" month="January" day="01"/>
    <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>
      <section anchor="workload-identity-system-scenarios">
        <name>Workload Identity System Scenarios</name>
        <section anchor="basic-workload-identity-scenario">
          <name>Basic Workload Identity Scenario</name>
          <figure anchor="arch-basic">
            <name>Basic example workload application system.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="688" viewBox="0 0 688 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,176 L 8,240" fill="none" stroke="black"/>
                  <path d="M 112,176 L 112,240" fill="none" stroke="black"/>
                  <path d="M 168,80 L 168,416" fill="none" stroke="black"/>
                  <path d="M 192,32 L 192,72" fill="none" stroke="black"/>
                  <path d="M 192,424 L 192,480" fill="none" stroke="black"/>
                  <path d="M 216,80 L 216,416" fill="none" stroke="black"/>
                  <path d="M 264,112 L 264,208" fill="none" stroke="black"/>
                  <path d="M 264,240 L 264,384" fill="none" stroke="black"/>
                  <path d="M 296,80 L 296,96" fill="none" stroke="black"/>
                  <path d="M 296,128 L 296,144" fill="none" stroke="black"/>
                  <path d="M 296,208 L 296,288" fill="none" stroke="black"/>
                  <path d="M 296,352 L 296,368" fill="none" stroke="black"/>
                  <path d="M 296,400 L 296,416" fill="none" stroke="black"/>
                  <path d="M 360,144 L 360,208" fill="none" stroke="black"/>
                  <path d="M 360,288 L 360,352" fill="none" stroke="black"/>
                  <path d="M 416,80 L 416,144" fill="none" stroke="black"/>
                  <path d="M 416,352 L 416,416" fill="none" stroke="black"/>
                  <path d="M 424,208 L 424,288" fill="none" stroke="black"/>
                  <path d="M 512,224 L 512,240" fill="none" stroke="black"/>
                  <path d="M 512,272 L 512,288" fill="none" stroke="black"/>
                  <path d="M 576,112 L 576,224" fill="none" stroke="black"/>
                  <path d="M 576,288 L 576,384" fill="none" stroke="black"/>
                  <path d="M 632,224 L 632,288" fill="none" stroke="black"/>
                  <path d="M 680,32 L 680,480" fill="none" stroke="black"/>
                  <path d="M 192,32 L 440,32" fill="none" stroke="black"/>
                  <path d="M 560,32 L 680,32" fill="none" stroke="black"/>
                  <path d="M 168,80 L 216,80" fill="none" stroke="black"/>
                  <path d="M 296,80 L 416,80" fill="none" stroke="black"/>
                  <path d="M 264,112 L 296,112" fill="none" stroke="black"/>
                  <path d="M 416,112 L 576,112" fill="none" stroke="black"/>
                  <path d="M 296,144 L 352,144" fill="none" stroke="black"/>
                  <path d="M 368,144 L 416,144" fill="none" stroke="black"/>
                  <path d="M 8,176 L 112,176" fill="none" stroke="black"/>
                  <path d="M 112,208 L 160,208" fill="none" stroke="black"/>
                  <path d="M 216,208 L 264,208" fill="none" stroke="black"/>
                  <path d="M 296,208 L 424,208" fill="none" stroke="black"/>
                  <path d="M 512,224 L 632,224" fill="none" stroke="black"/>
                  <path d="M 8,240 L 112,240" fill="none" stroke="black"/>
                  <path d="M 216,240 L 264,240" fill="none" stroke="black"/>
                  <path d="M 424,256 L 512,256" fill="none" stroke="black"/>
                  <path d="M 296,288 L 424,288" fill="none" stroke="black"/>
                  <path d="M 512,288 L 632,288" fill="none" stroke="black"/>
                  <path d="M 296,352 L 352,352" fill="none" stroke="black"/>
                  <path d="M 368,352 L 416,352" fill="none" stroke="black"/>
                  <path d="M 264,384 L 296,384" fill="none" stroke="black"/>
                  <path d="M 416,384 L 576,384" fill="none" stroke="black"/>
                  <path d="M 168,416 L 216,416" fill="none" stroke="black"/>
                  <path d="M 296,416 L 416,416" fill="none" stroke="black"/>
                  <path d="M 192,480 L 680,480" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="520,256 508,250.4 508,261.6" fill="black" transform="rotate(0,512,256)"/>
                  <polygon class="arrowhead" points="368,352 356,346.4 356,357.6" fill="black" transform="rotate(90,360,352)"/>
                  <polygon class="arrowhead" points="368,144 356,138.4 356,149.6" fill="black" transform="rotate(270,360,144)"/>
                  <polygon class="arrowhead" points="304,384 292,378.4 292,389.6" fill="black" transform="rotate(0,296,384)"/>
                  <polygon class="arrowhead" points="304,112 292,106.4 292,117.6" fill="black" transform="rotate(0,296,112)"/>
                  <polygon class="arrowhead" points="168,208 156,202.4 156,213.6" fill="black" transform="rotate(0,160,208)"/>
                  <g class="text">
                    <text x="464" y="36">Trust</text>
                    <text x="524" y="36">Boundary</text>
                    <text x="488" y="100">(3)</text>
                    <text x="348" y="116">Workload</text>
                    <text x="392" y="116">1</text>
                    <text x="192" y="132">G</text>
                    <text x="192" y="148">a</text>
                    <text x="192" y="164">t</text>
                    <text x="192" y="180">e</text>
                    <text x="384" y="180">(1)</text>
                    <text x="136" y="196">(2)</text>
                    <text x="192" y="196">w</text>
                    <text x="240" y="196">(3)</text>
                    <text x="32" y="212">App</text>
                    <text x="76" y="212">Client</text>
                    <text x="192" y="212">a</text>
                    <text x="192" y="228">y</text>
                    <text x="360" y="244">CA/Credential</text>
                    <text x="472" y="244">(1)</text>
                    <text x="192" y="260">S</text>
                    <text x="240" y="260">(4)</text>
                    <text x="360" y="260">Service</text>
                    <text x="572" y="260">Workload</text>
                    <text x="616" y="260">3</text>
                    <text x="192" y="276">e</text>
                    <text x="192" y="292">r</text>
                    <text x="192" y="308">v</text>
                    <text x="192" y="324">i</text>
                    <text x="384" y="324">(1)</text>
                    <text x="192" y="340">c</text>
                    <text x="192" y="356">e</text>
                    <text x="480" y="372">(4)</text>
                    <text x="348" y="388">Workload</text>
                    <text x="392" y="388">2</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                       +-------------------------------Trust Boundary---------------+
                       |                                                            |
                       |                                                            |
                    +-----+         +--------------+                                |
                    |     |         |              |       (3)                      |
                    |     |     +--->  Workload 1  +-------------------+            |
                    |  G  |     |   |              |                   |            |
                    |  a  |     |   +-------^------+                   |            |
                    |  t  |     |           |                          |            |
+------------+      |  e  |     |           | (1)                      |            |
|            | (2)  |  w  | (3) |           |                          |            |
| App Client +----->|  a  +-----+   +-------+-------+                  |            |
|            |      |  y  |         |               |          +-------+------+     |
+------------+      |     +-----+   | CA/Credential |    (1)   |              |     |
                    |  S  | (4) |   |    Service    +---------->   Workload 3 |     |
                    |  e  |     |   |               |          |              |     |
                    |  r  |     |   +-------+-------+          +-------+------+     |
                    |  v  |     |           |                          |            |
                    |  i  |     |           | (1)                      |            |
                    |  c  |     |           |                          |            |
                    |  e  |     |   +-------v------+                   |            |
                    |     |     |   |              |      (4)          |            |
                    |     |     +--->  Workload 2  +-------------------+            |
                    |     |         |              |                                |
                    +-----+         +--------------+                                |
                       |                                                            |
                       |                                                            |
                       |                                                            |
                       +------------------------------------------------------------+
]]></artwork>
            </artset>
          </figure>
          <t>The above diagram presents a basic workload application system.  The large box represents a trust domain within which the workload application is hosted.  Within this example
there are three workloads, a gateway, that accepts external clients and a CA/credential service that issues workload identity credentials for the trust domain.  External
to the workload application system there is an application client that calls APIs on workloads.</t>
          <t>Here is a brief summary of each component</t>
          <ul spacing="normal">
            <li>
              <t>Trust Domain</t>
            </li>
          </ul>
          <t>The large box represents a trust domain of the application that is composed of several workloads.  A trust domain may have a more complex internal structure with more workloads, multiple gateways, internal infrastructure, and other services.</t>
          <ul spacing="normal">
            <li>
              <t>Workload</t>
            </li>
          </ul>
          <t>Three workloads are shown.  Each workload is an instance of running software executing for a specific purpose.  Workloads obtain their identity credentials from a Credentials Service (1) and use them to authenticate to other workloads and systems in the process
of sending and receiving requests to and from external systems or other internal workloads.</t>
          <ul spacing="normal">
            <li>
              <t>Gateway Service</t>
            </li>
          </ul>
          <t>A gateway service typically acts as an intermediary between the internal application trust domain and external systems. The gateway is responsible for ensuring appropriate isolation between external and internal domains. It also routes incoming requests to the correct workload.
The gateway may also handle authentication, token exchange, and token transformation.</t>
          <ul spacing="normal">
            <li>
              <t>CA/Credential Service</t>
            </li>
          </ul>
          <t>In this diagram the token/Credential service is a service responsible for issuing workload identities to workloads in the same trust domain. The credentials are often X.509 based or JWT based.</t>
          <t>High level flows within the diagram</t>
          <ul spacing="normal">
            <li>
              <t>(1) Workload Identity Credential Distribution</t>
            </li>
          </ul>
          <t>Workloads typically retrieve their workload identity credentials early in their lifecycle from a credentials service associated with their trust domain. The protocol interaction for
obtaining credentials varies with deployment and is not detailed here.</t>
          <ul spacing="normal">
            <li>
              <t>(2) Application client Requests</t>
            </li>
          </ul>
          <t>Clients send API requests to the application. In the example above, the gateway routes the request to the correct workload. In addition, the gateway may assist in authenticating the incoming request and provide information resulting from the authentication to the target workload. The authentication exchange is not covered in detail in this example.
The client request is typically made over HTTPS, but other protocols may be used in some systems. The gateway usually terminates the TLS session so it has visibility into the request in order to route it correctly.</t>
          <ul spacing="normal">
            <li>
              <t>(3) API request to workload 1</t>
            </li>
          </ul>
          <t>The gateway is configured to forward requests to the correct workload.  The gateway often modifies the request to include specific authentication information about the application client and to remove any information that should not be forwarded internally.  The gateway authenticates the workload before forwarding the request.  This authentication usually uses TLS. The target workload may authenticate the gateway using TLS or some other means. As part of servicing the request the workload must make a request to another workload in the system.  In this scenario the workload is making a request to workload 3 over HTTPS.  Workload 1 may be able to authenticate the identity of workload 3 through the TLS protocol to ensure it is making a request of the right party.  Workload 3 will authenticate workload 1 using its workload identity credentials. If the workload identity credentials are X.509 certificates then this can happen through TLS client authentication (mutual TLS). Alternatively, the workloads can use a JWT based authentication mechanism to authenticate on another. Workload three can use the authenticated identity of workload 1 to determine which APIs workload 1 is authorized 2 and to associated the authenticated identity with logs and other audit information.</t>
          <ul spacing="normal">
            <li>
              <t>(4) API request to workload 2</t>
            </li>
          </ul>
          <t>Similarly to the previous flow, the gateway may determine that for another API call, the application client's request needs to be handled by workload 2. The case behaves the same as the previous flow except that the gateway may need to authenticate workload 2 before forwarding traffic to it. Workload 3 will then authorize and audit the request based on the authenticated identity of workload 2. Workload 2 and workload 1 may be authorized to use different APIs on workload 3. If workload 1 or 2 makes an API request that it is not authorized for, then workload 3 will reject the request.</t>
        </section>
        <section anchor="context-and-workload-identity">
          <name>Context and workload Identity</name>
          <figure anchor="arch-context">
            <name>Context example workload application system.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="512" width="528" viewBox="0 0 528 512" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,208 L 8,256" fill="none" stroke="black"/>
                  <path d="M 72,208 L 72,256" fill="none" stroke="black"/>
                  <path d="M 120,80 L 120,416" fill="none" stroke="black"/>
                  <path d="M 144,32 L 144,80" fill="none" stroke="black"/>
                  <path d="M 144,416 L 144,480" fill="none" stroke="black"/>
                  <path d="M 168,80 L 168,416" fill="none" stroke="black"/>
                  <path d="M 224,208 L 224,272" fill="none" stroke="black"/>
                  <path d="M 328,64 L 328,160" fill="none" stroke="black"/>
                  <path d="M 328,208 L 328,272" fill="none" stroke="black"/>
                  <path d="M 384,208 L 384,272" fill="none" stroke="black"/>
                  <path d="M 464,64 L 464,160" fill="none" stroke="black"/>
                  <path d="M 496,208 L 496,272" fill="none" stroke="black"/>
                  <path d="M 520,32 L 520,480" fill="none" stroke="black"/>
                  <path d="M 144,32 L 328,32" fill="none" stroke="black"/>
                  <path d="M 448,32 L 520,32" fill="none" stroke="black"/>
                  <path d="M 328,64 L 464,64" fill="none" stroke="black"/>
                  <path d="M 120,80 L 168,80" fill="none" stroke="black"/>
                  <path d="M 168,96 L 320,96" fill="none" stroke="black"/>
                  <path d="M 176,128 L 328,128" fill="none" stroke="black"/>
                  <path d="M 328,160 L 464,160" fill="none" stroke="black"/>
                  <path d="M 8,208 L 72,208" fill="none" stroke="black"/>
                  <path d="M 224,208 L 328,208" fill="none" stroke="black"/>
                  <path d="M 384,208 L 496,208" fill="none" stroke="black"/>
                  <path d="M 72,240 L 112,240" fill="none" stroke="black"/>
                  <path d="M 168,240 L 216,240" fill="none" stroke="black"/>
                  <path d="M 328,240 L 376,240" fill="none" stroke="black"/>
                  <path d="M 8,256 L 72,256" fill="none" stroke="black"/>
                  <path d="M 224,272 L 328,272" fill="none" stroke="black"/>
                  <path d="M 384,272 L 496,272" fill="none" stroke="black"/>
                  <path d="M 120,416 L 168,416" fill="none" stroke="black"/>
                  <path d="M 144,480 L 520,480" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="384,240 372,234.4 372,245.6" fill="black" transform="rotate(0,376,240)"/>
                  <polygon class="arrowhead" points="328,96 316,90.4 316,101.6" fill="black" transform="rotate(0,320,96)"/>
                  <polygon class="arrowhead" points="224,240 212,234.4 212,245.6" fill="black" transform="rotate(0,216,240)"/>
                  <polygon class="arrowhead" points="184,128 172,122.4 172,133.6" fill="black" transform="rotate(180,176,128)"/>
                  <polygon class="arrowhead" points="120,240 108,234.4 108,245.6" fill="black" transform="rotate(0,112,240)"/>
                  <g class="text">
                    <text x="352" y="36">Trust</text>
                    <text x="412" y="36">Boundary</text>
                    <text x="392" y="100">Context</text>
                    <text x="256" y="116">(3)</text>
                    <text x="392" y="132">Service</text>
                    <text x="256" y="148">(c)</text>
                    <text x="144" y="164">G</text>
                    <text x="144" y="180">a</text>
                    <text x="40" y="196">(1)</text>
                    <text x="144" y="196">t</text>
                    <text x="144" y="212">e</text>
                    <text x="48" y="228">App</text>
                    <text x="96" y="228">(2)</text>
                    <text x="144" y="228">w</text>
                    <text x="192" y="228">(4)</text>
                    <text x="360" y="228">(5)</text>
                    <text x="44" y="244">Client</text>
                    <text x="144" y="244">a</text>
                    <text x="268" y="244">workload</text>
                    <text x="312" y="244">1</text>
                    <text x="436" y="244">workload</text>
                    <text x="480" y="244">2</text>
                    <text x="96" y="260">(a)</text>
                    <text x="144" y="260">y</text>
                    <text x="192" y="260">(c)</text>
                    <text x="360" y="260">(c)</text>
                    <text x="144" y="292">S</text>
                    <text x="144" y="308">e</text>
                    <text x="144" y="324">r</text>
                    <text x="144" y="340">v</text>
                    <text x="144" y="356">i</text>
                    <text x="144" y="372">c</text>
                    <text x="144" y="388">e</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                 +-----------------------Trust Boundary---------+
                 |                                              |
                 |                      +----------------+      |
              +--+--+                   |                |      |
              |     +------------------>|    Context     |      |
              |     |         (3)       |                |      |
              |     |<------------------+    Service     |      |
              |     |         (c)       |                |      |
              |  G  |                   +----------------+      |
              |  a  |                                           |
   (1)        |  t  |                                           |
+-------+     |  e  |      +------------+      +-------------+  |
|   App | (2) |  w  | (4)  |            |  (5) |             |  |
| Client+---->|  a  +----->| workload 1 +----->|  workload 2 |  |
+-------+ (a) |  y  | (c)  |            |  (c) |             |  |
              |     |      +------------+      +-------------+  |
              |  S  |                                           |
              |  e  |                                           |
              |  r  |                                           |
              |  v  |                                           |
              |  i  |                                           |
              |  c  |                                           |
              |  e  |                                           |
              |     |                                           |
              +--+--+                                           |
                 |                                              |
                 |                                              |
                 |                                              |
                 +----------------------------------------------+

]]></artwork>
            </artset>
          </figure>
          <t>In many cases the application system uses other security context information about the request during authorization and auditing.  The following is a basic scenario that illustrates the propagation of security context in the workload system.
Some of the components and interactions have been removed from the previous scenario for simplicity.</t>
          <ul spacing="normal">
            <li>
              <t>Context Service
This scenario adds a context service component which is responsible for creating security context based on authentication and other calculations. Context can be represented in many ways; it can be a plaintext data structure, a signed data structure such as a jwt or a pointer used to lookup the context as a data structure stored somewhere else. In one common example, creating the context may involve a token exchange converting an OAuth 2.0 access token into a different token format, such as a transaction token,  that is understood by internal services.</t>
            </li>
            <li>
              <t>(1) Initial Authentication
In the initial authentication the gateway service obtains credentials it can use with the gateway service. This authentication may involve several steps and may be performed by an external entity such as an identity provider. The authentication process will result in a credential that the gateway service can evaluate. For example, the credential could be an OAuth Access token.
If the client already has an access token that it can use to authenticate to the gateway, such as an X.509 certificate, then it may skip this step.</t>
            </li>
            <li>
              <t>(2) Application Client Request
The application client makes a request to the gateway over HTTPS.  The client may be authenticated to the gateway through TLS client authentication (mutual TLS) or through a credential such as an access token obtained in step 1.</t>
            </li>
            <li>
              <t>(3) Establishing the request context
The gateway service requests a security context token (c) from a token service. This process may entail sending an access token (a) along with other information to a token exchange endpoint to obtain the context token, which contains information about the entity accessing the system. This context is typically only relevant to the internal system and is not returned to the client.
The gateway may use alternative mechanisms to get the internal security context information (c).</t>
            </li>
            <li>
              <t>(4) Forwarding Request to Workload
The gateway forwards the request along with the context information (c) to the appropriate workload. A bearer token, such as an access token (a), is not usually forwarded as it is only meant for external access. The workload uses information in the context token in applying authorization policy to the application client's request.
If the workload does not receive a context token, then it will deny requests that rely on information from the token.</t>
            </li>
            <li>
              <t>(5) Making Additional Workload Originated Requests
The workload may need to make requests of other workloads. When making these requests, the workload includes the context information so Workload 2 can authorize and audit the request. Workload 2 may have a policy requiring Workload 1 to authenticate its service identity and provide valid context information (c) to access certain APIs.</t>
            </li>
          </ul>
        </section>
        <section anchor="cross-domain-communication">
          <name>Cross-Domain Communication</name>
          <figure anchor="arch-cross">
            <name>External request workload application system.</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="608" width="528" viewBox="0 0 528 608" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 8,144 L 8,192" fill="none" stroke="black"/>
                  <path d="M 72,144 L 72,192" fill="none" stroke="black"/>
                  <path d="M 120,64 L 120,352" fill="none" stroke="black"/>
                  <path d="M 144,32 L 144,64" fill="none" stroke="black"/>
                  <path d="M 144,352 L 144,416" fill="none" stroke="black"/>
                  <path d="M 168,64 L 168,352" fill="none" stroke="black"/>
                  <path d="M 176,512 L 176,576" fill="none" stroke="black"/>
                  <path d="M 224,144 L 224,208" fill="none" stroke="black"/>
                  <path d="M 240,208 L 240,512" fill="none" stroke="black"/>
                  <path d="M 304,272 L 304,336" fill="none" stroke="black"/>
                  <path d="M 312,512 L 312,576" fill="none" stroke="black"/>
                  <path d="M 328,144 L 328,208" fill="none" stroke="black"/>
                  <path d="M 360,512 L 360,576" fill="none" stroke="black"/>
                  <path d="M 384,144 L 384,208" fill="none" stroke="black"/>
                  <path d="M 392,208 L 392,272" fill="none" stroke="black"/>
                  <path d="M 400,272 L 400,336" fill="none" stroke="black"/>
                  <path d="M 464,208 L 464,512" fill="none" stroke="black"/>
                  <path d="M 488,512 L 488,576" fill="none" stroke="black"/>
                  <path d="M 496,144 L 496,208" fill="none" stroke="black"/>
                  <path d="M 520,32 L 520,416" fill="none" stroke="black"/>
                  <path d="M 144,32 L 352,32" fill="none" stroke="black"/>
                  <path d="M 472,32 L 520,32" fill="none" stroke="black"/>
                  <path d="M 120,64 L 168,64" fill="none" stroke="black"/>
                  <path d="M 8,144 L 72,144" fill="none" stroke="black"/>
                  <path d="M 224,144 L 328,144" fill="none" stroke="black"/>
                  <path d="M 384,144 L 496,144" fill="none" stroke="black"/>
                  <path d="M 72,176 L 112,176" fill="none" stroke="black"/>
                  <path d="M 168,176 L 216,176" fill="none" stroke="black"/>
                  <path d="M 328,176 L 376,176" fill="none" stroke="black"/>
                  <path d="M 8,192 L 72,192" fill="none" stroke="black"/>
                  <path d="M 224,208 L 328,208" fill="none" stroke="black"/>
                  <path d="M 384,208 L 496,208" fill="none" stroke="black"/>
                  <path d="M 304,272 L 400,272" fill="none" stroke="black"/>
                  <path d="M 304,336 L 400,336" fill="none" stroke="black"/>
                  <path d="M 120,352 L 168,352" fill="none" stroke="black"/>
                  <path d="M 144,416 L 520,416" fill="none" stroke="black"/>
                  <path d="M 176,512 L 232,512" fill="none" stroke="black"/>
                  <path d="M 248,512 L 312,512" fill="none" stroke="black"/>
                  <path d="M 360,512 L 456,512" fill="none" stroke="black"/>
                  <path d="M 472,512 L 488,512" fill="none" stroke="black"/>
                  <path d="M 176,576 L 312,576" fill="none" stroke="black"/>
                  <path d="M 360,576 L 488,576" fill="none" stroke="black"/>
                  <path d="M 312,208 C 320.83064,208 328,200.83064 328,192" fill="none" stroke="black"/>
                  <path d="M 400,208 C 391.16936,208 384,200.83064 384,192" fill="none" stroke="black"/>
                  <path d="M 384,272 C 392.83064,272 400,279.16936 400,288" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="472,512 460,506.4 460,517.6" fill="black" transform="rotate(90,464,512)"/>
                  <polygon class="arrowhead" points="384,176 372,170.4 372,181.6" fill="black" transform="rotate(0,376,176)"/>
                  <polygon class="arrowhead" points="248,512 236,506.4 236,517.6" fill="black" transform="rotate(90,240,512)"/>
                  <polygon class="arrowhead" points="224,176 212,170.4 212,181.6" fill="black" transform="rotate(0,216,176)"/>
                  <polygon class="arrowhead" points="120,176 108,170.4 108,181.6" fill="black" transform="rotate(0,112,176)"/>
                  <g class="text">
                    <text x="376" y="36">Trust</text>
                    <text x="436" y="36">Boundary</text>
                    <text x="144" y="100">G</text>
                    <text x="144" y="116">a</text>
                    <text x="144" y="132">t</text>
                    <text x="144" y="148">e</text>
                    <text x="48" y="164">App</text>
                    <text x="96" y="164">(1)</text>
                    <text x="144" y="164">w</text>
                    <text x="192" y="164">(2)</text>
                    <text x="360" y="164">(4)</text>
                    <text x="44" y="180">Client</text>
                    <text x="144" y="180">a</text>
                    <text x="268" y="180">workload</text>
                    <text x="312" y="180">1</text>
                    <text x="436" y="180">workload</text>
                    <text x="480" y="180">2</text>
                    <text x="96" y="196">(a)</text>
                    <text x="144" y="196">y</text>
                    <text x="192" y="196">(c)</text>
                    <text x="360" y="196">(c)</text>
                    <text x="144" y="228">S</text>
                    <text x="144" y="244">e</text>
                    <text x="224" y="244">(3)</text>
                    <text x="376" y="244">(5)</text>
                    <text x="408" y="244">(c)</text>
                    <text x="144" y="260">r</text>
                    <text x="144" y="276">v</text>
                    <text x="144" y="292">i</text>
                    <text x="352" y="292">Token</text>
                    <text x="144" y="308">c</text>
                    <text x="448" y="308">(6)</text>
                    <text x="480" y="308">(t)</text>
                    <text x="144" y="324">e</text>
                    <text x="352" y="324">Service</text>
                    <text x="244" y="532">Infrastructure</text>
                    <text x="428" y="532">External</text>
                    <text x="240" y="564">Service</text>
                    <text x="424" y="564">Service</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
                 +--------------------------Trust Boundary------+
                 |                                              |
              +--+--+                                           |
              |     |                                           |
              |  G  |                                           |
              |  a  |                                           |
              |  t  |                                           |
+-------+     |  e  |      +------------+      +-------------+  |
|   App | (1) |  w  | (2)  |            |  (4) |             |  |
| Client+---->|  a  +----->| workload 1 +----->|  workload 2 |  |
+-------+ (a) |  y  | (c)  |            |  (c) |             |  |
              |     |      +-+---------++      ++--------+---+  |
              |  S  |        |                  |        |      |
              |  e  |     (3)|               (5)|(c)     |      |
              |  r  |        |                  |        |      |
              |  v  |        |       +-+--------++       |      |
              |  i  |        |       |   Token   |       |      |
              |  c  |        |       |           |    (6)|(t)   |
              |  e  |        |       |  Service  |       |      |
              |     |        |       +-----------+       |      |
              +--+--+        |                           |      |
                 |           |                           |      |
                 |           |                           |      |
                 |           |                           |      |
                 +-----------+---------------------------+------+
                             |                           |
                             |                           |
                             |                           |
                             |                           |
                             |                           |
                     +-------v--------+     +------------v--+
                     | Infrastructure |     |    External   |
                     |                |     |               |
                     |    Service     |     |    Service    |
                     +----------------+     +---------------+

]]></artwork>
            </artset>
          </figure>
          <t>In many applications workloads must make requests of infrastructure that operates as a different trust domain or external services that are in a separate trust domain. Figure <xref target="arch-cross"/> shows this scenario. The scenario shows some new components described below.
Components and interactions from previous scenarios are still relevant to this example, but are omitted for simplicity.</t>
          <ul spacing="normal">
            <li>
              <t>Token Service - the token service is responsible for exchanging information that is internal to the system such as service identity and/or security context information for a token that can be presented to an external service to gain access to infrastructure or an external service.  Note that in some cases the token service may reside in a different trust domain or there may be token services in multiple trust domains.  In some cases the workload will need to contact token services in various domains in order to gain access to infrastructure or external service.</t>
            </li>
            <li>
              <t>Infrastructure Service - this service is often part of the application, but it is managed by an infrastructure provider and may require different information to access it.</t>
            </li>
            <li>
              <t>External Service - this service is distinct from the application and hosted in a separate trust domain.  This trust domain often has different access requirements that workloads in the internal trust domain.</t>
            </li>
          </ul>
          <t>Some example interactions in this scenario:</t>
          <ul spacing="normal">
            <li>
              <t>(1) The application client is making requests with authentication information as in the other scenarios</t>
            </li>
            <li>
              <t>(2) The gateway forwards the request to the appropriate workload with the security context information</t>
            </li>
            <li>
              <t>(3) The workload needs to access an infrastructure service and, because it is managed by the same organization, it authenticates to the service directly using its workload credentials.</t>
            </li>
            <li>
              <t>(4) Workload 1 contacts Workload 2 to perform an operation. This request is accompanied by a security context as in the other scenarios.</t>
            </li>
            <li>
              <t>(5) Workload 2 determines it needs to communicate with an external service.  In order to gain access to this service it must first obtain a token/credential (t) that it can use externally.  It authenticates to the token service using its workload identity and provides security context information.  The token service determines what type of externally usable token to issue to the workload.</t>
            </li>
            <li>
              <t>(6) Workload 2 uses this new token/credential (t) to access the external service.</t>
            </li>
            <li>
              <t>Note that in (3) and (6) the workload may need to authenticate to an external token service to obtain an access token to access the system in the foreign trust domain.</t>
            </li>
          </ul>
        </section>
      </section>
      <section anchor="workload-identity-use-cases">
        <name>Workload Identity Use Cases</name>
        <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 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>SPIRL</organization>
            </author>
            <date day="30" month="December" 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-04"/>
        </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 507?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Todo: Add your name here.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
6QqStRpKhrVagjrqenqPOhjes9B9X37Aq11+0FdTBh18tcsSQ7MOEkb/y3eD
4uZOP0zDT/HIfMHGEsjE85ip8VTv6BhYwsfMmvpF4ZhXryiBcq4n+w96spOd
01dz7VUB5CN9Kp2Ng46ieW2JjpmUsxn/oTeXWC3FztdW0a3tYx0uxNBUSXIt
SIKhUf3w6ItnTWvVOaNJUiYAuRyeYBtcQf8keCVsI/ThhqKsv0UltFPoeFXk
bELA8Jrmej/7ocb+/VgpNLl14IVt0E5hfZvJWNJI4ruBQ/2Na7ODy5hDl0m/
YPjm94+f/Zgt5WiGSSixS28mQViS9x7RfZAv1ZH1zLU5pXzyAXqIq7DX2v4B
dAW0Gj0ib2A1oVMC3ZP1E/eTpXzNqJuw0VsHZhAjzDRgJ5WEppGaKPWPdZIw
Ry+qkEi8rrloDFTycGkZUUffsu6nU2KiSWW2M1a+xk3o9yzGV4yrbqjSVYv7
YmOB4HTUy6HGaeeVpFr/SUjK7rWc6LutQqIp8VBwGfWNwqQSbpo9vnJV9M8R
4/EqE5IliG1hr15lFPvNcOyk5eYN6LRgzB1zo5tiiTdhnRln2f2wr9iYndy3
0tBFPr+qS5cSYLdlzv0oyeydNfejWE2usrng6xsjiNxxWOIQ6o8ONzbZBYR+
JBbztOuL4DRRIyLsRNx47VUDIynuaVuDG4rqD7nhi9yIBI+yZNAERs5HajCv
ETveWL8oe3+JkZLX1A6/DG1hFmC3cndigjy+rI1ILkIrJ00sXjsAeBG79BsX
YNvPTZ5mmU3wJ74UuW0FMSal9rmwjQYKi4k992eIlzjN7KOu5pyrh1d7oux6
FvJb+wX4g8MTpqjDvuklIObbXaCmI/3i4mUgEb0dmOfLza0+0QinWxrBDO8W
WCQXuYaWN/GQNLY3tizP6QYsucAF2LIBimux4dWqWK5KLGw/hvOv8e1Ygj5U
6WHiNHQLa3Tw22srjYGtEUrXaamVxBcOMDaEd9d5Kmp26GvG5DT+8+EU716o
K2lUbmfDtMURpi1SomU9n2+b/g22DETwbOv70iMeW0UxsVMcBzjPaS8FOJpG
LUZw+Y6wnOPFsbdRa43oA/YfumoxaeuJo+udd6U7vLsZGvQpq34eKOIOs1Qp
/cug5neUjGufuPnp7s+tLYKHUnM+4OfdP2wIa3kdgeq8mcx2k266zp6vrS10
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
F2U7MGr5unO+feV/AwVgavgAngAA

-->

</rfc>
