<?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.29 (Ruby 3.4.4) -->
<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-wimse-workload-identity-practices-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Workload Identity">Workload Identity Practices</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-workload-identity-practices-02"/>
    <author initials="A." surname="Schwenkschuster" fullname="Arndt Schwenkschuster">
      <organization>SPIRL</organization>
      <address>
        <email>arndts.ietf@gmail.com</email>
      </address>
    </author>
    <author initials="Y." surname="Rosomakho" fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>Applications and Real-Time</area>
    <workgroup>Workload Identity in Multi System Environments</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 102?>

<t>This document describes industry practices for providing secure identities
to workloads in container orchestration, cloud platforms, and other workload
platforms. It explains how workloads obtain credentials for external
authentication purposes, without managing long-lived secrets directly. It does
not take into account the standards work in progress for the WIMSE architecture
<xref target="I-D.ietf-wimse-arch"/> and other protocols, such as
<xref target="I-D.ietf-wimse-s2s-protocol"/>.</t>
    </abstract>
  </front>
  <middle>
    <?line 112?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Just like people, the workloads inside container orchestration systems (e.g.
Kubernetes) need identities to authenticate with other systems, such as
databases, web servers, or other workloads. The challenge for workloads is to
obtain a credential that can be used to authenticate with these resources
without managing secrets directly, for instance, an OAuth 2.0 access token.</t>
      <t>The common use of the OAuth 2.0 framework <xref target="RFC6749"/> in this context poses
challenges, particularly in managing credentials. To address this, the industry
has shifted to a federation-based approach where credentials of the underlying
workload platform are used to authenticate to other identity providers, which in
turn, issue credentials that grant access to resources.</t>
      <t>Traditionally, workloads were provisioned with client credentials and use for
example the corresponding client credential flow (Section 1.3.4 <xref target="RFC6749"/>) to
retrieve an OAuth 2.0 access token. This model presents a number of security and
maintenance issues. Secret materials must be provisioned and rotated, which
require either automation to be built, or periodic manual effort. Secret
materials can be stolen and used by attackers to impersonate the workload.
Other, non OAuth 2.0 flows, such as direct API keys or other secrets, suffer
from the same issues.</t>
      <t>Instead of provisioning secret material to the workload, one solution to this
problem is to attest the workload by using its underlying platform. Many
platforms provision workloads with a credential, such as a JWT token
(<xref target="RFC7519"/>). Cryptographically signed by the platform's issuer,
this credential attests the workload and its attributes.</t>
      <t><xref target="fig-overview"/> illustrates a generic pattern that is seen across many workload
platforms, more concrete variations are found in <xref target="practices"/>.</t>
      <figure anchor="fig-overview">
        <name>Generic workload identity pattern</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="432" width="512" viewBox="0 0 512 432" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 48,32 L 48,256" fill="none" stroke="black"/>
              <path d="M 64,64 L 64,128" fill="none" stroke="black"/>
              <path d="M 64,352 L 64,416" fill="none" stroke="black"/>
              <path d="M 112,128 L 112,344" fill="none" stroke="black"/>
              <path d="M 128,128 L 128,320" fill="none" stroke="black"/>
              <path d="M 184,128 L 184,208" fill="none" stroke="black"/>
              <path d="M 208,64 L 208,128" fill="none" stroke="black"/>
              <path d="M 224,352 L 224,416" fill="none" stroke="black"/>
              <path d="M 336,64 L 336,128" fill="none" stroke="black"/>
              <path d="M 368,176 L 368,240" fill="none" stroke="black"/>
              <path d="M 368,288 L 368,352" fill="none" stroke="black"/>
              <path d="M 488,64 L 488,128" fill="none" stroke="black"/>
              <path d="M 488,176 L 488,240" fill="none" stroke="black"/>
              <path d="M 488,288 L 488,352" fill="none" stroke="black"/>
              <path d="M 504,32 L 504,256" fill="none" stroke="black"/>
              <path d="M 48,32 L 504,32" fill="none" stroke="black"/>
              <path d="M 64,64 L 208,64" fill="none" stroke="black"/>
              <path d="M 336,64 L 488,64" fill="none" stroke="black"/>
              <path d="M 216,96 L 328,96" fill="none" stroke="black"/>
              <path d="M 64,128 L 208,128" fill="none" stroke="black"/>
              <path d="M 336,128 L 488,128" fill="none" stroke="black"/>
              <path d="M 368,176 L 488,176" fill="none" stroke="black"/>
              <path d="M 184,208 L 360,208" fill="none" stroke="black"/>
              <path d="M 368,240 L 488,240" fill="none" stroke="black"/>
              <path d="M 48,256 L 504,256" fill="none" stroke="black"/>
              <path d="M 368,288 L 488,288" fill="none" stroke="black"/>
              <path d="M 128,320 L 360,320" fill="none" stroke="black"/>
              <path d="M 64,352 L 224,352" fill="none" stroke="black"/>
              <path d="M 368,352 L 488,352" fill="none" stroke="black"/>
              <path d="M 64,416 L 224,416" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="368,320 356,314.4 356,325.6" fill="black" transform="rotate(0,360,320)"/>
              <polygon class="arrowhead" points="368,208 356,202.4 356,213.6" fill="black" transform="rotate(0,360,208)"/>
              <polygon class="arrowhead" points="336,96 324,90.4 324,101.6" fill="black" transform="rotate(0,328,96)"/>
              <polygon class="arrowhead" points="224,96 212,90.4 212,101.6" fill="black" transform="rotate(180,216,96)"/>
              <polygon class="arrowhead" points="120,344 108,338.4 108,349.6" fill="black" transform="rotate(90,112,344)"/>
              <g class="text">
                <text x="388" y="52">Workload</text>
                <text x="460" y="52">Platform</text>
                <text x="132" y="100">Workload</text>
                <text x="388" y="100">Platform</text>
                <text x="452" y="100">Issuer</text>
                <text x="236" y="116">1)</text>
                <text x="288" y="116">push/pull</text>
                <text x="228" y="196">A)</text>
                <text x="268" y="196">access</text>
                <text x="428" y="212">Resource</text>
                <text x="16" y="308">B1)</text>
                <text x="68" y="308">federate</text>
                <text x="160" y="308">B2)</text>
                <text x="204" y="308">access</text>
                <text x="428" y="324">Resource</text>
                <text x="108" y="388">Identity</text>
                <text x="180" y="388">Provider</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
     +--------------------------------------------------------+
     |                                      Workload Platform |
     | +-----------------+               +------------------+ |
     | |                 |               |                  | |
     | |    Workload     |<------------->|  Platform Issuer | |
     | |                 |  1) push/pull |                  | |
     | +-----+-+------+--+               +------------------+ |
     |       | |      |                                       |
     |       | |      |                                       |
     |       | |      |                      +--------------+ |
     |       | |      |    A) access         |              | |
     |       | |      +--------------------->|   Resource   | |
     |       | |                             |              | |
     |       | |                             +--------------+ |
     +-------+-+----------------------------------------------+
             | |
             | |                             +--------------+
B1) federate | |  B2) access                 |              |
             | +---------------------------->|   Resource   |
             v                               |              |
       +-------------------+                 +--------------+
       |                   |
       | Identity Provider |
       |                   |
       +-------------------+
]]></artwork>
        </artset>
      </figure>
      <t>The figure outlines the following steps which are applicable in any pattern.</t>
      <ul spacing="normal">
        <li>
          <t>1) Platform issues credential to workload. The way this is achieved differs
   from the platform, for instance, it can be pushed to the workload or
   pulled by the workload.</t>
        </li>
        <li>
          <t>A) The credential can give the workload direct access to resources within the
   platform or the platform itself (e.g. to perform infrastructure operations)</t>
        </li>
        <li>
          <t>B1) The workload uses the credential to federate to an Identity Provider. This
    step is optional and only needed when accessing outside resources.</t>
        </li>
        <li>
          <t>B2) The workload accesses resources outside of the platform and uses the
    federated identity obtained in the previous step.</t>
        </li>
      </ul>
      <t>Accessing different outside resources may require the workload to repeat steps
B1) and B2), federating to multiple Identity Providers. It is also possible that
step 1) needs to be repeated, for example in situations where the
platform-issued credential is scoped to accessing a certain resource or
federating to a specific Identity Provider.</t>
    </section>
    <section anchor="terminology">
      <name>Terminology</name>
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" 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>
    </section>
    <section anchor="delivery-patterns">
      <name>Delivery Patterns</name>
      <t>Credentials can be provisioned to the workload by different mechanisms, which
each have their own advantages, challenges, and security risks. The following
section highlights the pros and cons of common solutions. Security
recommendations for these methods are covered in
<xref target="security-credential-delivery"/>.</t>
      <section anchor="environment-variables">
        <name>Environment Variables</name>
        <t>Injecting the credentials into the environment variables allows for simple and
fast deployments. Applications can directly access them through system-level
mechanism, e.g., through the <tt>env</tt> command in linux. Note that environment
variables are static in nature in that they cannot be changed after application
initialization.</t>
      </section>
      <section anchor="filesystem">
        <name>Filesystem</name>
        <t>Filesystem delivery allows both container secret injection and access control.
Many solutions find the main benefit in the asynchronous provisioning of the
credentials to the workload. This allows the workload to run independently of
the credentials update, and to access them by reading the file.</t>
        <t>Credential rotation requires a solution to detect soon-to-expire secrets as a
rotation trigger. One practice is that the new secret is renewed <em>before</em> the
old secret is invalidated. For example, the solution can choose to update the
secret an hour before it is invalidated. This gives applications time to update
without downtime.</t>
      </section>
      <section anchor="local-apis">
        <name>Local APIs</name>
        <t>This pattern relies on local APIs to communicate between the workload and the
credential issuer. Some implementations rely on UNIX Domain Sockets (e.g.
SPIFFE), loopback interfaces or link-local "magic addresses" (e.g. Instance
Metadata Service of cloud providers) to provision credentials. Local APIs offer
the capability to re-provision updated credentials. Communication between
workload and API allows the workload to refresh a credential or request a
different one. This group of solutions relies on network isolation for their
security.</t>
        <t>Local APIs allow for short-lived, narrowly-scoped credentials. Persistent
connections allow the issuer to push credentials.</t>
        <t>This pattern also requires client code, which introduces portability challenges.
The request-response paradigm and additional operational overhead adds latency.</t>
      </section>
    </section>
    <section anchor="practices">
      <name>Practices</name>
      <t>The following practices outline more concrete examples of platforms, including
their delivery patterns.</t>
      <section anchor="kubernetes">
        <name>Kubernetes</name>
        <t>In Kubernetes, machine identity is implemented through "service accounts"
<xref target="KubernetesServiceAccount"/>. Service accounts can be explicitly created, or a
default one is automatically assigned. Service accounts use JSON Web Tokens
(JWTs) <xref target="RFC7519"/> as their credential format, with the Kubernetes Control Plane
acting as the signer.</t>
        <t>Service accounts serve multiple authentication purposes within the Kubernetes
ecosystem. They are used to authenticate to Kubernetes APIs, between different
workloads and to access external resources. This latter use case is particularly
relevant for the purposes of this document.</t>
        <t>To programatically use service accounts, workloads can:</t>
        <ul spacing="normal">
          <li>
            <t>Have the token "projected" into the file system of the workload. This is
similar to volume mounting in non-Kubernetes environments, and is commonly
referred to as "projected service account token".</t>
          </li>
          <li>
            <t>Use the Token Request API <xref target="TokenRequestV1"/> of the control plane. This option,
however, requires an initial projected service account token as a means of
authentication.</t>
          </li>
        </ul>
        <t>Both options allow workloads to:</t>
        <ul spacing="normal">
          <li>
            <t>Specify a custom audience. Possible audiences can be restricted based on
policy.</t>
          </li>
          <li>
            <t>Specify a custom lifetime. Maximum lifetime can be restricted by policy.</t>
          </li>
          <li>
            <t>Bind the token lifetime to an object lifecycle. This allows the token to be
invalidated when the object is deleted. For example, this may happen when a
Kubernetes Deployment is removed from the server. Note that invalidation is
only detected when the Token Review API <xref target="TokenReviewV1"/> of Kubernetes is
used to validate the token.</t>
          </li>
        </ul>
        <t>To validate service account tokens, Kubernetes allows workloads to:</t>
        <ul spacing="normal">
          <li>
            <t>Make use of the Token Review API <xref target="TokenReviewV1"/>. This API introspects the
token, makes sure it hasn't been invalidated and returns the claims.</t>
          </li>
          <li>
            <t>Mount the public keys used to sign the tokens into the file system of the
workload. This allows workloads to validate a token's signature without
calling the Token Review API.</t>
          </li>
          <li>
            <t>Optionally, a JSON Web Key Set <xref target="RFC7517"/> is exposed via a webserver. This
allows the Service Account Token to be validated outside of the cluster and
access to the actual Kubernetes Control Plane API.</t>
          </li>
        </ul>
        <figure anchor="fig-kubernetes">
          <name>Kubernetes workload identity in practice</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="496" width="488" viewBox="0 0 488 496" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 80,32 L 80,320" fill="none" stroke="black"/>
                <path d="M 96,144 L 96,208" fill="none" stroke="black"/>
                <path d="M 96,416 L 96,480" fill="none" stroke="black"/>
                <path d="M 112,208 L 112,408" fill="none" stroke="black"/>
                <path d="M 128,208 L 128,384" fill="none" stroke="black"/>
                <path d="M 136,96 L 136,144" fill="none" stroke="black"/>
                <path d="M 160,208 L 160,256" fill="none" stroke="black"/>
                <path d="M 176,144 L 176,208" fill="none" stroke="black"/>
                <path d="M 264,64 L 264,128" fill="none" stroke="black"/>
                <path d="M 272,416 L 272,480" fill="none" stroke="black"/>
                <path d="M 288,160 L 288,192" fill="none" stroke="black"/>
                <path d="M 328,136 L 328,160" fill="none" stroke="black"/>
                <path d="M 344,224 L 344,288" fill="none" stroke="black"/>
                <path d="M 344,352 L 344,416" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,192" fill="none" stroke="black"/>
                <path d="M 384,64 L 384,128" fill="none" stroke="black"/>
                <path d="M 464,224 L 464,288" fill="none" stroke="black"/>
                <path d="M 464,352 L 464,416" fill="none" stroke="black"/>
                <path d="M 480,32 L 480,320" fill="none" stroke="black"/>
                <path d="M 80,32 L 480,32" fill="none" stroke="black"/>
                <path d="M 264,64 L 384,64" fill="none" stroke="black"/>
                <path d="M 136,96 L 256,96" fill="none" stroke="black"/>
                <path d="M 264,128 L 384,128" fill="none" stroke="black"/>
                <path d="M 96,144 L 176,144" fill="none" stroke="black"/>
                <path d="M 288,160 L 368,160" fill="none" stroke="black"/>
                <path d="M 184,176 L 288,176" fill="none" stroke="black"/>
                <path d="M 288,192 L 368,192" fill="none" stroke="black"/>
                <path d="M 96,208 L 176,208" fill="none" stroke="black"/>
                <path d="M 344,224 L 464,224" fill="none" stroke="black"/>
                <path d="M 160,256 L 336,256" fill="none" stroke="black"/>
                <path d="M 344,288 L 464,288" fill="none" stroke="black"/>
                <path d="M 80,320 L 480,320" fill="none" stroke="black"/>
                <path d="M 344,352 L 464,352" fill="none" stroke="black"/>
                <path d="M 128,384 L 336,384" fill="none" stroke="black"/>
                <path d="M 96,416 L 272,416" fill="none" stroke="black"/>
                <path d="M 344,416 L 464,416" fill="none" stroke="black"/>
                <path d="M 96,480 L 272,480" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="344,384 332,378.4 332,389.6" fill="black" transform="rotate(0,336,384)"/>
                <polygon class="arrowhead" points="344,256 332,250.4 332,261.6" fill="black" transform="rotate(0,336,256)"/>
                <polygon class="arrowhead" points="336,136 324,130.4 324,141.6" fill="black" transform="rotate(270,328,136)"/>
                <polygon class="arrowhead" points="264,96 252,90.4 252,101.6" fill="black" transform="rotate(0,256,96)"/>
                <polygon class="arrowhead" points="192,176 180,170.4 180,181.6" fill="black" transform="rotate(180,184,176)"/>
                <polygon class="arrowhead" points="120,408 108,402.4 108,413.6" fill="black" transform="rotate(90,112,408)"/>
                <g class="text">
                  <text x="420" y="52">Kubernetes</text>
                  <text x="160" y="84">A1)</text>
                  <text x="204" y="84">access</text>
                  <text x="296" y="100">API</text>
                  <text x="340" y="100">Server</text>
                  <text x="348" y="148">1)</text>
                  <text x="392" y="148">request</text>
                  <text x="448" y="148">token</text>
                  <text x="196" y="164">2)</text>
                  <text x="244" y="164">schedule</text>
                  <text x="136" y="180">Pod</text>
                  <text x="328" y="180">Kubelet</text>
                  <text x="200" y="244">B1)</text>
                  <text x="244" y="244">access</text>
                  <text x="404" y="260">Resource</text>
                  <text x="16" y="372">C1)</text>
                  <text x="68" y="372">federate</text>
                  <text x="152" y="372">C2)</text>
                  <text x="196" y="372">access</text>
                  <text x="404" y="388">Resource</text>
                  <text x="148" y="452">Identity</text>
                  <text x="220" y="452">Provider</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
         +-------------------------------------------------+
         |                                     Kubernetes  |
         |                      +--------------+           |
         |        A1) access    |              |           |
         |      +-------------->|  API Server  |           |
         |      |               |              |           |
         |      |               +--------------+           |
         | +----+----+                  ^ 1) request token |
         | |         | 2) schedule +----+----+             |
         | |   Pod   |<------------+ Kubelet |             |
         | |         |             +---------+             |
         | +-+-+---+-+                                     |
         |   | |   |                      +--------------+ |
         |   | |   |   B1) access         |              | |
         |   | |   +--------------------->|   Resource   | |
         |   | |                          |              | |
         |   | |                          +--------------+ |
         |   | |                                           |
         +---+-+-------------------------------------------+
             | |
             | |                          +--------------+
C1) federate | | C2) access               |              |
             | +------------------------->|   Resource   |
             v                            |              |
           +---------------------+        +--------------+
           |                     |
           |  Identity Provider  |
           |                     |
           +---------------------+
]]></artwork>
          </artset>
        </figure>
        <t>The steps shown in <xref target="fig-kubernetes"/> are:</t>
        <ul spacing="normal">
          <li>
            <t>1) The kubelet is tasked to schedule a Pod. Based on configuration it requests
   a Service Account Token from the Kubernetes API server.</t>
          </li>
          <li>
            <t>2) The kubelet starts the Pod and, based on the configuration of the Pod,
   deliveres the token to the containers within the Pod.</t>
          </li>
        </ul>
        <t>Now, the Pod can use the token to</t>
        <ul spacing="normal">
          <li>
            <t>A) Access the Kubernetes Control Plane, considering it has access to it.</t>
          </li>
          <li>
            <t>B) Access other resources within the cluster, for instance other Pods.</t>
          </li>
          <li>
            <t>C) Access resources outside of the cluster.  </t>
            <ul spacing="normal">
              <li>
                <t>C1) The application within the pod uses the Service Account Token to
    federate to an Identity Provider outside of the Kubernets Cluster.</t>
              </li>
              <li>
                <t>C2) Using the federated identity the application within the Pod accesses
    resources outside of the cluster.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>As an example, the following JSON illustrates the claims contained in a Kubernetes Service
Account token.</t>
        <figure anchor="fig-kubernetes-token">
          <name>Example Kubernetes Service Account Token claims</name>
          <sourcecode type="json"><![CDATA[
{
  "aud": [  # matches the requested audiences, or the API server's default audiences when none are explicitly requested
    "https://kubernetes.default.svc"
  ],
  "exp": 1731613413,
  "iat": 1700077413,
  "iss": "https://kubernetes.default.svc",  # matches the first value passed to the --service-account-issuer flag
  "jti": "ea28ed49-2e11-4280-9ec5-bc3d1d84661a",  # ServiceAccountTokenJTI feature must be enabled for the claim to be present
  "kubernetes.io": {
    "namespace": "my-namespace",
    "node": {  # ServiceAccountTokenPodNodeInfo feature must be enabled for the API server to add this node reference claim
      "name": "127.0.0.1",
      "uid": "58456cb0-dd00-45ed-b797-5578fdceaced"
    },
    "pod": {
      "name": "my-workload-69cbfb9798-jv9gn",
      "uid": "778a530c-b3f4-47c0-9cd5-ab018fb64f33"
    },
    "serviceaccount": {
      "name": "my-workload",
      "uid": "a087d5a0-e1dd-43ec-93ac-f13d89cd13af"
    },
    "warnafter": 1700081020
  },
  "nbf": 1700077413,
  "sub": "system:serviceaccount:my-namespace:my-workload"
}
]]></sourcecode>
        </figure>
      </section>
      <section anchor="spiffe">
        <name>Secure Production Identity Framework For Everyone (SPIFFE)</name>
        <t>The Secure Production Identity Framework For Everyone, also known as SPIFFE <xref target="SPIFFE"/>, is
a Cloud Native Computing Foundation (CNCF) project that defines a "Workload API"
to deliver machine identity to workloads. Workloads can retrieve either X.509
certificates or JWTs. How workloads authenticate on the API is not part of the
document. It is common to use platform metadata from the operating system
and the workload platform for authentication to the Workload API.</t>
        <t>SPIFFE refers to the JWT-formatted credential as a "JWT-SVID" (JWT - SPIFFE
Verifiable Identity Document).</t>
        <t>Workloads are required to specify at least one audience when requesting a
JWT-SVID from the Workload API.</t>
        <t>For validation, SPIFFE offers:</t>
        <ul spacing="normal">
          <li>
            <t>A set of public keys encoded in JWK format that can be used to
validate JWT signatures. In SPIFFE this is referred to as the "JWT trust
bundle".</t>
          </li>
          <li>
            <t>A validation method on the Workload API to validate JWT-SVIDs.</t>
          </li>
        </ul>
        <t>Additionally, many SPIFFE deployments choose to separately publish the signing
keys as a JWK Set on a web server to allow validation where the
Workload API is not available.</t>
        <t>The following figure illustrates how a workload can use its JWT-SVID to access a
protected resource outside of SPIFFE.</t>
        <figure anchor="fig-spiffe">
          <name>Workload identity in SPIFFE</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="416" width="520" viewBox="0 0 520 416" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 56,32 L 56,240" fill="none" stroke="black"/>
                <path d="M 64,336 L 64,400" fill="none" stroke="black"/>
                <path d="M 72,80 L 72,144" fill="none" stroke="black"/>
                <path d="M 112,144 L 112,328" fill="none" stroke="black"/>
                <path d="M 128,144 L 128,304" fill="none" stroke="black"/>
                <path d="M 168,144 L 168,192" fill="none" stroke="black"/>
                <path d="M 192,80 L 192,144" fill="none" stroke="black"/>
                <path d="M 240,336 L 240,400" fill="none" stroke="black"/>
                <path d="M 368,80 L 368,128" fill="none" stroke="black"/>
                <path d="M 368,160 L 368,224" fill="none" stroke="black"/>
                <path d="M 368,272 L 368,336" fill="none" stroke="black"/>
                <path d="M 488,80 L 488,128" fill="none" stroke="black"/>
                <path d="M 488,160 L 488,224" fill="none" stroke="black"/>
                <path d="M 488,272 L 488,336" fill="none" stroke="black"/>
                <path d="M 512,32 L 512,240" fill="none" stroke="black"/>
                <path d="M 56,32 L 512,32" fill="none" stroke="black"/>
                <path d="M 72,80 L 192,80" fill="none" stroke="black"/>
                <path d="M 368,80 L 488,80" fill="none" stroke="black"/>
                <path d="M 192,96 L 360,96" fill="none" stroke="black"/>
                <path d="M 368,128 L 488,128" fill="none" stroke="black"/>
                <path d="M 72,144 L 192,144" fill="none" stroke="black"/>
                <path d="M 368,160 L 488,160" fill="none" stroke="black"/>
                <path d="M 168,192 L 360,192" fill="none" stroke="black"/>
                <path d="M 368,224 L 488,224" fill="none" stroke="black"/>
                <path d="M 56,240 L 512,240" fill="none" stroke="black"/>
                <path d="M 368,272 L 488,272" fill="none" stroke="black"/>
                <path d="M 128,304 L 360,304" fill="none" stroke="black"/>
                <path d="M 64,336 L 240,336" fill="none" stroke="black"/>
                <path d="M 368,336 L 488,336" fill="none" stroke="black"/>
                <path d="M 64,400 L 240,400" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="368,304 356,298.4 356,309.6" fill="black" transform="rotate(0,360,304)"/>
                <polygon class="arrowhead" points="368,192 356,186.4 356,197.6" fill="black" transform="rotate(0,360,192)"/>
                <polygon class="arrowhead" points="368,96 356,90.4 356,101.6" fill="black" transform="rotate(0,360,96)"/>
                <polygon class="arrowhead" points="120,328 108,322.4 108,333.6" fill="black" transform="rotate(90,112,328)"/>
                <g class="text">
                  <text x="372" y="52">SPIFFE</text>
                  <text x="424" y="52">Trust</text>
                  <text x="476" y="52">Domain</text>
                  <text x="220" y="84">1)</text>
                  <text x="248" y="84">Get</text>
                  <text x="300" y="84">JWT-SVID</text>
                  <text x="428" y="100">SPIFFE</text>
                  <text x="132" y="116">Workload</text>
                  <text x="412" y="116">Workload</text>
                  <text x="464" y="116">API</text>
                  <text x="220" y="180">A)</text>
                  <text x="260" y="180">access</text>
                  <text x="428" y="196">Resource</text>
                  <text x="16" y="292">B1)</text>
                  <text x="68" y="292">federate</text>
                  <text x="152" y="292">B2)</text>
                  <text x="196" y="292">access</text>
                  <text x="428" y="308">Resource</text>
                  <text x="116" y="372">Identity</text>
                  <text x="188" y="372">Provider</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
      +--------------------------------------------------------+
      |                                    SPIFFE Trust Domain |
      |                                                        |
      | +--------------+  1) Get JWT-SVID    +--------------+  |
      | |              +-------------------->|    SPIFFE    |  |
      | |   Workload   |                     | Workload API |  |
      | |              |                     +--------------+  |
      | +----+-+----+--+                                       |
      |      | |    |                        +--------------+  |
      |      | |    |     A) access          |              |  |
      |      | |    +----------------------->|   Resource   |  |
      |      | |                             |              |  |
      |      | |                             +--------------+  |
      +------+-+-----------------------------------------------+
             | |
             | |                             +--------------+
B1) federate | | B2) access                  |              |
             | +---------------------------->|   Resource   |
             v                               |              |
       +---------------------+               +--------------+
       |                     |
       |  Identity Provider  |
       |                     |
       +---------------------+
]]></artwork>
          </artset>
        </figure>
        <t>The steps shown in <xref target="fig-spiffe"/> are:</t>
        <ul spacing="normal">
          <li>
            <t>1) The workload requests a JWT-SVID from the SPIFFE Workload API.</t>
          </li>
          <li>
            <t>A) The JWT-SVID can be used to directly access resources or other workloads
   within the same SPIFFE Trust Domain.</t>
          </li>
          <li>
            <t>B1) To access resource proctected by other Identity Providers the workload
    uses the SPIFFE JWT-SVID to federate to the Identity Provider.</t>
          </li>
          <li>
            <t>B2) Once federated, the workload can access resources outside of its trust
    domain.</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>TODO: We should talk about native SPIFFE federation. Maybe a C) flow in the
diagram or at least some text.</t>
          </li>
        </ul>
        <t>Here are example claims for a JWT-SVID:</t>
        <sourcecode type="json"><![CDATA[
{
  "aud": [
    "external-authorization-server"
  ],
  "exp": 1729087175,
  "iat": 1729086875,
  "sub": "spiffe://example.org/myservice"
}
]]></sourcecode>
        <t>TODO: write about "iss" in JWT-SVID.</t>
      </section>
      <section anchor="cloudproviders">
        <name>Cloud Providers</name>
        <t>Workload in cloud platforms can have any shape or form. Historically, virtual
machines were the most common. The introduction of containerization brought
hosted container environment or Kubernetes clusters. Containers have evolved
into <tt>serverless</tt> offerings. Regardless of the actual workload packaging,
distribution, or runtime platform, all these workloads need identities.</t>
        <t>The biggest cloud providers have established the pattern of an "Instance
Metadata Endpoint". Aside from allowing workloads to retrieve metadata about
themselves, it also allows them to receive identity. The credential types
offered can vary. JWT, however, is the one that is common across all of them.
The issued credential allows proof to anyone it is being presented to, that the
workload platform has attested the workload and it can be considered
authenticated.</t>
        <t>Within a cloud provider the issued credential can often directly be used to
access resources of any kind across the platform making integration between the
services easy and "credentialless". While the term is technically misleading,
from a user perspective, no credential needs to be issued, provisioned, rotated
or revoked, as everything is handled internally by the platform.</t>
        <t>This is not true for resources outside of the platform, such as on-premise
resources, generic web servers or other cloud provider resources. Here, the
workload firsts need to federate to the Secure Token Service (STS), which is
effectively an Identity Provider, to receive an identity of the other cloud.
Using this different identity the workoad can then access its resources.</t>
        <t>This pattern also applies when accessing resources in the same cloud but across
different security boundaries (e.g. different account or tenant). The actual
flows and implementations may vary in these situations though.</t>
        <figure anchor="fig-cloud">
          <name>Workload identity in a cloud provider</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="520" viewBox="0 0 520 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 40,32 L 40,272" fill="none" stroke="black"/>
                <path d="M 40,336 L 40,528" fill="none" stroke="black"/>
                <path d="M 64,96 L 64,160" fill="none" stroke="black"/>
                <path d="M 64,448 L 64,512" fill="none" stroke="black"/>
                <path d="M 112,160 L 112,440" fill="none" stroke="black"/>
                <path d="M 128,160 L 128,416" fill="none" stroke="black"/>
                <path d="M 168,160 L 168,224" fill="none" stroke="black"/>
                <path d="M 184,96 L 184,160" fill="none" stroke="black"/>
                <path d="M 304,448 L 304,512" fill="none" stroke="black"/>
                <path d="M 328,80 L 328,160" fill="none" stroke="black"/>
                <path d="M 368,192 L 368,256" fill="none" stroke="black"/>
                <path d="M 368,384 L 368,448" fill="none" stroke="black"/>
                <path d="M 488,80 L 488,160" fill="none" stroke="black"/>
                <path d="M 488,192 L 488,256" fill="none" stroke="black"/>
                <path d="M 488,384 L 488,448" fill="none" stroke="black"/>
                <path d="M 512,32 L 512,272" fill="none" stroke="black"/>
                <path d="M 512,336 L 512,528" fill="none" stroke="black"/>
                <path d="M 40,32 L 512,32" fill="none" stroke="black"/>
                <path d="M 328,80 L 488,80" fill="none" stroke="black"/>
                <path d="M 64,96 L 184,96" fill="none" stroke="black"/>
                <path d="M 184,112 L 320,112" fill="none" stroke="black"/>
                <path d="M 64,160 L 184,160" fill="none" stroke="black"/>
                <path d="M 328,160 L 488,160" fill="none" stroke="black"/>
                <path d="M 368,192 L 488,192" fill="none" stroke="black"/>
                <path d="M 168,224 L 360,224" fill="none" stroke="black"/>
                <path d="M 368,256 L 488,256" fill="none" stroke="black"/>
                <path d="M 40,272 L 512,272" fill="none" stroke="black"/>
                <path d="M 40,336 L 512,336" fill="none" stroke="black"/>
                <path d="M 368,384 L 488,384" fill="none" stroke="black"/>
                <path d="M 128,416 L 360,416" fill="none" stroke="black"/>
                <path d="M 64,448 L 304,448" fill="none" stroke="black"/>
                <path d="M 368,448 L 488,448" fill="none" stroke="black"/>
                <path d="M 64,512 L 304,512" fill="none" stroke="black"/>
                <path d="M 40,528 L 512,528" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="368,416 356,410.4 356,421.6" fill="black" transform="rotate(0,360,416)"/>
                <polygon class="arrowhead" points="368,224 356,218.4 356,229.6" fill="black" transform="rotate(0,360,224)"/>
                <polygon class="arrowhead" points="328,112 316,106.4 316,117.6" fill="black" transform="rotate(0,320,112)"/>
                <polygon class="arrowhead" points="120,440 108,434.4 108,445.6" fill="black" transform="rotate(90,112,440)"/>
                <g class="text">
                  <text x="480" y="52">Cloud</text>
                  <text x="204" y="100">1)</text>
                  <text x="232" y="100">get</text>
                  <text x="284" y="100">identity</text>
                  <text x="372" y="116">Instance</text>
                  <text x="444" y="116">Metadata</text>
                  <text x="124" y="132">Workload</text>
                  <text x="412" y="132">Service/Endpoint</text>
                  <text x="220" y="212">A)</text>
                  <text x="260" y="212">access</text>
                  <text x="428" y="228">Resource</text>
                  <text x="16" y="308">B1)</text>
                  <text x="68" y="308">federate</text>
                  <text x="152" y="308">B2)</text>
                  <text x="196" y="308">access</text>
                  <text x="316" y="356">External</text>
                  <text x="376" y="356">(e.g.</text>
                  <text x="424" y="356">other</text>
                  <text x="476" y="356">cloud)</text>
                  <text x="428" y="420">Resource</text>
                  <text x="108" y="484">Secure</text>
                  <text x="160" y="484">Token</text>
                  <text x="216" y="484">Service</text>
                  <text x="272" y="484">(STS)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
    +----------------------------------------------------------+
    |                                                    Cloud |
    |                                                          |
    |                                   +-------------------+  |
    |  +--------------+ 1) get identity |                   |  |
    |  |              +---------------->| Instance Metadata |  |
    |  |   Workload   |                 |  Service/Endpoint |  |
    |  |              |                 |                   |  |
    |  +-----+-+----+-+                 +-------------------+  |
    |        | |    |                                          |
    |        | |    |                        +--------------+  |
    |        | |    |     A) access          |              |  |
    |        | |    +----------------------->|   Resource   |  |
    |        | |                             |              |  |
    |        | |                             +--------------+  |
    +--------+-+-----------------------------------------------+
             | |
B1) federate | | B2) access
             | |
    +--------+-+-----------------------------------------------+
    |        | |                   External (e.g. other cloud) |
    |        | |                                               |
    |        | |                             +--------------+  |
    |        | |                             |              |  |
    |        | +---------------------------->|   Resource   |  |
    |        v                               |              |  |
    |  +-----------------------------+       +--------------+  |
    |  |                             |                         |
    |  |  Secure Token Service (STS) |                         |
    |  |                             |                         |
    |  +-----------------------------+                         |
    +----------------------------------------------------------+
]]></artwork>
          </artset>
        </figure>
        <t>The steps shown in <xref target="fig-cloud"/> are:</t>
        <ul spacing="normal">
          <li>
            <t>1) The workload retrieves an identity from the Instance Metadata Service or
   Endpoint. This endpoint exposes an well-known API and is available at well-
   known, but local, location.</t>
          </li>
        </ul>
        <t>When the workload needs to access a resource within the cloud (e.g. located in
the same security boundary; protected by the same issuer as the workload
identity):</t>
        <ul spacing="normal">
          <li>
            <t>A) The workload directly access the protected resource with the credential
issued in Step 1.</t>
          </li>
        </ul>
        <t>When the workload needs to access a resource outside of the cloud (e.g.
different cloud; same cloud, but different security boundary):</t>
        <ul spacing="normal">
          <li>
            <t>B1) The workload uses cloud-issued credential to federate to the Secure Token
    Service of the other cloud/account.</t>
          </li>
          <li>
            <t>B2) Using the federated identity the workload can access the resource outside,
    assuming the federated identity has the necessary permissions.</t>
          </li>
        </ul>
      </section>
      <section anchor="cicd">
        <name>Continuous Integration and Deployment Systems</name>
        <t>Continuous integration and deployment (CI-CD) systems allow their pipelines (or
workflows) to receive an identity every time they run. Build outputs and other
artifacts are commonly uploaded to external resources. With federation to
external Identity Providers the pipelines and tasks can access these resources.</t>
        <figure anchor="fig-cicd">
          <name>OAuth2 Assertion Flow in a continuous integration/deployment environment</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="352" width="448" viewBox="0 0 448 352" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 40,32 L 40,176" fill="none" stroke="black"/>
                <path d="M 56,80 L 56,160" fill="none" stroke="black"/>
                <path d="M 56,272 L 56,336" fill="none" stroke="black"/>
                <path d="M 104,160 L 104,264" fill="none" stroke="black"/>
                <path d="M 120,160 L 120,240" fill="none" stroke="black"/>
                <path d="M 200,80 L 200,160" fill="none" stroke="black"/>
                <path d="M 216,272 L 216,336" fill="none" stroke="black"/>
                <path d="M 296,208 L 296,272" fill="none" stroke="black"/>
                <path d="M 312,80 L 312,144" fill="none" stroke="black"/>
                <path d="M 416,80 L 416,144" fill="none" stroke="black"/>
                <path d="M 416,208 L 416,272" fill="none" stroke="black"/>
                <path d="M 440,32 L 440,176" fill="none" stroke="black"/>
                <path d="M 40,32 L 440,32" fill="none" stroke="black"/>
                <path d="M 56,80 L 200,80" fill="none" stroke="black"/>
                <path d="M 312,80 L 416,80" fill="none" stroke="black"/>
                <path d="M 208,112 L 312,112" fill="none" stroke="black"/>
                <path d="M 312,144 L 416,144" fill="none" stroke="black"/>
                <path d="M 56,160 L 200,160" fill="none" stroke="black"/>
                <path d="M 40,176 L 440,176" fill="none" stroke="black"/>
                <path d="M 296,208 L 416,208" fill="none" stroke="black"/>
                <path d="M 120,240 L 288,240" fill="none" stroke="black"/>
                <path d="M 56,272 L 216,272" fill="none" stroke="black"/>
                <path d="M 296,272 L 416,272" fill="none" stroke="black"/>
                <path d="M 56,336 L 216,336" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="296,240 284,234.4 284,245.6" fill="black" transform="rotate(0,288,240)"/>
                <polygon class="arrowhead" points="216,112 204,106.4 204,117.6" fill="black" transform="rotate(180,208,112)"/>
                <polygon class="arrowhead" points="112,264 100,258.4 100,269.6" fill="black" transform="rotate(90,104,264)"/>
                <g class="text">
                  <text x="116" y="52">Continuous</text>
                  <text x="208" y="52">Integration</text>
                  <text x="264" y="52">/</text>
                  <text x="316" y="52">Deployment</text>
                  <text x="396" y="52">Platform</text>
                  <text x="220" y="100">1)</text>
                  <text x="268" y="100">schedule</text>
                  <text x="128" y="116">Pipeline/Task</text>
                  <text x="364" y="116">Platform</text>
                  <text x="124" y="132">(Workload)</text>
                  <text x="12" y="228">2)</text>
                  <text x="60" y="228">federate</text>
                  <text x="140" y="228">3)</text>
                  <text x="180" y="228">access</text>
                  <text x="356" y="244">Resource</text>
                  <text x="100" y="308">Identity</text>
                  <text x="172" y="308">Provider</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
    +-------------------------------------------------+
    |    Continuous Integration / Deployment Platform |
    |                                                 |
    | +-----------------+             +------------+  |
    | |                 | 1) schedule |            |  |
    | |  Pipeline/Task  |<------------+  Platform  |  |
    | |   (Workload)    |             |            |  |
    | |                 |             +------------+  |
    | +-----+-+---------+                             |
    +-------+-+---------------------------------------+
            | |
            | |                     +--------------+
2) federate | | 3) access           |              |
            | +-------------------->|   Resource   |
            v                       |              |
      +-------------------+         +--------------+
      |                   |
      | Identity Provider |
      |                   |
      +-------------------+
]]></artwork>
          </artset>
        </figure>
        <t>The steps shown in <xref target="fig-cicd"/> are:</t>
        <ul spacing="normal">
          <li>
            <t>1) The CI-CD platform schedules a workload (pipeline or task). Based on
   configuration a Workload Identity is made available by the platform.</t>
          </li>
          <li>
            <t>2) The workload uses the identity to federate to a Identity Provider.</t>
          </li>
          <li>
            <t>3) The workload uses the federated identity to access resources. For instance,
   a artifact store to upload compiled binaries, or to download libraries
   needed to resolve dependencies. It is also common to access other
   infrastructure as resources to make deployments or changes.</t>
          </li>
        </ul>
        <t>Tokens of different providers look different, but all contain claims carrying
the basic context of the executed tasks, such as source code management data
(e.g. git branch), initiation and more.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>All security considerations in section 8 of <xref target="RFC7521"/> apply.</t>
      <section anchor="security-credential-delivery">
        <name>Credential Delivery</name>
        <section anchor="environment-variables-1">
          <name>Environment Variables</name>
          <t>Leveraging environment variables to provide credentials presents many security
limitations. Environment variables have a wide set of use cases and are observed
by many components. They are often captured for monitoring, observability,
debugging and logging purposes and sent to components outside of the workload.
Access control is not trivial and does not achieve the same security results as
other methods.</t>
          <t>This approach should be limited to non-production cases where convenience
outweighs security considerations, and the provided secrets are limited in
validity or utility. For example, an initial secret might be used during the
setup of the application.</t>
        </section>
        <section anchor="filesystem-1">
          <name>Filesystem</name>
          <ul spacing="normal">
            <li>
              <t>1) Access control to the mounted file should be configured to limit reads to
   authorized applications. Linux supports solutions such as DAC (uid and
   guid) or MAC (e.g. SELinux, AppArmor).</t>
            </li>
            <li>
              <t>2) Mounted shared memory should be isolated from other host OS paths and
   processes. For example, on Linux this can be achieved by using namespaces.</t>
            </li>
          </ul>
        </section>
        <section anchor="local-apis-1">
          <name>Local APIs</name>
          <t>TODO Reference to attestation might be handy here</t>
        </section>
      </section>
      <section anchor="token-typing">
        <name>Token typing</name>
        <t>Issuers SHOULD strongly type the issued tokens to workload via the JOSE <tt>typ</tt>
header and Identity Providers accepting these tokens  SHOULD validate the
value of it according to policy. See Section 3.1 of <xref target="RFC8725"/> for details
on explicit typing.</t>
        <t>Issuers SHOULD use <tt>authorization-grant+jwt</tt> as a <tt>typ</tt> value according to
<xref target="I-D.ietf-oauth-rfc7523bis"/>. For broad support <tt>JWT</tt> or <tt>JOSE</tt> MAY be used by
issuers and accepted by authorization servers but it is important to highlight
that a wide range of tokens, meant for all sorts of purposes, use these values
and would be accepted.</t>
      </section>
      <section anchor="custom-claims-are-important-for-context">
        <name>Custom claims are important for context</name>
        <t>Some platform-issued credentials have custom claims that are vital for context
and are required to be validated. For example, in a continuous integration and
deployment platform where a workload is scheduled for a Git repository, the
branch is crucial. A "main" branch may be protected and considered trusted to
federate to external authorization servers. But other branches may not be
allowed to access protected resources.</t>
        <t>Authorization servers that validate assertions SHOULD make use of these claims.
Platform issuers SHOULD allow differentiation based on the subject claim alone.</t>
      </section>
      <section anchor="token-lifetime">
        <name>Token lifetime</name>
        <t>Tokens SHOULD NOT exceed the lifetime of the workloads they represent. For
example, a workload that has an expected lifetime of an hour should not receive
a token valid for 2 hours or more.</t>
        <t>For the scope of this document, where a platform-issued credential is used
to authenticate to retrieve an access token for an external authorization
domain, a short-lived credential is recommended.</t>
      </section>
      <section anchor="workload-lifecycle-and-invalidation">
        <name>Workload lifecycle and invalidation</name>
        <t>Platform issuers SHOULD invalidate tokens when the workload stops, pauses or
ceases to exist. How these credentials are invalidated depends on platform
authentication mechanisms and is not in scope of this document.</t>
      </section>
      <section anchor="proof-of-possession">
        <name>Proof of possession</name>
        <t>Credentials SHOULD be bound to workloads and proof of possession SHOULD be
performed when these credentials are used. This mitigates token theft. This
proof of possession applies to the platform credential and the access token of
the external authorization domains.</t>
      </section>
      <section anchor="audience">
        <name>Audience</name>
        <t>For issued credentials in the form of JWTs, they MUST be audienced using the
<tt>aud</tt> claim. Each JWT SHOULD only carry a single audience. We RECOMMEND using
URIs to specify audiences. See section 3 of <xref target="RFC8707"/> for more details and
security implications.</t>
        <t>Some workload platforms provide credentials for interacting with their own APIs
(e.g., Kubernetes). These credentials MUST NOT be used beyond the platform API.
In the example of Kubernetes: A token used for anything else than the Kubernetes
API itself MUST NOT carry the Kubernetes server in the <tt>aud</tt> claim.</t>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>This document does not require actions by IANA.</t>
    </section>
    <section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors and contributors would like to thank the following people for their feedback and contributions to this document (in no particular order): Dag Sneeggen, Ned Smith, Dean H. Saxe, Yaron Sheffer, Andrii Deinega, Marcel Levy, Justin Richer, Pieter Kasselmann, Simon Canning, Evan Gilman and Joseph Salowey.</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="RFC6749">
          <front>
            <title>The OAuth 2.0 Authorization Framework</title>
            <author fullname="D. Hardt" initials="D." role="editor" surname="Hardt"/>
            <date month="October" year="2012"/>
            <abstract>
              <t>The OAuth 2.0 authorization framework enables a third-party application to obtain limited access to an HTTP service, either on behalf of a resource owner by orchestrating an approval interaction between the resource owner and the HTTP service, or by allowing the third-party application to obtain access on its own behalf. This specification replaces and obsoletes the OAuth 1.0 protocol described in RFC 5849. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6749"/>
          <seriesInfo name="DOI" value="10.17487/RFC6749"/>
        </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="RFC7519">
          <front>
            <title>JSON Web Token (JWT)</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7519"/>
          <seriesInfo name="DOI" value="10.17487/RFC7519"/>
        </reference>
        <reference anchor="RFC7521">
          <front>
            <title>Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="Y. Goland" initials="Y." surname="Goland"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification provides a framework for the use of assertions with OAuth 2.0 in the form of a new client authentication mechanism and a new authorization grant type. Mechanisms are specified for transporting assertions during interactions with a token endpoint; general processing rules are also specified.</t>
              <t>The intent of this specification is to provide a common framework for OAuth 2.0 to interwork with other identity systems using assertions and to provide alternative client authentication mechanisms.</t>
              <t>Note that this specification only defines abstract message flows and processing rules. In order to be implementable, companion specifications are necessary to provide the corresponding concrete instantiations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7521"/>
          <seriesInfo name="DOI" value="10.17487/RFC7521"/>
        </reference>
        <reference anchor="RFC7523">
          <front>
            <title>JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="May" year="2015"/>
            <abstract>
              <t>This specification defines the use of a JSON Web Token (JWT) Bearer Token as a means for requesting an OAuth 2.0 access token as well as for client authentication.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7523"/>
          <seriesInfo name="DOI" value="10.17487/RFC7523"/>
        </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="RFC8414">
          <front>
            <title>OAuth 2.0 Authorization Server Metadata</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="N. Sakimura" initials="N." surname="Sakimura"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <date month="June" year="2018"/>
            <abstract>
              <t>This specification defines a metadata format that an OAuth 2.0 client can use to obtain the information needed to interact with an OAuth 2.0 authorization server, including its endpoint locations and authorization server capabilities.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8414"/>
          <seriesInfo name="DOI" value="10.17487/RFC8414"/>
        </reference>
        <reference anchor="RFC8693">
          <front>
            <title>OAuth 2.0 Token Exchange</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <author fullname="A. Nadalin" initials="A." surname="Nadalin"/>
            <author fullname="B. Campbell" initials="B." role="editor" surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="C. Mortimore" initials="C." surname="Mortimore"/>
            <date month="January" year="2020"/>
            <abstract>
              <t>This specification defines a protocol for an HTTP- and JSON-based Security Token Service (STS) by defining how to request and obtain security tokens from OAuth 2.0 authorization servers, including security tokens employing impersonation and delegation.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8693"/>
          <seriesInfo name="DOI" value="10.17487/RFC8693"/>
        </reference>
        <reference anchor="RFC8707">
          <front>
            <title>Resource Indicators for OAuth 2.0</title>
            <author fullname="B. Campbell" initials="B." surname="Campbell"/>
            <author fullname="J. Bradley" initials="J." surname="Bradley"/>
            <author fullname="H. Tschofenig" initials="H." surname="Tschofenig"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>This document specifies an extension to the OAuth 2.0 Authorization Framework defining request parameters that enable a client to explicitly signal to an authorization server about the identity of the protected resource(s) to which it is requesting access.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8707"/>
          <seriesInfo name="DOI" value="10.17487/RFC8707"/>
        </reference>
        <reference anchor="RFC8725">
          <front>
            <title>JSON Web Token Best Current Practices</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="D. Hardt" initials="D." surname="Hardt"/>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="February" year="2020"/>
            <abstract>
              <t>JSON Web Tokens, also known as JWTs, are URL-safe JSON-based security tokens that contain a set of claims that can be signed and/or encrypted. JWTs are being widely used and deployed as a simple security token format in numerous protocols and applications, both in the area of digital identity and in other application areas. This Best Current Practices document updates RFC 7519 to provide actionable guidance leading to secure implementation and deployment of JWTs.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="225"/>
          <seriesInfo name="RFC" value="8725"/>
          <seriesInfo name="DOI" value="10.17487/RFC8725"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-oauth-rfc7523bis">
          <front>
            <title>Updates to Audience Values for OAuth 2.0 Authorization Servers</title>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Chuck Mortimore" initials="C." surname="Mortimore">
              <organization>Disney</organization>
            </author>
            <date day="23" month="April" year="2025"/>
            <abstract>
              <t>   This specification updates the requirements for audience values for
   tokens whose audience is an OAuth 2.0 authorization server to address
   a security vulnerability identified in the previous requirements for
   those audience values in multiple OAuth 2.0 specifications.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-oauth-rfc7523bis-01"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-arch">
          <front>
            <title>Workload Identity in a Multi System Environment (WIMSE) Architecture</title>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>Venafi</organization>
            </author>
            <author fullname="Yaroslav Rosomakho" initials="Y." surname="Rosomakho">
              <organization>Zscaler</organization>
            </author>
            <author fullname="Hannes Tschofenig" initials="H." surname="Tschofenig">
              <organization>University of Applied Sciences Bonn-Rhein-Sieg</organization>
            </author>
            <date day="2" month="March" year="2025"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-arch-04"/>
        </reference>
        <reference anchor="I-D.ietf-wimse-s2s-protocol">
          <front>
            <title>WIMSE Workload to Workload Authentication</title>
            <author fullname="Brian Campbell" initials="B." surname="Campbell">
              <organization>Ping Identity</organization>
            </author>
            <author fullname="Joseph A. Salowey" initials="J. A." surname="Salowey">
              <organization>CyberArk</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="4" month="July" 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.  Workload A can call Workload B with mutual TLS
   authentication, while the next call from Workload B to Workload C
   would be authenticated at the application level.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-wimse-s2s-protocol-06"/>
        </reference>
        <reference anchor="OIDC" target="https://openid.net/specs/openid-connect-core-1_0.html">
          <front>
            <title>OpenID Connect Core 1.0 incorporating errata set 1</title>
            <author>
              <organization>Sakimura, N., Bradley, J., Jones, M., de Medeiros, B., and C. Mortimore</organization>
            </author>
            <date year="2014" month="November"/>
          </front>
        </reference>
        <reference anchor="OIDCDiscovery" target="https://openid.net/specs/openid-connect-discovery-1_0.html">
          <front>
            <title>OpenID Connect Discovery 1.0 incorporating errata set 2</title>
            <author>
              <organization>Sakimura, N., Bradley, J., Jones, M. and Jay, E.</organization>
            </author>
            <date year="2023" month="December"/>
          </front>
        </reference>
        <reference anchor="KubernetesServiceAccount" target="https://kubernetes.io/docs/concepts/security/service-accounts/">
          <front>
            <title>Kubernetes Service Account</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="May"/>
          </front>
        </reference>
        <reference anchor="TokenReviewV1" target="https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-review-v1/">
          <front>
            <title>Kubernetes Token Review API V1</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="TokenRequestV1" target="https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-request-v1/">
          <front>
            <title>Kubernetes Token Request API V1</title>
            <author>
              <organization/>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="SPIFFE" target="https://github.com/spiffe/spiffe/blob/main/standards/SPIFFE.md">
          <front>
            <title>Secure Production Identity Framework for Everyone (SPIFFE)</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="May"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 720?>

<section anchor="variations">
      <name>Variations</name>
      <section anchor="direct-access-to-protected-resources">
        <name>Direct access to protected resources</name>
        <t>Resource servers that protect resources may choose to trust multiple authorization servers, including the one that issues the platform identities. Instead of using the platform issued identity to receive an access token of a different authorization domain, workloads can directly use the platform issued identity to access a protected resource.</t>
        <t>In this case, technically, the protected resource and workload are part of the same authorization domain.</t>
      </section>
      <section anchor="custom-assertion-flows">
        <name>Custom assertion flows</name>
        <t>While <xref target="RFC7521"/> and <xref target="RFC7523"/> are the proposed standards for this pattern, some authorization servers use <xref target="RFC8693"/> or a custom API for the issuance of an access token based on an existing platform identity credentials. These pattern are not recommended and prevent interoperability.</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>[[ To be removed from the final specification ]]</t>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Updated structure, bringing concrete examples back into the main text.</t>
        </li>
        <li>
          <t>Use more generic "federation" term instead of RFC 7523 specifics.</t>
        </li>
        <li>
          <t>Overall editorial improvements.</t>
        </li>
        <li>
          <t>Fix reference of Kubernetes Token Request API</t>
        </li>
        <li>
          <t>Prefer the term "document" over "specification".</t>
        </li>
        <li>
          <t>Update contributor and acknowledgements sections.</t>
        </li>
        <li>
          <t>Remove section about OIDC as it is too specific to a certain implementation.</t>
        </li>
        <li>
          <t>Rewrite abstract to better reflect the current content of the document.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Add credential delivery mechanisms</t>
        </li>
        <li>
          <t>Highlight relationship to other WIMSE work</t>
        </li>
        <li>
          <t>Add details about token typing and relation to OpenID Connect</t>
        </li>
        <li>
          <t>Add security considerations for audience</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Rename draft with no content changes.</t>
        </li>
        <li>
          <t>Set Arndt to Editor role.</t>
        </li>
      </ul>
      <t><strong>[as draft-wimse-workload-identity-bcp]</strong></t>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Move scope from Kubernetes to generic workload identity platform</t>
        </li>
        <li>
          <t>Add various patterns to appendix
          </t>
          <ul spacing="normal">
            <li>
              <t>Kubernetes</t>
            </li>
            <li>
              <t>Cloud providers</t>
            </li>
            <li>
              <t>SPIFFE</t>
            </li>
            <li>
              <t>CI/CD</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Add some security considerations</t>
        </li>
        <li>
          <t>Update title</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial updates</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Adopted by the WIMSE WG</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact initials="B." surname="Hofmann" fullname="Benedikt Hofmann">
        <organization>Siemens</organization>
        <address>
          <email>hofmann.benedikt@siemens.com</email>
        </address>
      </contact>
      <contact initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
        <organization>Siemens</organization>
        <address>
          <email>hannes.tschofenig@gmx.net</email>
        </address>
      </contact>
      <contact initials="E." surname="Giordano" fullname="Edoardo Giordano">
        <organization>Nokia</organization>
        <address>
          <email>edoardo.giordano@nokia.com</email>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
qHKzcdPak+O0XAUZREwsH7+N/i/eCM0WMIEAAA==

-->

</rfc>
