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

Allen Wittenauer commented on YARN-4006:
----------------------------------------

bq. Is the usecase description part of a proprietary solution that we don't 
want to expose for some reason?

Yes.

bq. From what I can see, if a custom authentication handler (forget AltKerberos 
for a moment) is configured than the TimelineAuthenticationFilterInitializer 
will not add it or the Pseudo or Kerberos handlers to the FilterConfig.

... which would break folks who are using, e.g., SAML.  There are definitely 
handlers out in the wild for all sorts of weird things.

bq. If we want to be able to use custom authentication handlers here than we 
need the change proposed by this patch.

I'm left with the question of "why should timeline server be handled 
differently than every other serving process in Hadoop?"  Even the 2NN allows 
for a custom authentication handler.  It basically makes the TS seem like a 
significantly lower quality service if it can only use two auth handlers when 
it only supports REST as a connection point!

bq. What are the different client types for this endpoint and how (if at all) 
does a proxy come into play for each?

Automated processes that are outside the network to build reporting and what 
not.  They will not have access to a kdc to use for authentication. A network 
hole will be punched that will allow for IP redirection.  Also note that they 
can add custom user-agent strings...

bq. What would be examples of the non-kerberos side of the AltKerberos

JWT is definitely one of them. The other is an OTP string in a custom HTTP 
header. 

FWIW: I completely agree that this whole mess would go away if either 
AltKerberos was smarter and/or there was a generic AuthenticationHandler hook 
that every daemon used.  But Hadoop being Hadoop, the latter was never an 
option given how often individual teams working on individual components seem 
to be stuck permanently in NIH mode.  "Oh, the NN needs to do this little bit 
different for the 2NN" is what started the downward spiral here. :(



> YARN ATS Alternate Kerberos HTTP Authentication Changes
> -------------------------------------------------------
>
>                 Key: YARN-4006
>                 URL: https://issues.apache.org/jira/browse/YARN-4006
>             Project: Hadoop YARN
>          Issue Type: Improvement
>          Components: security, timelineserver
>    Affects Versions: 2.5.0, 2.6.0, 2.7.0, 2.5.1, 2.6.1, 2.8.0, 2.7.1, 2.7.2
>            Reporter: Greg Senia
>            Assignee: Greg Senia
>            Priority: Blocker
>         Attachments: YARN-4006-branch-trunk.patch, 
> YARN-4006-branch2.6.0.patch, sample-ats-alt-auth.patch
>
>
> When attempting to use The Hadoop Alternate Authentication Classes. They do 
> not exactly work with what was built with YARN-1935.
> I went ahead and made the following changes to support using a Custom 
> AltKerberos DelegationToken custom class.
> Changes to: TimelineAuthenticationFilterInitializer.class
> {code}
>    String authType = filterConfig.get(AuthenticationFilter.AUTH_TYPE);
>     LOG.info("AuthType Configured: "+authType);
>     if (authType.equals(PseudoAuthenticationHandler.TYPE)) {
>       filterConfig.put(AuthenticationFilter.AUTH_TYPE,
>           PseudoDelegationTokenAuthenticationHandler.class.getName());
>         LOG.info("AuthType: PseudoDelegationTokenAuthenticationHandler");
>     } else if (authType.equals(KerberosAuthenticationHandler.TYPE) || 
> (UserGroupInformation.isSecurityEnabled() && 
> conf.get("hadoop.security.authentication").equals(KerberosAuthenticationHandler.TYPE)))
>  {
>       if (!(authType.equals(KerberosAuthenticationHandler.TYPE))) {
>         filterConfig.put(AuthenticationFilter.AUTH_TYPE,
>           authType);
>         LOG.info("AuthType: "+authType);
>       } else {
>         filterConfig.put(AuthenticationFilter.AUTH_TYPE,
>           KerberosDelegationTokenAuthenticationHandler.class.getName());
>         LOG.info("AuthType: KerberosDelegationTokenAuthenticationHandler");
>       } 
>       // Resolve _HOST into bind address
>       String bindAddress = conf.get(HttpServer2.BIND_ADDRESS);
>       String principal =
>           filterConfig.get(KerberosAuthenticationHandler.PRINCIPAL);
>       if (principal != null) {
>         try {
>           principal = SecurityUtil.getServerPrincipal(principal, bindAddress);
>         } catch (IOException ex) {
>           throw new RuntimeException(
>               "Could not resolve Kerberos principal name: " + ex.toString(), 
> ex);
>         }
>         filterConfig.put(KerberosAuthenticationHandler.PRINCIPAL,
>             principal);
>       }
>     }
>  {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to