このトピックでは、YARN の高セキュリティ機能と関連する構成について説明します。
背景情報
Kerberos 認証
高セキュリティクラスターを作成すると、EMR は YARN の Kerberos 関連パラメーターを構成します。手動構成は不要です。 Kerberos の詳細については、「概要」をご参照ください。
kinit
// kinit コマンドを実行します
yarn node -list
// yarn node -list コマンドを実行します
kdestroy
// kdestroy コマンドを実行します
kinit
// kinit コマンドを実行します
curl --negotiate -u: http://master-1-1:8088/ws/v1/cluster/nodes
// curl コマンドを実行します
kdestroy
// kdestroy コマンドを実行します
ACL ベースの承認
高セキュリティクラスターの場合、YARN のアクセス制御リスト(ACL)機能は自動的に有効になります。デフォルトでは、サービスアカウントが属する hadoop ユーザーグループにのみ、YARN サービスとキューの管理、および YARN ジョブの送信の権限が付与されます。 yarn.acl.enable
パラメーターを構成して、YARN の ACL 機能を有効にするかどうかを指定できます。値 true は、機能が有効になっていることを示します。
YARN の管理権限
高セキュリティ機能のデフォルト構成は、yarn.admin.acl= hadoop
です(hadoop
の前にスペースがあります)。これは、hadoop ユーザーグループがサービス管理者として機能することを示します。ほとんどの場合、EMR クラスターのプロセスは、hadoop ユーザーグループに属する Linux ユーザーによって開始されます。Hadoop のデフォルトのユーザーグループマッピングは、ノードのオペレーティングシステムのグループ情報に基づいています。
yarn.admin.acl
パラメーターは、ユーザー ユーザーグループ
形式の値に設定されます。ユーザーとユーザーグループの間にスペースを追加する必要があります。複数のユーザーとユーザーグループを構成する場合は、ユーザーをコンマ(,)で区切り、ユーザーグループもコンマ(,)で区切る必要があります。例:user1,user2 group1,group2
。 yarn.admin.acl パラメーターの値にユーザーグループのみが含まれている場合は、ユーザーグループの先頭にスペースを追加する必要があります。 yarn.admin.acl パラメーターを単一のスペースに設定すると、必要な権限はどのユーザーまたはユーザーグループにも付与されません。YARN のキュー管理権限
YARN のキュー権限には、ジョブを送信する権限とキューを管理する権限が含まれます。
EMR 高セキュリティクラスターを作成する場合、YARN サービスの capacity-scheduler.xml ファイルの Capacity Scheduler のデフォルト構成は、yarn.scheduler.capacity.root.acl_submit_applications=
(値は単一のスペース)および yarn.scheduler.capacity.root.acl_administer_queue= hadoop
(hadoop
の前にスペースがあります)です。これは、キュー管理権限が hadoop ユーザーグループに付与されていることを示します。この場合、hadoop ユーザーグループに属していないユーザーは、キューにジョブを送信できません。現在のユーザーが属するユーザーグループを表示するには、id
コマンドを実行します。
クラスターが少数のユーザーのみで使用されており、ACL 機能が不要な場合は、上記の 2 つのパラメーターの設定をクリアできます。次に、次の手順を実行してキュー構成を更新します。EMR コンソールの YARN サービスページの [ステータス] タブで、ResourceManager コンポーネントを見つけ、[アクション] 列の [その他] アイコンにポインターを移動し、[refresh_queues] を選択します。表示されるダイアログボックスで、[実行理由] パラメーターを構成し、[OK] をクリックします。確認メッセージで、[OK] をクリックします。このようにして、ACL 機能が無効になります。
- ACL 機能を使用する場合は、Ranger と一緒に使用することをお勧めします。このようにして、ユーザーキューの権限を視覚的に構成および管理できます。説明 Ranger は Capacity Scheduler のみをサポートしています。詳細については、「Ranger で YARN を有効にし、関連する権限を構成する」をご参照ください。
- ACL 機能を使用するには、キューの ACL 承認のために yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications パラメーターと yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue パラメーターを capacity-scheduler.xml 構成ファイルに追加します。詳細については、「キューのプロパティ」と、YARN スケジューラーのトピックの「キューの ACL 構成」セクションをご参照ください。
ACL 機能は、Capacity Scheduler のキューマッピング機能と組み合わせて使用できます。ユーザーまたはユーザーグループとキュー間のマッピングを構成するには、capacity-scheduelr.xml 構成ファイルで yarn.scheduler.capacity.queue-mappings パラメーターを構成します。次に、
yarn.scheduler.capacity.queue-mappings-override.enable
パラメーターを true に設定できます。このようにして、ユーザーまたはユーザーグループは、ユーザーまたはユーザーグループがマッピングされているキューにジョブを送信できます。
YARN のジョブ管理権限
YARN のジョブ管理権限には、VIEW_APP
と MODIFY_APP
が含まれます。 VIEW_APP 権限はジョブに関する情報を表示するために使用され、MODIFY_APP 権限はジョブを変更するために使用されます。
- VIEW_APP:ジョブに関する情報と YARN コンポーネントのログを表示できます。 VIEW_APP には、ユーザーの VIEW_APP 動作を制限するためにエンジン側で構成されている権限は含まれていません。
デフォルトでは、mapred-site.xml ファイルには
mapreduce.job.acl-view-job=*
設定が含まれています。これは、VIEW_APP 権限が MapReduce のユーザーに付与されていることを示します。 - MODIFY_APP:YARN でジョブを停止するときに、
ADMINISTER_QUEUE
権限を使用して ACL を管理できます。
LCE
デフォルトでは、非高セキュリティクラスターにデプロイされた YARN サービスのコンテナーは、DefaultContainerExecutor 実装クラスを使用します。コンテナーが hadoop アカウントを使用する場合、異なるユーザーによって送信されたジョブを認証によって分離することはできません。この場合、ユーザーは YARN に関連するファイルと構成に悪意を持ってアクセスし、変更できます。テナントは、互いのリソースに悪意を持ってアクセスする可能性もあります。EMR 高セキュリティクラスターは、Linux Container Executor(LCE)を使用してセキュアなコンテナーを実行します。 LCE を使用すると、コンテナーは setuid ビットに基づいてジョブを送信したユーザーのアカウントを使用してアプリケーションを実行できます。このようにして、コンテナーの高リスクで不要な権限が取り消されます。
LCE を使用するには、NodeManager が実行されているオペレーティングシステムに、ジョブを送信するユーザーに対応する Linux アカウントがあることを確認します。ユーザーを追加するには、EMR コンソールでユーザー管理機能を使用することをお勧めします。このようにして、ユーザーを EMR クラスターの OpenLDAP サービスに追加し、各ノードの Nslcd サービスを使用して Linux アカウントにマッピングできます。この方法を使用してユーザーを追加する場合、OpenLDAP サービスをクラスターにデプロイする必要があります。 Linux アカウントを管理することもできます。クラスターの各ノードで YARN に対応する Linux アカウントを追加し、必要なブートストラップアクションスクリプトを追加できます。これにより、新しいノードに Linux アカウントが自動的に追加されます。