[ 
https://issues.apache.org/jira/browse/KAFKA-6452?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16352789#comment-16352789
 ] 

ASF GitHub Bot commented on KAFKA-6452:
---------------------------------------

junrao closed pull request #4490: KAFKA-6452: Add documentation for delegation 
token authentication
URL: https://github.com/apache/kafka/pull/4490
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/docs/security.html b/docs/security.html
index 4e401aec186..3e3c818571a 100644
--- a/docs/security.html
+++ b/docs/security.html
@@ -661,6 +661,108 @@ <h3><a id="security_sasl" href="#security_sasl">7.3 
Authentication using SASL</a
             old mechanism from JAAS config file. Incrementally bounce the 
cluster again.</li>
         </ol>
     </li>
+
+    <li><h4><a id="security_delegation_token" 
href="#security_delegation_token">Authentication using Delegation 
Tokens</a></h4>
+        <p>Delegation token based authentication is a lightweight 
authentication mechanism to complement existing SASL/SSL
+            methods. Delegation tokens are shared secrets between kafka 
brokers and clients. Delegation tokens will help processing
+            frameworks to distribute the workload to available workers in a 
secure environment without the added cost of distributing
+            Kerberos TGT/keytabs or keystores when 2-way SSL is used. See <a 
href="https://cwiki.apache.org/confluence/display/KAFKA/KIP-48+Delegation+token+support+for+Kafka";>KIP-48</a>
+            for more details.</p>
+
+        <p>Typical steps for delegation token usage are:</p>
+        <ol>
+        <li>User authenticates with the Kafka cluster via SASL or SSL, and 
obtains a delegation token. This can be done
+            using AdminClient APIs or using <tt>kafka-delegation-token.sh</tt> 
script.</li>
+        <li>User securely passes the delegation token to Kafka clients for 
authenticating with the Kafka cluster.</li>
+        <li>Token owner/renewer can renew/expire the delegation tokens.</li>
+        </ol>
+
+        <ol>
+        <li><h5><a id="security_token_management" 
href="#security_token_management">Token Management</a></h5>
+        <p> A master key/secret is used to generate and verify delegation 
tokens. This is supplied using config
+            option <tt>delegation.token.master.key</tt>. Same secret key must 
be configured across all the brokers.
+            If the secret is not set or set to empty string, brokers will 
disable the delegation token authentication.</p>
+
+        <p>In current implementation, token details are stored in Zookeeper 
and is suitable for use in Kafka installations where
+            Zookeeper is on a private network. Also currently,  master 
key/secret is stored as plain text in server.properties
+            config file. We intend to make these configurable in a future 
Kafka release.</p>
+
+        <p>A token has a current life, and a maximum renewable life. By 
default, tokens must be renewed once every 24 hours
+            for up to 7 days. These can be configured using 
<tt>delegation.token.expiry.time.ms</tt>
+            and <tt>delegation.token.max.lifetime.ms</tt> config options.</p>
+
+        <p>Tokens can also be cancelled explicitly.  If a token is not renewed 
by the token’s expiration time or if token
+            is beyond the max life time, it will be deleted from all broker 
caches as well as from zookeeper.</p>
+        </li>
+
+        <li><h5><a id="security_sasl_create_tokens" 
href="#security_sasl_create_tokens">Creating Delegation Tokens</a></h5>
+        <p>Tokens can be created by using AdminClient APIs or using 
<tt>kafka-delegation-token.sh</tt> script.
+            Delegation token requests (create/renew/expire/describe) should be 
issued only on SASL or SSL authenticated channels.
+            Tokens can not be requests if the initial authentication is done 
through delegation token.
+            <tt>kafka-delegation-token.sh</tt> script examples are given 
below.</p>
+        <p>Create a delegation token:
+        <pre class="brush: bash;">
+    > bin/kafka-delegation-tokens.sh --bootstrap-server localhost:9092 
--create   --max-life-time-period -1 --command-config client.properties 
--renewer-principal User:user1
+        </pre>
+        <p>Renew a delegation token:
+        <pre class="brush: bash;">
+    > bin/kafka-delegation-tokens.sh --bootstrap-server localhost:9092 --renew 
   --renew-time-period -1 --command-config client.properties --hmac ABCDEFGHIJK
+        </pre>
+        <p>Expire a delegation token:
+        <pre class="brush: bash;">
+    > bin/kafka-delegation-tokens.sh --bootstrap-server localhost:9092 
--expire   --expiry-time-period -1   --command-config client.properties  --hmac 
ABCDEFGHIJK
+        </pre>
+        <p>Existing tokens can be described using the --describe option:
+        <pre class="brush: bash;">
+    > bin/kafka-delegation-tokens.sh --bootstrap-server localhost:9092 
--describe --command-config client.properties  --owner-principal User:user1
+        </pre>
+        </li>
+        <li><h5><a id="security_token_authentication" 
href="#security_token_authentication">Token Authentication</a></h5>
+            <p>Delegation token authentication piggybacks on the current 
SASL/SCRAM authentication mechanism. We must enable
+                SASL/SCRAM mechanism on Kafka cluster as described in <a 
href="#security_sasl_scram">here</a>.</p>
+
+             <p>Configuring Kafka Clients:</p>
+                <ol>
+                    <li>Configure the JAAS configuration property for each 
client in producer.properties or consumer.properties.
+                The login module describes how the clients like producer and 
consumer can connect to the Kafka Broker.
+               The following is an example configuration for a client for the 
token authentication:
+                <pre class="brush: text;">
+   sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule 
required \
+        username="tokenID123" \
+        password="lAYYSFmLs4bTjf+lTZ1LCHR/ZZFNA==" \
+        tokenauth="true";</pre>
+
+                <p>The options <tt>username</tt> and <tt>password</tt> are 
used by clients to configure the token id and
+                    token HMAC. And the option <tt>tokenauth</tt> is used to 
indicate the server about token authentication.
+                    In this example, clients connect to the broker using token 
id: <i>tokenID123</i>. Different clients within a
+                    JVM may connect using different tokens by specifying 
different token details in <code>sasl.jaas.config</code>.</p>
+
+                <p>JAAS configuration for clients may alternatively be 
specified as a JVM parameter similar to brokers
+                as described <a href="#security_client_staticjaas">here</a>. 
Clients use the login section named
+                <tt>KafkaClient</tt>. This option allows only one user for all 
client connections from a JVM.</p></li>
+            </ol>
+        </li>
+
+        <li><h5><a id="security_token_secret_rotation" 
href="#security_token_secret_rotation">Procedure to manually rotate the 
secret:</a></h5>
+            <p>We require a re-deployment when the secret needs to be rotated. 
During this process, already connected clients
+                will continue to work. But any new connection requests and 
renew/expire requests with old tokens can fail. Steps are given below.</p>
+
+            <ol>
+                <li>Expire all existing tokens.</li>
+                <li>Rotate the secret by rolling upgrade, and</li>
+                <li>Generate new tokens</li>
+            </ol>
+            <p>We intend to automate this in a future Kafka release.</p>
+        </li>
+
+        <li><h5><a id="security_token_notes" 
href="#security_token_notes">Notes on Delegation Tokens</a></h5>
+            <ul>
+            <li>Currently, we only allow a user to create delegation token for 
that user only. Owner/Renewers can renew or expire tokens.
+                Owner/renewers can always describe their own tokens. To 
describe others tokens, we need to add DESCRIBE permission on Token 
Resource.</li>
+            </ul>
+        </li>
+        </ol>
+    </li>
     </ol>
 
     <h3><a id="security_authz" href="#security_authz">7.4 Authorization and 
ACLs</a></h3>


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> Add documentation for delegation token authentication mechanism
> ---------------------------------------------------------------
>
>                 Key: KAFKA-6452
>                 URL: https://issues.apache.org/jira/browse/KAFKA-6452
>             Project: Kafka
>          Issue Type: Sub-task
>          Components: documentation
>            Reporter: Manikumar
>            Assignee: Manikumar
>            Priority: Major
>             Fix For: 1.1.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to