<?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.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-arch-04" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.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-04"/>
    <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 abbrev="H-BRS">University of Applied Sciences Bonn-Rhein-Sieg</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>Hannes.Tschofenig@gmx.net</email>
      </address>
    </author>
    <date year="2025" month="March" day="03"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 39?>

<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 43?>

<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. Workloads make use of identity information and additional context information to perform authentication and authorization. Workload identity credentials are used to authenticate communications between workloads.</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. 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. Identity proxy <bcp14>MAY</bcp14> introduce additional context based on source identifier, communication properties and administrative policy. This context <bcp14>MAY</bcp14> be communicated as a transaction token <xref target="I-D.ietf-oauth-transaction-tokens"/>.</t>
      <ul spacing="normal">
        <li>
          <t>Remote Attestation</t>
        </li>
      </ul>
      <t>The term "attestation", as defined in <xref target="RFC9683"/>, refers to the process of generating and evaluating remote attestation Evidence. <xref target="RFC9334"/> describes Evidence and the different communication patterns.</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>
      <ul spacing="normal">
        <li>
          <t>Trust Domain</t>
        </li>
      </ul>
      <t>The collection of workloads under the control of a single administrative authority. It is a logical domain within which authentication and authorization of workloads is managed and enforced.</t>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <section anchor="whimsical-identity">
        <name>Workload Identity Concepts</name>
        <t>Workload identity construct consists of three basic building blocks: trust domain, workload identifier and identity credentials. These components are sufficient for establishing authentication, authorization and accounting processes. More complex workload 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 a trust domain helps to ensure global 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 purposes such as different departments or environments. Each trust domain must have a unique domain 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 IP addresses are allowed as host names in the URI encoding rules, they <bcp14>MUST NOT</bcp14> be used to represent trust domains except in the case where they are needed for compatibility with legacy naming schemes.</t>
          <t>A workload identifier only has a meaning within the scope of a specific issuer. Two identities of the same value signed 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>An 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 <bcp14>MAY</bcp14> also implement identity proxy functionality including 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-identifiers-and-credentials">
          <name>Bootstrapping Workload Identifiers and Credentials</name>
          <t>A workload needs to obtain its identifier and associated credentials early in its lifecycle. It also needs to learn what trust domain it belongs to. The identifier, trust domain and credentials forms the basis from which further credentials, attributes, identifiers and security context are derived.</t>
          <t>Identifier and credential bootstrapping often utilizes attribute information
provisioned through mechanisms specific to hosting platforms and
orchestration services. This initial bootstrapping information is
used to issue specific 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 identifiers and credentials 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 identifiers and credentials. The agent provides attestation evidence and other
relevant information to a server. The server validates this
information and provides the agent with identifiers and 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 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. The context may be associated with a specific source or target workload by binding it to a specific workload identifier. This may indicate that the context originated from a specific workload, or that only a specific workload may make use of the context. A workload may also use a workload identity credential to bind a context to one or more transaction so the receiver can verify which workload initiated the transaction and the context that was intended for the transaction.</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 a trust domain, 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. The detailed identity of an 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>For example, in a microservices architecture, an internal service may use workload-specific identities that include fine-grained details such as instance names or deployment-specific attributes. When interacting with external systems, exposing such details may inadvertently provide attackers with insights into the internal deployment structure, scaling strategies, security policies, technologies in use, or failover mechanisms, potentially giving them a tactical advantage. In such cases, an identity proxy at the trust boundary can generalize the workload identity by replacing the specific microservice instance name with the name of the overall service. This allows external parties to recognize the service while abstracting internal deployment details.</t>
            <t>A security gateway implementing Identity Proxy functionality at the edge of a trust boundary can 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. This approach ensures that external communications adhere to security and privacy requirements while maintaining interoperability across trust boundaries.</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="RFC9334">
          <front>
            <title>Remote ATtestation procedureS (RATS) Architecture</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="D. Thaler" initials="D." surname="Thaler"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="N. Smith" initials="N." surname="Smith"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="January" year="2023"/>
            <abstract>
              <t>In network protocol exchanges, it is often useful for one end of a communication to know whether the other end is in an intended operating state. This document provides an architectural overview of the entities involved that make such tests possible through the process of generating, conveying, and evaluating evidentiary Claims. It provides a model that is neutral toward processor architectures, the content of Claims, and protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9334"/>
          <seriesInfo name="DOI" value="10.17487/RFC9334"/>
        </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="RFC9683">
          <front>
            <title>Remote Integrity Verification of Network Devices Containing Trusted Platform Modules</title>
            <author fullname="G. C. Fedorkow" initials="G. C." role="editor" surname="Fedorkow"/>
            <author fullname="E. Voit" initials="E." surname="Voit"/>
            <author fullname="J. Fitzgerald-McKay" initials="J." surname="Fitzgerald-McKay"/>
            <date month="December" year="2024"/>
            <abstract>
              <t>This document describes a workflow for remote attestation of the integrity of firmware and software installed on network devices that contain Trusted Platform Modules (TPMs), as defined by the Trusted Computing Group (TCG), or equivalent hardware implementations that include the protected capabilities, as provided by TPMs.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9683"/>
          <seriesInfo name="DOI" value="10.17487/RFC9683"/>
        </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="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="17" month="January" year="2025"/>
            <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-02"/>
        </reference>
      </references>
    </references>
    <?line 528?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Todo: Add your name here.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a5fbxpXgd/4KjPwhajVJW5Lj2FqPM209rPZaj6jb0WZy
kjkgUCRhgQADgN1iLOW37G/ZX7b3WXULALtbViab2TN9fKwmG6i6deveW/dd
s9ls0hVd6R4kt17XzZuyTvPkNHcVfLlPiipJk2e7siuSs33buU3yuLoomrra
wAPJ7denz84eHyUnTbYuOpd1u8bdmqSLReMucDj8a++PeZ1V6QYmy5t02c0K
1y1nl8WmdbMUnpt99vkkSzu3qpv9A5h8WU/a3WJTtG1RV+f7Lbx3+vj8yWRS
bJsHSdfs2u7eZ5999dm9Sdq4FKY82W7LAkaAx9skrfLklUvL2XmxgakvYXWr
pt5tD6300DrbW5M3bg+v5zB91bmmct3sEcI/mbQdzPIfaVlXANvetZN2kzbd
f/xlV3eufZBU9WRbPEj+2NXZNGnrpmvcsoXf9hv85U+TSbrr1nXzYJLMJgn8
FBW89P08OYMRL92evmN8fV+3bruO/lA3q7Qq/kqrfZD83lXpsqA/uE1alA+S
n2r3by0/PweQozn+ME9e1W29Sd+sazPLH9Kmbsv0ovfHeKZ/b7O0dI2dai/v
wf//bYVfzbN6E034dJ6ct9m6XrqqWJkZn6ZV5dr+35SGns6+fXU2AsKPVXHh
mhY3rl4mtOsuT86ywlUZjPZtXVWzV2tXVLOzwvGQWb2rOiSr71yzSau9BZ+B
mAcgYBFvCWeTqoanO5jtwQTp0X+YzGYzALPtmjSDx87XDtaZARW2RbVKtgA9
4AiAQfiyst7lAMBmu+vwr0iYmyJr6qR1zUUBD6WGSdpknbZJCevp6qSDcZui
5WFggNK9BTpadpdA8MlyV2VM6guH4y52RdnR6LnblvUehoCRLoXWge4u1w5e
S/1XSdHCo8ui4ifTpNlVFY4EWwaEzdD76dxbl/ECAA/wcLt1WbEssmS7a7ZA
nvMkOV/jiHW2I/mQF222a1uHrBgtkQbIXVusKsUHMVLa5MVfGX81sExdMhNv
0z0tgF7L6urC7fGhsAplYhoIgGzwAzzYubdd4retrua8bZsiz0s3mXyC7NzU
+Y6w+E+9iS1JpZZeB1TnONQ/bmMnExWYbVI5XtTC4S5dFCia4ZvLolvjNvu9
AJAqXDnsCkwBszady+fJi2XnqmmS5nmBq05Luz80eGtHz10O4nKXrXEZJPBh
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
fH3V/wUZATzah6UAAA==

-->

</rfc>
