<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.4 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc rfcedstyle="yes"?>
<?rfc tocindent="yes"?>
<?rfc strict="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc text-list-symbols="-o*+"?>
<?rfc docmapping="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-wimse-workload-identity-bcp-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Workload Identity">Best Current Practice for Workload Identity</title>

    <author initials="B." surname="Hofmann" fullname="Benedikt Hofmann">
      <organization>Siemens</organization>
      <address>
        <email>hofmann.benedikt@siemens.com</email>
      </address>
    </author>
    <author initials="H." surname="Tschofenig" fullname="Hannes Tschofenig">
      <organization>Siemens</organization>
      <address>
        <email>hannes.tschofenig@siemens.com</email>
      </address>
    </author>

    <date year="2024" month="April" day="05"/>

    <area>Security</area>
    <workgroup>WIMSE</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 52?>

<t>The use of the OAuth 2.0 framework for container orchestration systems poses a challenge as managing secrets, such as client_id and client_secret, can be complex and error-prone.
"Service account token volume projection", a term introduced by Kubernetes, provides a way of injecting JSON Web Tokens (JWTs) to workloads.</t>

<t>This document specifies the use of JWTs for client credentials in container orchestration systems to improve interoperability in orchestration systems, to reduce complexity for  developers, and motivates authorization server to support RFC 7523.</t>



    </abstract>



  </front>

  <middle>


<?line 59?>

<section anchor="introduction"><name>Introduction</name>

<t>In workload scenarios dedicated management entities, also called  "control plane" entities, are used to start, monitor and stop workloads dynamically.
These workloads typically run micro services that interact with each other and with other entities on the corporate network or on the Internet.
When one workload, acting as an OAuth client, wants to gain access to a protected resource hosted on another workload or on the Internet (referred here generically as a resource server) then authorization is typically required.</t>

<t>OAuth has been designed to offer help in scenarios where access to protected resources needs to be managed dynamically in a distributed system.</t>

<t>Each workload instance has to be provisioned with unique credentials.
However, these credentials have to be configured prior and are then attached to the workload.
In addition, these credentials do not have an automated rotation mechanism and are valid for an unspecified amount of time.</t>

<t>This requires manual configuration effort and the missing automated rotation mechanism introduce inconvenience and increase the attack surface.</t>

<t>"Service account token volume projection" is a feature of container orchestration systems that allows users to create JSON Web Tokens (JWTs) for their workloads.
These JWTs, referred as Service Account Tokens, can be used as client credentials, as specified in RFC 7523 <xref target="RFC7523"/>.
As these tokens are managed by the "control plane" and simply mounted to the filesystem, a workload just needs to consume this file and present it to the authorization server.
In addition, service account token volume projection allows an expiration time on these JWTs to be set, allowing automated rotation of these credentials.
Finally, the private key for signing these tokens is managed by the "control plane", hence removing the manual effort of configuring the client_id and client_secret.</t>

<t>However, there is currently no standardized way to manage these Service Account Tokens across container orchestrators.
This leads to inconsistencies, and additional effort for developers as they need to support different client authentication mechanisms. In the worst case, this approach is ignored in favor of client_id and client_secret.</t>

<t>This specification specifies the use of Service Account Tokens in container orchestration systems, which provides a secure and scalable way to create and manage these tokens, and ensures interoperability with existing OAuth-based authorization systems.</t>

<t>When OAuth is used as part of the control plane entities, a Service Account Token is provisioned to the workload via the Agent. This interaction is shown in <xref target="fig-arch"/>.</t>

<t>To distinguish the entities, we use the term "Control Plane" to refer to the OAuth 2.0 Authorization Server that is part
of the cluster's control plane. Since there are also two access tokens in play, we use the term "Service Account Token" to refer to the token issued by the Control Plane and thereby distinguish it from the other access token issued to an OAuth 2.0 client running inside the workload by the second authorization server.</t>

<t>It is important to note that the workload does not use the Service Account Token with resource servers directly but instead obtains access tokens from this second authorization server.
To obtain these access tokens, the OAuth 2.0 client running in the workload uses the JWT client authentication grant, as defined in <xref target="RFC7523"/>, with the Service Account Token as input. The obtained access token may be a bearer token, or a proof-of-possession token.</t>

<t><xref target="fig-arch"/> illustrates the interaction in the architecture graphically.</t>

<figure title="Protocol Interaction." anchor="fig-arch"><artwork><![CDATA[
                      +---------------+
                      |               |
                      | Authorization |
                      | Server        |
                      |               |
                      +---------------+
                             ^ |
                             | |
  +--------------------------|-|--------------+
  |Cluster                   | | OAuth        |
  |                          | | Exchange     |
  | +---------------+        | | to obtain    |
  | |               |        | | access token |
  | | Control Plane |        | | using        |
  | |               |        | | Service      |
  | +---------------+        | | Account      |
  |         ^|               | | Token        |
  |         ||               | v        +-----+
  |         ||            +----------+  |
  |         ||            |          |+ |        +----------+
  |  Obtain ||            | Workload || |        |          |
  |  Service||            |          ||<-------->| Resource |
  |  Account||            +----------+| | Access | Server   |
  |  Token  ||             +----------+ | Token  |          |
  |         ||                  ^       |        +----------+
  |         ||    Start Workload:       |
  |         ||     with Service :       |
  |         ||    Account Token :       |
  |         ||                  v       |
  |         ||              +-------+   |
  |         |+------------->|       |   |
  |         +---------------| Agent |   |
  |                         |       |   |
  |                         +-------+   |
  |                                     |
  +-------------------------------------+
]]></artwork></figure>

<t>In <xref target="recommendations"/> we provide more details about how the
content of the tokens and the offered security properties.</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="recommendations"><name>Architecture and Recommendations</name>

<t>This specification relies on the use of OAuth 2.0 <xref target="RFC6749"/> and
<xref target="RFC7523"/> for client authentication using a JWT.</t>

<t>Service Account Tokens used in container orchestration systems are vulnerable to different types of threats, as shown in this list:</t>

<t><list style="numbers">
  <t>Token theft: Tokens can be stolen by attackers who have already gained access to a workload. These attackers can then use these tokens to impersonate the workload and gain access to resources they should not have access to.</t>
  <t>Token reuse: Tokens can be reused by attackers to gain access to the system. However, expiration times limited the token reuse time.</t>
  <t>Misconfigured service accounts: Similar to misconfigured access to secrets, misconfigured service accounts can lead to applications gaining more privileges then necessary.</t>
  <t>Theft of token signing key: The token signing key can be stolen by attackers who have already gained access to the control plane. However, such attackers also have access to all secrets in the container orchestration system. Hence, resulting in the same impact for use of client_id and client_secret compared to using Service Account Tokens.</t>
</list></t>

<t>The following fields are populated in the Service Account Token:</t>

<t><list style="numbers">
  <t>The 'iss' claim MUST contain a string identifying the container orchestrator.</t>
  <t>The 'sub' claim MUST contain a string identifying the workload. This is also the client_id according to <xref target="RFC7523"/>.</t>
  <t>The 'aud' claim MUST identify one or multiple authorization servers that are intended recipients of the Service Account Token for client authorization.</t>
</list></t>

<t>Further processing requirements are specified in <xref target="RFC7523"/>.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>This entire document is about security.</t>

</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>Add your name here.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<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="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="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="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">

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


    </references>


<?line 181?>

<section anchor="example"><name>Example</name>

<t>The functionality described in this specification can be verified using Kubernetes. Modern version of Kubernetes implement service account token volume projection, which enables the ability to inject the Service Account Token with a specific issuer and audience into the workload.</t>

<t>A most important parts of the configuration are (which can be found at the end of the full configuration):</t>

<t><list style="numbers">
  <t>the path, where the application can find the token, as a file</t>
  <t>the expiration of the token in seconds</t>
  <t>the audience, which will be in the Service Account Token</t>
</list></t>

<figure><sourcecode type="yaml"><![CDATA[
serviceAccountToken:
  path: token 
  expirationSeconds: 7200
  audience: "https://localhost:5001/connect/token"
]]></sourcecode></figure>

<t>The full configuration is shown below:</t>

<figure><sourcecode type="yaml"><![CDATA[
apiVersion: apps/v1
kind: Deployment
metadata:
  name: simpleapp
  labels:
    app: simpleapp 
spec:
  replicas: 1
  selector:
    matchLabels:
      app: simpleapp
  template:
    metadata:
      labels:
        app: simpleapp
    spec:
      containers:
        - name: container1
          image: curlimages/curl:8.2.1
          imagePullPolicy: Always
          command:
            - sleep
            - "3600"
          env:
            - name: TOKEN_PATH
              value: '/var/run/secrets/other_token/token/token'
          volumeMounts:
            - mountPath: '/var/run/secrets/other_token/token'
              name: other-token-path
      volumes:
        - name: other-token-path
          projected:
            sources:
            - serviceAccountToken:
                path: token 
                expirationSeconds: 7200
                audience: "https://localhost:5001/connect/token"
]]></sourcecode></figure>

<t>The most important parts of the token, which the workload will obtain, looks as follows:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "aud": [
    "https://localhost:5001/connect/token"
  ],
  "exp": 1691752299,
  "iss": "https://kubernetes.default.svc.cluster.local",
  "sub": "system:serviceaccount:test:default"
}
]]></sourcecode></figure>

<t>A complete token example obtained by the workload is shown below.</t>

<figure><sourcecode type="json"><![CDATA[
{
  "aud": [
    "https://localhost:5001/connect/token"
  ],
  "exp": 1691752299,
  "iat": 1691745099,
  "iss": "https://kubernetes.default.svc.cluster.local",
  "kubernetes.io": {
    "namespace": "test",
    "pod": {
      "name": "simpleapp-5d7dcf96df-n7csk",
      "uid": "9fc443d7-5c7a-48d5-9679-0ee03b17d4c5"
    },
    "serviceaccount": {
      "name": "default",
      "uid": "0bea3006-fb60-49a3-bc80-7e6884d378ae"
    }
  },
  "nbf": 1691745099,
  "sub": "system:serviceaccount:test:default"
}
]]></sourcecode></figure>

<t>To enable the authorization server to use the Service Account Token for client authentication the following configuration is needed:</t>

<t><list style="numbers">
  <t>the client id is set to <spanx style="verb">system:serviceaccount:test:default</spanx>. In our case we are using the default service account in the test namespace.</t>
  <t>the public key of the token signing key. This can be either configured manually, or dynamically by referencing the JWK endpoint Kubernetes exposes, which is https://kubernetes.default.svc.cluster.local/openid/v1/jwks</t>
</list></t>

<t>Note: Authorization servers that follow the OpenID Connect Core specification, which profiles RFC 7523, will unfortunately run into problem. Here is the why.</t>

<t>For JWT-based client authentication <xref target="OIDC"/> specifies the following:</t>

<t><list style="numbers">
  <t>The 'jti' claim is mandated for client authentication.</t>
  <t>The 'iss' claim must match the 'sub' claim. Since Kubernetes issues the tokens, and not the workload, the two do not match.</t>
</list></t>

<t><xref target="RFC7523"/>, on the other hand, does not mandate the use of a 'jti' claim and does not mandate that the 'iss' claim  equals the 'sub' claim.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

