Pivotal Knowledge Base

フォローする

HttpFSからKerberosによるセキュアHDFSにアクセスするための設定方法

環境

製品 バージョン
Pivotal HD 3.0.x
OS RHEL 6.x

目的

本記事ではHttpFSからKerberosによるセキュアHDFSにアクセスするための設定方法について述べる。

HttpFSからKerberosによるセキュアHDFSにアクセスしたい場合は、本記事における下記手順を参照すること。

手順

1. HttpFSとHTTPサービスのプリンシパルをKDCサーバで作成する。

# addprinc -randkey httpfs/<FQDN>@<REALM>
# addprinc -randkey HTTP/<FQDN>@<REALM> 

<FQDN>は、実際のHttpFSサーバホストのFQDNに書き換える。

<REALM>は、実際のKerberosのレルム名に書き換える。

本記事の例では、<FQDN>をadmin.hadoop.local、<REALM>をPIVOTAL.IOとする。

# kadmin.local -q "addprinc -randkey httpfs/admin.hadoop.local@PIVOTAL.IO "
# kadmin.local -q "addprinc -randkey HTTP/admin.hadoop.local@PIVOTAL.IO"

2. 両方のプリンシパルに対してkeytabファイルを作成する。

# kadmin.local -q "ktadd -k /etc/security/keytabs/httpfs.service.keytab httpfs/admin.hadoop.local@PIVOTAL.IO HTTP/admin.hadoop.local@pivotal.io"

3. keytabファイルをHttpFSのサーバへ配布する。通常は/etc/security/keytabs/配下に配置する。

4. keytabファイルのオーナーを、HttpFS実行ユーザに設定し、グループはhadoopに設定、パーミションを400に変更する。

5. keytabファイルの動作テストを行う。

# kinit -kt /etc/security/keytabs/httpfs.service.keytab httpfs/admin.hadoop.local@PIVOTAL.IO
[root@admin ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: httpfs/admin.hadoop.local@PIVOTAL.IO

Valid starting Expires Service principal
12/01/15 08:33:47 12/02/15 08:33:47 krbtgt/PIVOTAL.IO@PIVOTAL.IO
renew until 12/01/15 08:33:47

6. 下記のプロパティをhttpfs-site.xmlに追加する(httpfs-site.xmlは通常/etc/hadoop-httpfs/conf配下にある)。

<property>
  <name>httpfs.authentication.type</name>
  <value>kerberos</value>
</property> <property>
  <name>httpfs.hadoop.authentication.type</name>
  <value>kerberos</value>
</property> <property>
  <name>httpfs.authentication.kerberos.principal</name>
  <value>HTTP/admin.hadoop.local@PIVOTAL.IO</value>
</property> <property>
  <name>httpfs.authentication.kerberos.keytab</name>
  <value>/etc/security/keytabs/httpfs.service.keytab</value>
</property> <property>
  <name>httpfs.hadoop.authentication.kerberos.principal</name>
  <value>httpfs/admin.hadoop.local@PIVOTAL.IO</value>
</property> <property>
<name>httpfs.hadoop.authentication.kerberos.keytab</name>
<value>/etc/security/keytabs/httpfs.service.keytab</value>
</property> <property>
  <name>httpfs.authentication.kerberos.name.rules</name>
  <value>         RULE:[2:$1@$0](rm@.*PIVOTAL.IO)s/.*/yarn/
        RULE:[2:$1@$0](nm@.*PIVOTAL.IO)s/.*/yarn/
        RULE:[2:$1@$0](nn@.*PIVOTAL.IO)s/.*/hdfs/
        RULE:[2:$1@$0](dn@.*PIVOTAL.IO)s/.*/hdfs/
        RULE:[2:$1@$0](hbase@.*PIVOTAL.IO)s/.*/hbase/
        RULE:[2:$1@$0](hbase@.*PIVOTAL.IO)s/.*/hbase/
        RULE:[2:$1@$0](oozie@.*PIVOTAL.IO)s/.*/oozie/
        RULE:[2:$1@$0](jhs@.*PIVOTAL.IO)s/.*/mapred/
        RULE:[2:$1@$0](jn/_HOST@.*PIVOTAL.IO)s/.*/hdfs/
        RULE:[2:$1@$0](falcon@.*PIVOTAL.IO)s/.*/falcon/
        DEFAULT     </value> </property>

注意:

  • プリンシパルの名称とkeytabファイルのパスを適切に変更すること。
  • httpfs.authentication.kerberos.name.rulesをcore-site.xmlのhadoop.security.auth_to_localと同じ値に設定する。

7. HttpFSを再起動し変更を反映する。

# service hadoop-httpfs restart

8. セキュアHDFSへのHttpFSアクセスが成功することを確認する。下記のコマンドにてKerberosのチケットを取得しHDFSのルートディレクトリをリストする。

[root@admin ~]# kinit -kt /etc/security/keytabs/httpfs.service.keytab HTTP/admin.hadoop.local@PIVOTAL.IO
[root@admin ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/admin.hadoop.local@PIVOTAL.IO Valid starting Expires Service principal
12/01/15 06:53:15 12/02/15 06:53:15 krbtgt/PIVOTAL.IO@PIVOTAL.IO
renew until 12/01/15 06:53:15
[root@admin ~]# curl --negotiate -i -L -u: 'http://admin.hadoop.local:14000/webhdfs/v1/?op=LISTSTATUS'
HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
WWW-Authenticate: Negotiate
Set-Cookie: hadoop.auth=; Path=/; Expires=Thu, 01-Jan-1970 00:00:00 GMT; HttpOnly
Content-Type: text/html;charset=utf-8
Content-Length: 997
Date: Tue, 01 Dec 2015 11:53:23 GMT HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: hadoop.auth="u=HTTP&p=HTTP/admin.hadoop.local@PIVOTAL.IO&t=kerberos&e=1449006803887&s=qeIsIBmD6POgBrciNHuMna2ifrY="; Path=/; Expires=Tue, 01-Dec-2015 21:53:23 GMT; HttpOnly
Content-Type: application/json
Transfer-Encoding: chunked
Date: Tue, 01 Dec 2015 11:53:23 GMT {"FileStatuses":{"FileStatus":[{"pathSuffix":"app-logs","type":"DIRECTORY","length":0,"owner":"yarn","group":"hadoop","permission":"777","accessTime":0,"modificationTime":1443577258258,"blockSize":0,"replication":0},{"pathSuffix":"apps","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hdfs","permission":"755","accessTime":0,"modificationTime":1442907202986,"blockSize":0,"replication":0},{"pathSuffix":"hawq_data","type":"DIRECTORY","length":0,"owner":"postgres","group":"gpadmin","permission":"755","accessTime":0,"modificationTime":1442987912402,"blockSize":0,"replication":0},{"pathSuffix":"mapred","type":"DIRECTORY","length":0,"owner":"mapred","group":"hdfs","permission":"755","accessTime":0,"modificationTime":1442907099113,"blockSize":0,"replication":0},{"pathSuffix":"mr-history","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hdfs","permission":"755","accessTime":0,"modificationTime":1442907099121,"blockSize":0,"replication":0},{"pathSuffix":"phd","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hdfs","permission":"755","accessTime":0,"modificationTime":1442907132464,"blockSize":0,"replication":0},{"pathSuffix":"system","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hdfs","permission":"755","accessTime":0,"modificationTime":1442907074968,"blockSize":0,"replication":0},{"pathSuffix":"tmp","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hdfs","permission":"777","accessTime":0,"modificationTime":1442990872079,"blockSize":0,"replication":0},{"pathSuffix":"user","type":"DIRECTORY","length":0,"owner":"hdfs","group":"hdfs","permission":"755","accessTime":0,"modificationTime":1443576819986,"blockSize":0,"replication":0}]}}

追加情報

 

コメント

Powered by Zendesk