Azure HDInsight の Ranger と Apache Ambari での LDAP 同期
HDInsight Enterprise セキュリティ パッケージ (ESP) クラスターでは、承認に Ranger を使用します。 Apache Ambari と Ranger は、どちらもユーザーとグループを別々に同期しますが、少し動作が異なります。 この記事は、Ranger と Ambari での LDAP 同期について紹介することを目的としています。
一般的なガイドライン
- クラスターは、常に 1 つ以上のグループと共にデプロイします。
- クラスター内でより多くのグループを使用する場合は、Microsoft Entra ID でグループ メンバーシップを更新することが理にかなっているかどうかを確認します。
- クラスター グループを変更する場合は、Ambari を使用して同期フィルターを変更できます。
- Microsoft Entra ID でのすべてのグループ メンバーシップの変更は、以降の同期でクラスターに反映されます。 変更は、最初に Microsoft Entra Domain Services に同期され、次にクラスターに同期される必要があります。
- HDInsight クラスターでは、Samba/Winbind を使用して、クラスター ノードのグループ メンバーシップを投影します。
- グループ メンバーは、Ambari と Ranger の両方に推移的 (すべてのサブグループとそのメンバー) に同期されます。
ユーザーは個別に同期される
- Ambari と Ranger は、2 つの異なる目的で使用されるため、ユーザー データベースを共有しません。
- ユーザーが Ambari UI を使用する必要がある場合は、そのユーザーを Ambari に同期する必要があります。
- ユーザーが Ambari に同期されていない場合、Ambari UI または API はこのユーザーを拒否しますが、システムの他の部分は動作します (これらは Ambari によってではなく、Ranger または Resource Manager によって保護されます)。
- Ranger ポリシーにユーザーまたはグループを含めるには、そのプリンシパルを Ranger で明示的に同期する必要があります。
Ambari のユーザー同期と構成
ヘッド ノードから、ユーザー同期をスケジュールするための cron ジョブ /opt/startup_scripts/start_ambari_ldap_sync.py
が 1 時間ごとに実行されます。この cron ジョブにより、Ambari REST API シリーズが呼び出され、同期が実行されます。このスクリプトにより、同期するユーザーとグループのリストが送信されます (ユーザーは指定されたグループに属していない可能性があるため、どちらも個別に指定されています)。 Ambari によって、ユーザー名としての sAMAccountName およびすべてのグループ メンバーが推移的に同期されます。
ログは /var/log/ambari-server/ambari-server.log
にあります。 詳細については、「Ambari のログ レベルの構成」を参照してください。
Data Lake クラスターでは、ユーザー作成後のフックを使用して、同期されたユーザーのホーム フォルダーが作成され、これらのユーザーがホーム フォルダーの所有者として設定されます。 ユーザーが Ambari に正しく同期されていない場合、ホーム フォルダーが正しくセットアップされていない可能性があるため、ユーザーはジョブの実行に失敗する可能性があります。
Ranger ユーザーの同期と構成
Ranger には、ユーザーを同期するために 1 時間ごとに実行される、組み込みの同期エンジンが用意されています。 ユーザー データベースは Ambari と共有されません。 HDInsight により、管理者ユーザー、ウォッチドッグ ユーザー、およびクラスターの作成中に指定されたグループのメンバーを同期するように検索フィルターが構成されます。 グループ メンバーは、推移的に同期されます。
- 増分同期を無効にします。
- ユーザー グループ同期マップを有効にします。
- 推移的なグループ メンバーを含める検索フィルターを指定します。
- ユーザーの sAMAccountName 属性とグループの name 属性を同期します。
グループ同期または増分同期
Ranger ではグループ同期オプションがサポートされますが、グループ メンバーシップとユーザー フィルターの和集合としてではなく、ユーザー フィルターとの積として機能します。 Ranger におけるグループ同期フィルターの一般的なユース ケースは、グループ フィルター (dn = clusteradmingroup) とユーザー フィルター (city = seattle) です。
増分同期は、既に (最初の) 同期が行われているユーザーに対してのみ動作します。 増分では、最初の同期後にグループに追加された新しいユーザーは同期されません。
Ranger 同期フィルターを更新する
LDAP フィルターは、Ambari UI の Ranger ユーザー同期構成セクションにあります。 既存のフィルターは、(|(userPrincipalName=bob@contoso.com)(userPrincipalName=hdiwatchdog-core01@CONTOSO.ONMICROSOFT.COM)(memberOf:1.2.840.113556.1.4.1941:=CN=hadoopgroup,OU=AADDC Users,DC=contoso,DC=onmicrosoft,DC=com))
の形式になります。 必ず述語を末尾に追加し、net ads
検索コマンドまたは ldp.exe などを使用してフィルターをテストしてください。
Ranger のユーザー同期ログ
Ranger のユーザー同期は、ヘッドノードのいずれかで発生します。 ログは、/var/log/ranger/usersync/usersync.log
にあります。 ログの詳細度を上げるには、次の手順を実行します。
- Ambari にログインします。
- Ranger 構成セクションにアクセスします。
- 詳細 usersync-log4j セクションにアクセスします。
log4j.rootLogger
をDEBUG
レベルに変更します。 変更すると、log4j.rootLogger = DEBUG,logFile,FilterLog
のようになります。- 構成を保存し、Ranger を再起動します。
Ranger ユーザーの同期に関する既知の問題
- グループ名に Unicode 文字が含まれている場合、Ranger 同期でそのオブジェクトを同期できません。 ユーザーが国際的な文字を持つグループに属している場合、Ranger は部分的なグループのメンバーシップを同期します。
- ユーザー名 (sAMAccountName) とグループ名 (name) の長さは 20 文字以下にする必要があります。 グループ名が長い場合、アクセス許可を計算するときに、ユーザーはグループに属していない場合と同様に扱われます。