Github user gaborgsomogyi commented on a diff in the pull request:

    https://github.com/apache/spark/pull/22598#discussion_r223354435
  
    --- Diff: 
external/kafka-0-10-sql/src/main/scala/org/apache/spark/sql/kafka010/TokenUtil.scala
 ---
    @@ -0,0 +1,116 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *    http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.spark.sql.kafka010
    +
    +import java.text.SimpleDateFormat
    +import java.util.Properties
    +
    +import org.apache.hadoop.io.Text
    +import org.apache.hadoop.security.token.{Token, TokenIdentifier}
    +import 
org.apache.hadoop.security.token.delegation.AbstractDelegationTokenIdentifier
    +import org.apache.kafka.clients.CommonClientConfigs
    +import org.apache.kafka.clients.admin.{AdminClient, 
CreateDelegationTokenOptions}
    +import org.apache.kafka.common.config.SaslConfigs
    +import org.apache.kafka.common.security.token.delegation.DelegationToken
    +
    +import org.apache.spark.SparkConf
    +import org.apache.spark.internal.Logging
    +import org.apache.spark.internal.config._
    +
    +private[kafka010] object TokenUtil extends Logging {
    +  val TOKEN_KIND = new Text("KAFKA_DELEGATION_TOKEN")
    +  val TOKEN_SERVICE = new Text("kafka.server.delegation.token")
    +
    +  private class KafkaDelegationTokenIdentifier extends 
AbstractDelegationTokenIdentifier {
    +    override def getKind: Text = TOKEN_KIND;
    +  }
    +
    +  private def printToken(token: DelegationToken): Unit = {
    +    val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm")
    +    log.info("%-15s %-30s %-15s %-25s %-15s %-15s %-15s".format(
    +      "TOKENID", "HMAC", "OWNER", "RENEWERS", "ISSUEDATE", "EXPIRYDATE", 
"MAXDATE"))
    +    val tokenInfo = token.tokenInfo
    +    log.info("%-15s [hidden] %-15s %-25s %-15s %-15s %-15s".format(
    +      tokenInfo.tokenId,
    +      tokenInfo.owner,
    +      tokenInfo.renewersAsString,
    +      dateFormat.format(tokenInfo.issueTimestamp),
    +      dateFormat.format(tokenInfo.expiryTimestamp),
    +      dateFormat.format(tokenInfo.maxTimestamp)))
    +  }
    +
    +  def obtainToken(sparkConf: SparkConf): Token[_ <: TokenIdentifier] = {
    +    val adminClientProperties = new Properties
    +
    +    val bootstrapServers = sparkConf.get(KAFKA_BOOTSTRAP_SERVERS)
    +    require(bootstrapServers.nonEmpty, s"Tried to obtain kafka delegation 
token but bootstrap " +
    +      "servers not configured.")
    +    
adminClientProperties.put(CommonClientConfigs.BOOTSTRAP_SERVERS_CONFIG, 
bootstrapServers.get)
    +
    +    val protocol = sparkConf.get(KAFKA_SECURITY_PROTOCOL)
    +    
adminClientProperties.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, 
protocol)
    +    if (protocol.endsWith("SSL")) {
    +      logInfo("SSL protocol detected.")
    +
    +      val truststoreLocation = sparkConf.get(KAFKA_TRUSTSTORE_LOCATION)
    +      if (truststoreLocation.nonEmpty) {
    +        adminClientProperties.put("ssl.truststore.location", 
truststoreLocation.get)
    +      } else {
    +        logInfo("No truststore location set for SSL.")
    +      }
    +
    +      val truststorePassword = sparkConf.get(KAFKA_TRUSTSTORE_PASSWORD)
    +      if (truststorePassword.nonEmpty) {
    +        adminClientProperties.put("ssl.truststore.password", 
truststorePassword.get)
    +      } else {
    +        logInfo("No truststore password set for SSL.")
    +      }
    +    } else {
    +      logWarning("Obtaining kafka delegation token through plain 
communication channel. Please " +
    +        "consider it's security impact.")
    --- End diff --
    
    Fixed.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to