Security
Spark
YARN

YARN queue ACL for Spark

More than 3 years have passed since last update.

昨日書いたSpark and YARNで、下記のようなことを書いたので少し検証してみた。


YARNで強化するSparkのセキュリティ対策

Spark自体が提供するセキュリティ対策のほかに、YARNのCapacity Schedulerを使うことによって、RMに対してアプリケーション登録時に認証をかけることができるようになる。ちょっと時間切れになってきたので、詳細はまたあとで追記。



YARNのスケジューラが持つキュー

YARNのCapacity SchedulerとFair Schedulerはアプリケーションの登録を受け付けるキューをもっており、これらはUNIXユーザー/グループベースのACLを掛けることができる。このことによりSparkアプリケーションを実行するユーザーごとにアプリケーションの登録可否を制御できる。Capacity Schedulerの場合、複数のキューを持つことができるので、キュー単位でのユーザーの利用制限を掛けることもできる。

以下はCapacity Schedulerの設定例。defaultという名前のキューに対してyutaというUNIXユーザーがアプリケーションを登録したりkillできるようにするには、capacity-scheduler.xmlに以下のような設定をしてやる。

    <property>

<name>yarn.scheduler.capacity.root.acl_administer_queue</name>
<value></value>
</property>

<property>
<name>yarn.scheduler.capacity.root.acl_submit_applications</name>
<value></value>
</property>

<property>
<name>yarn.scheduler.capacity.root.default.acl_administer_queue</name>
<value>yuta</value>
</property>

<property>
<name>yarn.scheduler.capacity.root.default.acl_submit_applications</name>
<value>yuta</value>
</property>

注意すべき点としてyarn.scheduler.capacity.root.acl_administer_queueyarn.scheduler.capacity.root.acl_submit_applicationsというより上位の設定のデフォルト値が*(全許可)となっており、これを上記の例のように削除してやらないと、いくらdefaultキューの設定をいじってあげても制限が効かない。この挙動はどうなのよ?っていう話はYARN-1941で議論されているが、とりあえずこのまま放置される模様。

上記と同じ設定をAmbariで実施するならこんな感じだ。

左がrootの設定、右がdefaultキューの設定

ambari_queue_manager.jpg


Apache Rangerによるユーザー/グループの管理

ユーザーやグループの管理はApache Rangerに移管することもできる。Apache RangerはHadoopエコシステムに対して認可と監査を提供するコンポーネントで、UNIXユーザーやLDAPからユーザーやグループの動機をうけ、それらに対してHadoopの各コンポーネントへのアクセスの認可と、オペレーションログを管理してくれる。例えばYARNとRangerを組み合わせるのであれば以下のようなUIにおいて「どのキューに誰からのアクセスを許可するのか」といった設定をしてやる。

ranger.jpg


マルチテナントなSparkクラスタの運用

昨日のポストでSparkはYARNで動かすべきかというパートで「マルチテナントなSparkクラスタならYARNを使うことのメリットが出やすいのでは」というような話を書いたが、マルチテナントであれば当然ユーザーの数も増える。

そういった環境においては、capacity-scheduer.xmlの更新で利用ユーザーやグループを管理するのは運用の手間がかかる。こういったケースでは前述のApache Rangerを使って下記のような構成を取るのがベターだと言える。

ldap_with_spark.jpg


まとめ

YARNはキューのACLを持っているので、Sparkに対して「誰がアプリケーション登録できるのか」というユーザー/グループ単位での制御を提供してくれる。更にApache Rangerと組み合わせるとユーザー/グループの管理をLDAP等に外出しできる。なので、多数のユーザーが利用するようなSparkのクラスタにマッチする。

ということで、SparkのクラスタマネージャにYARNを選択することのひとつのメリットとして「マルチテナント環境の管理がしやすい」と言える。


Disclaimer

これは個人の意見であり、わたしの雇用者を代表するものではありません。