うさぎ好きエンジニアの備忘録

うさぎたちに日々癒されているエンジニアが業務で直面したもの & 個人的な学習メモを残していきます。

Kerberize 化した Storm UI で Invalid argument (400)

Kerberize 化した Storm UI にアクセスしたところ、以下のエラーが出てしまい、正常に UI が表示されなくなってしまった…

Caused by: sun.security.krb5.KrbException: Invalid argument (400) - Cannot find key of appropriate type to decrypt AP REP - AES256 CTS mode with HMAC SHA1-96
        at sun.security.krb5.KrbApReq.authenticate(KrbApReq.java:278) ~[?:1.8.0_161]
        at sun.security.krb5.KrbApReq.<init>(KrbApReq.java:149) ~[?:1.8.0_161]
        at sun.security.jgss.krb5.InitSecContextToken.<init>(InitSecContextToken.java:108) ~[?:1.8.0_161]
        at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:829) ~[?:1.8.0_161]
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342) ~[?:1.8.0_161]
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285) ~[?:1.8.0_161]
        at sun.security.jgss.spnego.SpNegoContext.GSS_acceptSecContext(SpNegoContext.java:906) ~[?:1.8.0_161]
        at sun.security.jgss.spnego.SpNegoContext.acceptSecContext(SpNegoContext.java:556) ~[?:1.8.0_161]
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:342) ~[?:1.8.0_161]
        at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285) ~[?:1.8.0_161]
        at org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler$2.run(KerberosAuthenticationHandler.java:366) ~[storm-core-1.1.1.jar:1.1.1]
        at org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler$2.run(KerberosAuthenticationHandler.java:348) ~[storm-core-1.1.1.jar:1.1.1]
        at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_161]
        at javax.security.auth.Subject.doAs(Subject.java:422) ~[?:1.8.0_161]
        at org.apache.hadoop.security.authentication.server.KerberosAuthenticationHandler.authenticate(KerberosAuthenticationHandler.java:348) ~[storm-core-1.1.1.jar:1.1.1]
        ... 32 more

tl;dr

原因究明

とりあえず storm.yaml 内にある Storm UI の Kerberize 設定周りを確認してみる…

$ grep '^ui.*' < /etc/storm/conf/storm.yaml
ui.childopts : '-Xmx768m -Djava.security.auth.login.config=/etc/storm/conf/storm_jaas.conf'
ui.filter : 'org.apache.hadoop.security.authentication.server.AuthenticationFilter'
ui.filter.params : {'type': 'kerberos', 'kerberos.principal': 'HTTP/storm-ui.ponteru.co.jp@DEV', 'kerberos.keytab': '/etc/security/keytabs/spnego.service.keytab', 'kerberos.name.rules': 'RULE:[1:$1@$0](.*@DEV)s/@.*//'}
ui.port : 8744

エラーログ的に、ui.filter.params の kerberos.principal と kerberos.keytab らへんが怪しいので確認していきます。

とりあえず Google 先生を頼ってみる

調べて見たら NameNode の HA 化周りで同じ問題に当たっている人を発見!

Getting the error "Cannot find key of appropriate type to decrypt AP REP - AES256 CTS mode with HMAC SHA1-96" when starting up the NN in HA - Hortonworks

RESOLUTION:

We had to change the permissions on your /etc/security/keytab/spnego.keytab to 640.

This article created by Hortonworks Support (Article: 000003482) on 2015-12-29 19:14 OS: Linux Type: Installation, Configuration Version: 2.2

どうやら spnego.service.keytab のパーミッションがおかしいらしい…。hadoop グループに属する user が spnego.service.keytab を使うことができないといけないのにそれができないのがダメとのこと。

問題修正

今の設定だと Storm UI が storm ユーザによって起動されるようになっているので、storm ユーザが属するグループを確認。

$ id storm
uid=998(storm) gid=997(hadoop) groups=997(hadoop)

そして spnego.service.keytab のパーミッションも確認。

$ ls -l /etc/security/keytabs/spnego.service.keytab
-r-------- 1 root hadoop 1074 Sun 29 16:24 /etc/security/keytabs/spnego.service.keytab

グループに対して権限が一切ないので、Google 先生のおっしゃっている通りダメでした…。 hadoop グループでも keytab を読み込めるようにパーミッションを 440 に変更して Storm UI を再起動。

$ sudo chmod 440 /etc/security/keytabs/spnego.service.keytab
 
$ ls -l /etc/security/keytabs/spnego.service.keytab
-r--r----- 1 root hadoop 1074 Jan 25 16:24 /etc/security/keytabs/spnego.service.keytab
 
$ sudo service storm-ui restart
Stopping Storm UI (ui):                                    [  OK  ]
Starting Storm UI (ui):                                    [  OK  ]
Started Storm UI (ui):                                     [  OK  ]

ちゃんと Storm UI が表示されるのが確認されたのでおk!