<?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.1 (Ruby 3.0.2) -->
<?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-hofmann-wimse-workload-identity-bcp-00" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.18.1 -->
  <front>
    <title abbrev="Workload Identity">Best Current Practice for Workload Identity</title>
    <seriesInfo name="Internet-Draft" value="draft-hofmann-wimse-workload-identity-bcp-00"/>
    <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="2023" month="October" day="10"/>
    <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 anchor="fig-arch">
        <name>Protocol Interaction.</name>
        <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>
      <ol spacing="normal" type="1"><li>
          <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>
        </li>
        <li>
          <t>Token reuse: Tokens can be reused by attackers to gain access to the system. However, expiration times limited the token reuse time.</t>
        </li>
        <li>
          <t>Misconfigured service accounts: Similar to misconfigured access to secrets, misconfigured service accounts can lead to applications gaining more privileges then necessary.</t>
        </li>
        <li>
          <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>
        </li>
      </ol>
      <t>The following fields are populated in the Service Account Token:</t>
      <ol spacing="normal" type="1"><li>
          <t>The 'iss' claim MUST contain a string identifying the container orchestrator.</t>
        </li>
        <li>
          <t>The 'sub' claim MUST contain a string identifying the workload. This is also the client_id according to <xref target="RFC7523"/>.</t>
        </li>
        <li>
          <t>The 'aud' claim MUST identify one or multiple authorization servers that are intended recipients of the Service Account Token for client authorization.</t>
        </li>
      </ol>
      <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>
      <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="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 anchor="sec-informative-references">
        <name>Informative References</name>
        <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>
    </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>
      <ol spacing="normal" type="1"><li>
          <t>the path, where the application can find the token, as a file</t>
        </li>
        <li>
          <t>the expiration of the token in seconds</t>
        </li>
        <li>
          <t>the audience, which will be in the Service Account Token</t>
        </li>
      </ol>
      <sourcecode type="yaml"><![CDATA[
serviceAccountToken:
  path: token 
  expirationSeconds: 7200
  audience: "https://localhost:5001/connect/token"
]]></sourcecode>
      <t>The full configuration is shown below:</t>
      <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>
      <t>The most important parts of the token, which the workload will obtain, looks as follows:</t>
      <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>
      <t>A complete token example obtained by the workload is shown below.</t>
      <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>
      <t>To enable the authorization server to use the Service Account Token for client authentication the following configuration is needed:</t>
      <ol spacing="normal" type="1"><li>
          <t>the client id is set to <tt>system:serviceaccount:test:default</tt>. In our case we are using the default service account in the test namespace.</t>
        </li>
        <li>
          <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>
        </li>
      </ol>
      <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>
      <ol spacing="normal" type="1"><li>
          <t>The 'jti' claim is mandated for client authentication.</t>
        </li>
        <li>
          <t>The 'iss' claim must match the 'sub' claim. Since Kubernetes issues the tokens, and not the workload, the two do not match.</t>
        </li>
      </ol>
      <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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
y8x7Is7aYvFV3otwugxjJE+9kiu67OUrxENaxeF4NJXscLqG6TBj+jk3cZFb
28Y7LaTTUpfkRNodp2jreUJg4qjaC3fiRkseOEH2UaHyJP6H/MvnF3Zubgti
7d0dbGQkwVZ2fJCW4UgP8mpt5wynRejWCYsGuSwYvPKYf3ROkBPmmUt4u9XQ
SYc9Fz4t5szQ8WJ7KzAjg2NU5RPbZcsY9S3ZvDNOcsic5yInbJOboC9YsFyD
7FpmriJdeR7bunVAHTpDkC4VvsbMgpuelSbnFT67jVALICnRLCLWeMtE5syu
ECkUlLgrUY8FtNoUK6oWYgCiAHMTQQimL9nxU1qjHJ87AFNDaR9SnsCh9YrG
6t5LWZEtIYtJyCsiGeSMT1EuPCUTtT1heHaQxj2IO7TOAfDG2IEy7OnSCsO6
tNXW+xUErw1u76qUVAdIqqVmunAOLUoBho7yzYyRpGeLmq1LedTJrmNx5/A3
iJsS/0BdSzc6pKKB6wwzG+F/1P1A13Lkpe8sx9gohc7IIEouLgmhjiU70mmm
pqyefB5oW8ybSm17688//2y7Nd3n6aj7PN008b7/e/PErqE/MNH7gO9DfOTW
jybGP79tBtVszTP6gKPnHv+tbnr/yrmw9SC9Isfk9GnsLXjzlYI0AlW0YIXa
eEHVWFO7YIWP8YKO3jYLuk6vs6Dm4qRLw4M7BDN6NA3B3tZx6bfVre69Ya5n
6/3qgpvw+jQS3IYFTzs4Pgg7+nH/tP0VQ/DLz52E+sub44L7+5iD7Qy/3DN0
8+73/xp2/Nu9+BR8eFju2buZTi8DUovIVsNyz+weXzt8aiSyBvm1rHPPb31S
1rCus/yCelcN2yYP7sRePajig1O77v5hqJ3n5nFTnzZ8Wp3atYu/hS/3q1P7
FnTvcr51U/vPA1D7zwO4PvR8z3nGlu/D1N1E/BBCnzsG+LfBRxSYJoEbOm0D
33jwjUIb1713d8hG+Pwo5ZhjETNvVSgGBJ0rIMrD1jIkJ1ODlAW5L4XN7S1K
MFXRpOGh2PctGO6oUbPLn6YRSJQClAmPXbv2EmmlLkxmrpbhKIAKWzpfs2Jw
9uvFJUpV/is+nPP7pzf/8evppzev6f3i7cn7982Lm0F9mbfnv773E+itXfrq
/OzszYfXbjVGRW/o7OS/Bly/AMr5x8vT8w8n7wcuR4j769wv45KeU4kF6jRX
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

-->

</rfc>
