KerberosのKDCを冗長化


はじめに

Hadoopクラスタ内の認証方式として、Kerberos認証が一般的であり、導入方法はCDH, HDP等のドキュメントに記載されています。
しかし、Hadoopクラスタを本番環境で利用する際は、Kerberos認証の仕組み自体の冗長化も考慮しなければなりません。
たとえば、冗長化されていないKerberos認証の仕組みが故障した場合、Hadoopクラスタ内のサービスの認証ができずに処理が動きません。
Kerberosの認証はKDC(Key Distribution Center)が行っており、単一障害点(SPOF)です。
本エントリでは、KDCをmaster-slave構成で冗長化を行います。

冗長化の仕組み

Kerberosは認証情報を保持したデータベースが存在し、マスタKDCは認証に利用しています。
上記のデータベースをダンプし、スレーブKDCに伝搬させます。
ダンプしたファイルをスレーブKDCに伝搬するサービスをkpropと言います。
kpropはファイルを暗号化し、スレーブKDCに対してだけ伝搬を行います。

環境

前提

すでにKDCが冗長化されていない状態で、Kerberos認証が利用できているとします。
また、下記の設定はすべてrootユーザで行います。

ホスト

OS: CentOS7

ホスト名 用途 備考
masterkdc.example.com kdcのマスタ 作成済み
slavekdc.example.com kdcのスレーブ 本記事で作成

パッケージのインストール(slavekdc)

slavekdcに対して、KDCの構築に必要なパッケージをインストールします。

yum install -y krb5-server krb5-libs krb5-workstation

kpropので利用するhostプリンシパルを作成

hostプリンシパルのKDCの伝搬で必要なhostプリンシパルを作成します。
また、kpropサービスでhostプリンシパルを利用できるようにkeytabに書き込みます。

## masterkdc
kadmin.local
kadmin: add_principal -randkey host/masterkdc.example.com
kadmin: ktadd host/masterkdc.example.com
## slavekdc
kadmin {admin権限のあるプリンシパル}
kadmin: add_principal -randkey host/slavekdc.example.com
kadmin: ktadd host/slavekdc.example.com

kpropd.aclを作成(masterkdc)

masterkdcで伝搬対象であるhostプリンシパルを/var/kerberos/krb5kdc/kpropd.aclに設定します。

kpropd.acl

ファイルをslavekdcにコピー

下記のファイルをmasterkdcからslavekdcへコピーします。

  • /etc/krb5.conf
  • /var/kerberos/krb5kdc/kdc.conf
  • /var/kerberos/krb5kdc/kprop.acl
  • /var/kerberos/krb5kdc/.k5.EXAMPLE.COM

サービスの設定(slavekdc)

slavekdcでサービスの設定を行います。

slavekdc
systemctl stop kadmin
systemctl start kprop

手動でmasterkdcからslavekdcへ伝搬(masterkdc)

下記のコマンド実行してmasterkdcからslavekdcへデータベースのデータを伝搬させます。

kdb5_util dump /var/kerberos/krb5kdc/slave_datatrans
kprop slavekdc.example.com

確認(slavekdc)

slavekdcへ伝搬されたか確認します。

krb5kdc # slaveでKDCの起動
kadmin.lcoal
kadmin: listprinc # プリンシパルの一覧を表示

また、/etc/krb5.confを書き換えます。

krb5.conf
[realms]
 EXAMPLE.COM = {
  kdc = slavekdc.example.com
 }
kinit {登録してあるプリンシパル}

おわりに

伝搬を定期的に行うには、cron等が用いられるそうです。

編集履歴

  • 誤字、設定の方法の順番修正(2020年06月14日)

参考

11.2. KERBEROS KDC の設定
Kerberos データベースの管理